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

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

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

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

0
BlackStar
месяц назад
  • 1
    campusboy4250 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 29 дней назад
    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 29 дней назад

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

    BlackStar 29 дней назад

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

    campusboy 29 дней назад

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

    BlackStar 29 дней назад

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

    campusboy 29 дней назад

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

    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 28 дней назад

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

    campusboy 28 дней назад

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

    campusboy 28 дней назад

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

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