Как ограничить редактирование полей в BuddyPress за 5 минут

Иногда возникает необходимость в предотвращении редактирования полей профиля пользователя в BuddyPress после их первоначального заполнения. Пол пользователя, имя и фамилия, дата рождения. Это самые частые примеры, где может понадобиться ограничить редактирование полей.
Будем использовать хук xprofile_data_before_save и немного CSS.
Прежде всего, предотвратим изменение значения поля.
function bs_prevent_xprofile_field_change( $field_obj ) {
// 100 is your field id
if ( $field_obj->field_id == 100 && ! current_user_can( 'manage_options' ) )
$field_obj->field_id = FALSE;
return $field_obj;
}
add_action( 'xprofile_data_before_save', 'bs_prevent_xprofile_field_change' );
Code language: PHP (php)
В функции, привязанной к хуку xprofile_data_before_save:
- Проверяем id поля, чтобы не заблокировать все поля в BuddyPress, а только конкретное
- Проверяем права пользователя, если это админ, то на него запрет не должен действовать
- Для подходящего поля профиля устанавливаем field_id в FALSE, чтобы избежать сохранения нового значения
Теперь немного косметики. Давайте скроем поле со страницы редактирования профиля. Делается это элементарно с помощью CSS.
#buddypress #item-body .profile-edit.base .field_100 {
display: none;
}
Code language: CSS (css)
Это пример из темы моего недавнего проекта. Так что селекторы в вашем случае могут отличаться, но смысл один — скрыть блок с заблокированным полем.
Таким простым способом можно заблокировать изменение некоторых полей профиля в BuddyPress без покупки разного рода плагинов за ~ $30.