
🛠 Додавання довільного поля в налаштування WordPress: add_settings_field
Стандартні налаштування WordPress покривають більшість повсякденних завдань. Але рано чи пізно з’являється потреба в полі, якого в адмінці немає: телефон компанії в розділі «Загальні», API-ключ сервісу, поле для номера ліцензії або текст у футер.
Розробники тем і плагінів вирішують це через Settings API, набір функцій WordPress для реєстрації своїх секцій і полів на штатних сторінках налаштувань. Ключова з них, add_settings_field(): вона додає довільне поле у вказану секцію та сторінку.
До кінця цього туторіалу у вас буде готовий робочий код, який виводить текстове поле в адмінці, зберігає значення в базу та відображає його на сайті. Жодних сторонніх плагінів, лише вбудоване API.
💡 Швидкий огляд:
- Підготуйте оточення: створіть дочірню тему або встановіть плагін Code Snippets, щоб код не злетів під час оновлення батьківської теми.
- Зареєструйте налаштування: викличте
register_setting()на хукуadmin_init, інакше WordPress не збереже дані поля. - Додайте секцію та поле: використайте
add_settings_section()для нового блоку таadd_settings_field()для поля введення всередині нього. - Виведіть значення: застосуйте
get_option()у будь-якому місці шаблону, щоб відобразити збережені дані на сайті.
Що таке add_settings_field і де застосовується
Функція add_settings_field() з’явилася у WordPress 2.7.0 і відтоді залишається основним інструментом для розширення сторінок налаштувань. Згідно з документацією WordPress, вона додає нове поле в наявну секцію на одній зі сторінок адмінки.
Що це дає на практиці. Ви можете вивести додаткове поле на будь-якій стандартній сторінці: Загальні (general), Написання (writing), Читання (reading), Обговорення (discussion) або Медіафайли (media). А якщо створили власну сторінку налаштувань через add_options_page(), поле стане й туди.
Типові сценарії:
- Поле «Контактний телефон» у розділі загальних налаштувань, менеджеру не потрібно лізти в код, щоб оновити номер.
- Поле API-ключа для свого плагіна, користувач вводить ключ в адмінці замість правки
wp-config.php. - Група полів для кастомного розділу (телефон, email, адреса), через зв’язку
add_settings_section()+ кількаadd_settings_field().
Зверніть увагу: add_settings_field() лише виводить HTML поля. Саме збереження бере на себе register_setting(), без неї WordPress проігнорує введені дані.
Синтаксис і параметри add_settings_field
Сигнатура функції, чотири обов’язкові параметри та два опціональні:
1 add_settings_field( 2 string $id, 3 string $title, 4 callable $callback, 5 string $page, 6 string $section = 'default', 7 array $args = array() 8 );
Розберемо кожен параметр.
$id, унікальний ідентифікатор поля. Це значення стане HTML-атрибутом id тега <input>, який ви виводите в callback-функції. Використовуйте префікс, щоб уникнути конфліктів, наприклад, myplugin_phone_number.
$title, підпис до поля, який відображається в адмінці ліворуч від самого input-а. Пишіть зрозуміло: «Контактний телефон», «API-ключ сервісу».
$callback, ім’я вашої функції, яка виводить HTML-код поля (input, textarea, select). Саме тут ви пишете echo. Функція має бути оголошена заздалегідь, передавайте її як рядок: 'my_field_callback'.
$page, slug сторінки налаштувань. Стандартні значення: general, reading, writing, discussion і media. Якщо ви створили кастомну сторінку, вкажіть її slug. Визначає, де з’явиться поле.
$section (опціональний), slug секції, в яку потрапить поле. За замовчуванням 'default' — це найвища секція на сторінці. Якщо ви створили свою секцію через add_settings_section(), вкажіть її ID тут.
$args (опціональний), масив додаткових налаштувань. Підтримуються ключі label_for (значення HTML-атрибута for у <label>) і class (CSS-клас для обгортки поля).
Усі параметри та їхня поведінка описані в офіційному посібнику з Settings API на WordPress.org.
Практичний приклад: додаємо текстове поле в «Загальні налаштування»
Зберемо все разом. Завдання: вивести текстове поле «Контактний телефон» на сторінці Налаштування → Загальні, зберігати введене значення та отримувати його через get_option().
Код додається у functions.php дочірньої теми або через плагін Code Snippets. Другий варіант безпечніший: сніпет не злетить під час оновлення теми.
1 // Callback to output the section description 2 function my_custom_section_callback() { 3 echo 'Contact information for the organization. Phone number is displayed in the site footer.'; 4 } 5 6 // Callback to output the input field 7 function my_phone_field_callback() { 8 $value = get_option( 'my_contact_phone', '' ); 9 echo '<input 10 name="my_contact_phone" 11 type="text" 12 id="my_contact_phone" 13 value="' . esc_attr( $value ) . '" 14 class="regular-text" 15 placeholder="+1 (555) 123-4567" 16 />'; 17 } 18 19 // Register the section and field 20 function my_register_settings() { 21 // Register the setting — without this, data will not be saved 22 register_setting( 'general', 'my_contact_phone' ); 23 24 // Add a section to the General settings page 25 add_settings_section( 26 'my_contact_section', // Section ID 27 'Contact Information', // Section title 28 'my_custom_section_callback', // Callback for description 29 'general' // Page slug 30 ); 31 32 // Add a field to the section 33 add_settings_field( 34 'my_contact_phone', // Field ID 35 'Contact Phone', // Field label 36 'my_phone_field_callback', // Callback to render the field 37 'general', // Page slug 38 'my_contact_section' // Section ID 39 ); 40 } 41 add_action( 'admin_init', 'my_register_settings' );
Що тут відбувається порядково. register_setting() вказує WordPress: значення поля my_contact_phone потрібно зберігати як опцію в таблиці wp_options під час натискання «Зберегти зміни» на сторінці general.
add_settings_section() створює новий блок із заголовком «Контакти організації» на сторінці загальних налаштувань. Колбек my_custom_section_callback() виводить текст-опис над полями секції.
add_settings_field() розміщує наше поле всередині цієї секції та пов’язує його з колбеком my_phone_field_callback(), який рендерить <input type="text">. Функція get_option() підставляє збережене значення в атрибут value, а esc_attr() екранує вивід.
Весь код вішається на хук admin_init, він спрацьовує під час завантаження адмінки та гарантує, що до моменту рендеру сторінки налаштувань секція та поле вже зареєстровані.
Після додавання коду відкрийте wp-admin/options-general.php, ви побачите результат:

