Как добавить настройки сайта через ACF Options Page
Как создать глобальные настройки сайта через ACF Options Page, добавить поля телефона и email и безопасно вывести их в шаблоне WordPress.

ACF Options Page позволяет хранить общие настройки сайта в одном месте: телефон, email, адрес, ссылки на соцсети или текст в подвале. Эти значения не привязаны к отдельной записи, поэтому их можно безопасно получать в шапке, подвале и других шаблонах через get_field( 'field_name', 'option' ).
Ниже настроим страницу «Настройки сайта» через код, добавим поля в интерфейсе ACF и выведем телефон и email в шаблоне. Пример рассчитан на ACF PRO и учитывает отсутствие плагина, пустые значения и правильное экранирование.
Что такое ACF Options Page
Обычные поля ACF сохраняются у конкретной страницы или записи. Options Page хранит глобальные значения в таблице wp_options. Это удобно для данных, которые повторяются по всему сайту и должны редактироваться из одного раздела админки.
Options Page входит в ACF PRO. Начиная с ACF PRO 6.2 страницу можно создать через интерфейс «ACF → Options Pages». В статье используется регистрация через PHP: её проще перенести вместе с дочерней темой или кастомным плагином и хранить в системе контроля версий.
Шаг 1. Зарегистрируйте страницу настроек
Куда вставить: в functions.php дочерней темы или в основной файл собственного небольшого плагина. Если код относится к обязательной функции сайта и не должен зависеть от активной темы, выберите кастомный плагин.
<?php
add_action( 'acf/init', 'ink_register_site_options_page' );
function ink_register_site_options_page() {
if ( ! function_exists( 'acf_add_options_page' ) ) {
return;
}
acf_add_options_page(
array(
'page_title' => 'Настройки сайта',
'menu_title' => 'Настройки сайта',
'menu_slug' => 'site-settings',
'capability' => 'manage_options',
'redirect' => false,
'post_id' => 'option',
'autoload' => false,
)
);
}
Разбор после кода
- Хук
acf/initзапускает регистрацию после инициализации ACF. Официальная документация рекомендует этот момент, чтобы ACF не загружался слишком рано. function_exists()проверяет наличие ACF PRO. Если плагин отключён, WordPress продолжит работать, а пункт настроек просто не появится.menu_slug— уникальная часть адреса страницы в админке. Не используйте такой же slug для другой страницы меню.manage_optionsобычно доступна администраторам. Так редакторы не получат доступ к глобальным контактам без отдельного решения о правах.post_id => 'option'задаёт место хранения. То же значение нужно передавать вторым аргументомget_field().autoload => falseне добавляет эти значения в автоматическую загрузку всех опций. Для небольшого набора часто используемых полей можно осознанно выбратьtrue, но сначала оцените объём данных.
Шаг 2. Создайте группу полей
- Откройте «ACF → Field Groups» и создайте группу «Контакты сайта».
- Добавьте текстовое поле «Телефон» с именем
site_phone. - Добавьте поле Email с именем
site_email. - В блоке Location выберите правило «Options Page is equal to Настройки сайта».
- Сохраните группу, затем откройте новый пункт «Настройки сайта», заполните данные и нажмите «Обновить».
Имя поля — это техническое значение из настройки Field Name. Оно должно совпадать с именем в PHP-коде. Подпись «Телефон» может быть любой и нужна только редактору.
Шаг 3. Выведите телефон и email в шаблоне
Куда вставить: в тот PHP-шаблон дочерней темы, где должны появиться контакты. Для шапки это обычно header.php или отдельный файл в template-parts; для подвала — footer.php или соответствующий template part. Не вставляйте PHP в визуальный редактор страницы.
<?php
$site_phone = '';
$site_email = '';
if ( function_exists( 'get_field' ) ) {
$phone_value = get_field( 'site_phone', 'option' );
$email_value = get_field( 'site_email', 'option' );
$site_phone = is_string( $phone_value ) ? trim( $phone_value ) : '';
$site_email = is_string( $email_value )
? sanitize_email( $email_value )
: '';
}
$phone_href = preg_replace( '/[^0-9+]/', '', $site_phone );
?>
<?php if ( '' !== $site_phone || is_email( $site_email ) ) : ?>
<address class="site-contacts">
<?php if ( '' !== $site_phone && '' !== $phone_href ) : ?>
<a href="tel:<?php echo esc_attr( $phone_href ); ?>">
<?php echo esc_html( $site_phone ); ?>
</a>
<?php endif; ?>
<?php if ( is_email( $site_email ) ) : ?>
<a href="mailto:<?php echo esc_attr( $site_email ); ?>">
<?php echo esc_html( antispambot( $site_email ) ); ?>
</a>
<?php endif; ?>
</address>
<?php endif; ?>
Разбор после кода
get_field( ..., 'option' )получает глобальное значение. Без второго аргумента ACF будет искать поле у текущей записи и может вернуть пустой результат.is_string()защищает шаблон от неожиданного типа значения, аtrim()убирает пробелы по краям.- Для
tel:создаётся отдельное значение без пробелов, скобок и дефисов. Пользователь всё равно видит телефон в исходном удобном формате. sanitize_email()очищает email, аis_email()проверяет его перед выводом.esc_attr()используется внутри атрибутовhref, аesc_html()— для видимого текста. Подробные примеры есть в статье про безопасный вывод ACF-полей.- Обёртка
<address>создаётся только при наличии телефона или корректного email, поэтому шаблон не оставляет пустую разметку.
Что должно получиться
В админке появится отдельный пункт «Настройки сайта». Администратор один раз сохранит телефон и email, после чего они появятся во всех шаблонах, где установлен код вывода. Пустое поле не создаст пустую ссылку, а отключение ACF не приведёт к критической ошибке.
Как проверить
- Откройте «Настройки сайта», заполните телефон и email и сохраните страницу.
- Откройте страницу сайта без входа в WordPress. Телефон и email должны отображаться в выбранном месте.
- Нажмите на телефон на мобильном устройстве: система должна предложить звонок на номер без пробелов и скобок.
- Очистите email в настройках и сохраните страницу. Ссылка email должна исчезнуть, а телефон остаться.
- Очистите оба поля. В исходном HTML не должно остаться пустого
<address class="site-contacts">. - Если для блока нужны отдельные стили, подключите CSS через
wp_enqueue_style(). Порядок подключения разобран в статье про wp_enqueue.
Если не работает
- Пункт меню не появился. Проверьте, что активирован ACF PRO, код подключён и функция зарегистрирована на хуке
acf/init. - Страница настроек есть, но полей нет. Проверьте Location Rule группы: она должна быть назначена именно созданной Options Page.
- Поля заполнены, а шаблон пустой. Убедитесь, что вторым аргументом
get_field()передано'option'и именаsite_phone,site_emailсовпадают с Field Name. - Email не выводится. Проверьте формат адреса. Значение, которое не проходит
is_email(), намеренно скрывается. - Редактор не видит настройки. В примере указана capability
manage_options. Если доступ нужен другой роли, сначала определите подходящую возможность WordPress и измените параметр осознанно. - После вставки возникла критическая ошибка. Восстановите резервную копию файла и проверьте PHP-синтаксис. Последовательность диагностики есть в статье о критической ошибке WordPress.
- Правка исчезла после обновления темы. Перенесите код и изменённый шаблон в дочернюю тему WordPress или собственный плагин.
Официальные источники
Актуальные параметры и способы регистрации описаны в документации ACF Options Page и acf_add_options_page(). Правила безопасного вывода сверяйте со справкой WordPress по экранированию.

