WordPress как на ладони

ACF Создать поле которое может редактировать только админ

Скажите, есть ли возможность создать в админки поле плагина ACF типа Текст, редактирование значения которого в админке будет возможно только для пользователей ранга администратор, или других званий?

ACF поле которое задавать сможет только админ.

0
BlackStar
1.2 года назад 6
  • 1
    campusboy4752 www.youtube.com/c/wpplus

    Используйте фильтр acf/load_field для этих целей, например:

    function acf_field_read_only( $field ) {
      $field['readonly'] = ! current_user_can('manage_options');
    
      return $field;
    }
    
    add_filter( 'acf/load_field/name=my_key_field', 'acf_field_read_only' );

    Где my_key_field надо сменить на своё имя поля.

    BlackStar 1.2 года назад
    function acf_field_read_only( $field ) {
    	$field['readonly'] = ! current_user_can('manage_options');
    	return $field;
    }
    
    add_filter( 'acf/load_field/key=user_rank', 'acf_field_read_only' );

    Что-то не работает это добавление в function.php. Есть пользователи с ролями Author/Contributor/Editor и заходя в свои учетные записи данные пользователи всё ещё имеют возможности менять значения в поле user_rank

    campusboy 1.2 года назад

    Файл должен быть functions.php, а не function.php - это важно, проверьте.

    BlackStar 1.2 года назад

    Да, там. Описка. Функция не отрабатывает. Поле продолжает быть доступным всем для редактирования.

    campusboy 1.2 года назад

    Поправил код и проверил дополнительно - должно работать

    BlackStar 1.2 года назад

    Интересная штука, поле вроде как и стало для других ролей кроме Админа статусом - "только на чтение". Но если, открыть окно разработчика, и в данном поле физически поставить свою надпись в value а потом Обновить, то оно нормально обновляет это дело. Это похоже на дыру... Возможно можно не выводить данное поле, для тех кому оно не предназначается для исправления ?
    Hole in ACF

    campusboy 1.2 года назад

    Можно попробовать тогда вот так:

    add_filter( 'acf/pre_render_fields', function ( $fields ) {
    	foreach ( $fields as $index => $field ) {
    		if ( $field['name'] === 'my_key_field' && ! current_user_can( 'manage_options' ) ) {
    			unset( $fields[ $index ] );
    		}
    	}
    
    	return $fields;
    } );
    BlackStar 1.2 года назад

    К сожалению, это не работает. Даже со статусом автор, пользователь имеет возможность править такие поля

    campusboy 1.2 года назад

    Каким образом он сможет это сделать, если поле даже не отображается?

    campusboy 1.2 года назад

    В любом случае можно использовать хук acf/validate_value, чтобы не дать сохранить таким ролям поле.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация