Иногда возникает необходимость в предотвращении редактирования полей профиля пользователя в 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.