eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

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

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

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

0
BlackStar
3.5 лет назад 12
  • 1
    campusboy 4985 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 3.5 лет назад
    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 3.5 лет назад

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

    BlackStar 3.5 лет назад

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

    campusboy 3.5 лет назад

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

    BlackStar 3.5 лет назад

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

    campusboy 3.5 лет назад

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

    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 3.5 лет назад

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

    campusboy 3.5 лет назад

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

    campusboy 3.5 лет назад

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

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