Введіть номер, натисніть Зберегти зміни, значення запишеться в базу. Щоб вивести телефон на сайті, використовуйте get_option() у будь-якому місці шаблону:
1 $phone = get_option( 'my_contact_phone', '' ); 2 if ( $phone ) { 3 echo '<a href="tel:' . esc_attr( $phone ) . '">' . esc_html( $phone ) . '</a>'; 4 }
Куди розміщувати код і як тестувати
Три варіанти розміщення, від гіршого до кращого.
Батьківська тема (functions.php). Не робіть так. Під час оновлення теми файл перезапишеться, і ваша кастомізація зникне.
Дочірня тема (****functions.php** дочірньої теми).** Робочий варіант для правок, прив’язаних до конкретного сайту. Код переживе оновлення батьківської теми.
Плагін Code Snippets. Найкращий вибір для тестування та довгострокової підтримки. Сніпет можна вмикати/вимикати однією кнопкою, не чіпаючи файлову систему. Плюс ви отримуєте ізоляцію: якщо сніпет викличе фатальну помилку, WordPress автоматично деактивує його, і сайт не впаде.
Порядок тестування. Створіть повний бекап сайту (база + файли) — це стандартна пересторога під час будь-якої правки адмінки. Додайте код вибраним способом. Відкрийте сторінку налаштувань і перевірте, що поле відображається. Введіть значення та збережіть. Перевірте збереження: оновіть сторінку, поле має бути заповнене тим, що ви ввели.
Якщо поле не з’являється, перевірте, чи не переплутали ви ID секції в параметрі $section у add_settings_field(). Часта помилка: секція створена з одним ID, а в поле передано інший.
Відеоінструкція за темою
Для закріплення матеріалу перегляньте відеорозбір Settings API від одного з WordPress-розробників. Показано повний цикл: реєстрація секції, додавання поля, збереження та вивід на сайті.
⁉️🤔 Часті питання
Чи можна додати кілька полів в одну секцію?
Так. Викликайте
add_settings_field()стільки разів, скільки полів потрібно. Передавайте один і той самий ID секції в параметрі$section. Кожне поле отримає унікальний$idі свій callback. Порядок викликівadd_settings_field()визначає порядок полів на сторінці.
Як додати select, textarea або чекбокс замість текстового поля?
Тип поля задається всередині callback-функції через HTML. Для select формуєте
<select>з<option>, для textarea, тег<textarea>, для чекбокса,<input type="checkbox">. Значення зберігається так само черезregister_setting()і витягується черезget_option(). Специфіка лише в HTML.
Чи потрібно екранувати вивід у callback?
Так, обов’язково. Використовуйте
esc_attr()для значень атрибутів (value, name, id) іesc_html()для тексту між тегами. Це захищає від XSS і гарантує, що спецсимволи в збереженому значенні не зламають верстку.
Чи можна додати поле на сторінку свого плагіна?
Так. Створіть сторінку через
add_options_page()абоadd_menu_page(), потім зареєструйте секції та поля тим самим способом. Slug вашої сторінки підставте в параметр$pageуadd_settings_field(). Механіка нічим не відрізняється від стандартних сторінок.
Що робити, якщо значення не зберігається після натискання «Зберегти зміни»?
Майже напевно ви пропустили
register_setting(). Без цієї функції WordPress не знає, що поле потрібно зберігати, і ігнорує його під час submit. Перевірте: перший параметрregister_setting()має збігатися з назвою сторінки (наприклад,'general'), а другий, з атрибутомnameвашого поля.
Що в підсумку: коли варто розширювати налаштування адмінки
Settings API WordPress, зрілий і стабільний механізм: add_settings_field() не змінювалася з версії 2.7 і залишається актуальною у 2026 році. Додавання своїх полів в адмінку виправдане в трьох випадках:
- Ви розробляєте тему або плагін і хочете дати користувачеві інтерфейс для введення даних, без правки коду.
- Вам потрібне поле з налаштуванням на рівні сайту (номер телефону, API-ключ, ID каталогу), і воно має бути доступне через адмінку, а не через
wp-config.php. - Ви кастомізуєте сайт клієнта і хочете, щоб менеджер міг сам змінювати дані без звернення до розробника.
Якщо поле потрібне лише вам і змінюється раз на рік, простіше прописати значення прямо в коді. Settings API розкривається там, де налаштуваннями користується не розробник.
Почніть із простого: додайте одне текстове поле за прикладом вище. Коли освоїте базовий потік, реєстрація, callback, збереження, вивід, переходьте до select-ів, груп полів і кастомних сторінок налаштувань. А з яким типом поля ви працюєте найчастіше, напишіть у коментарях.



