Верх страницы
Обложка к записи Как сделать поле ACF только для чтения
Время для прочтения: 0 мин. 35 сек.

Как сделать поле ACF только для чтения

Иногда нам требуется запретить редактировать ACF поля, но оставить возможность его просматривать, то есть сделать поле «только для чтения».

Например, у вас на сайте это поле обновляется по крону. Для сохранения значения корректным мы разрешаем администратору только смотреть, но не редактировать это поле.

Для этого воспользуемся фильтрами acf/load_field.

Функция для изменения ACF поля

Для начала нам нужно написать функцию, которая будет изменять значение элемента массива заданного поля. Функция должна установить значение 1 для элемента массива, где ключ readonly, и вернуть массив обратно.

function mihdan_acf_read_only( $field ) {
	$field['readonly'] = 1;

	return $field;
}

Теперь мы должны привязать эту функцию к одному из фильтров, используя функцию add_filter.

Имеющиеся хуки ACF

Плагин Advanced custom fields имеет 4 хука для фильтрации полей.

  1. acf/load_field – хук для каждого поляhook every field.
  2. acf/load_field/type={$field_type} – хук для поля определённого типа.
  3. acf/load_field/name={$field_name} – хук для поля с определённыи именем.
  4. acf/load_field/key={$field_key} – хук для поля с определённым ключом.

Давайте воспользуемся фильтром acf/load_field/key={$field_key}, чтобы изменить параметры только для одного определённого поля. В нашем примере ключ поля field_5b3a30ca02e47, поэтому хук выглядит как acf/load_field/key=field_5b3a30ca02e47. Его мы и используем в функции add_filter.

add_filter( 'acf/load_field/key=field_5b3a30ca02e47', 'mihdan_acf_read_only' );

Финальный код

function mihdan_acf_read_only( $field ) {
	$field['readonly'] = 1;

	return $field;
}
add_filter( 'acf/load_field/key=field_5b3a30ca02e47', 'mihdan_acf_read_only' );

Источник: Easiest way to make ACF field readonly

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, OpenCart, DLE, Laravel, Moonshine, Symfony, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

2 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
NataliY
NataliY
4 лет назад

А нельзя запретить редактирование CSS?

Предыдущая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы