Создание дополнительных настроек WordPress (без плагина)
В административной панели WordPress, есть Общие настройки сайта, где сохраняются Название сайта, URL, и email, которые хранятся в таблице wp_options.
Этих настроек очень мало, а как же адрес офиса, телефон, или возможно социальные сети? Можно конечно же создать HTML виджет в одном из сайдбаров, и разместить в нём все контактные данные, но как клиент будет разгребать это дело?
Если встаёт такая задача, я обязательно делаю дополнительные настройки на клиентских сайтах, вот так:
И соответственно подключаю их в шаблоне сайта
Сегодня мы добавим в общие настройки одно поле:
- Телефон
Для регистрации новой настройки, в WordPress создана специальная функция
register_setting('general','ivacms_field_phone');
Обратите внимание на два параметра:
genereral (Для какого раздела регистрировать настройку)
ivacms_field_phone (Уникальное название поля)
Теперь нужно добавить поле в общие настройки для этого воспользуемся функцией
add_settings_field('ivacms_field_phone','Телефон','add_field_phone','general','default',array('id'=>'ivacms_field_phone','option_name'=>'ivacms_field_phone'));
Функция add_settings_field примает множество аргументов
ivacms_field_phone — уникальное название, зарегистрированное функцией register_setting
Телефон — заголовок над полем
add_field_phone — функция, в которой мы создадим HTML код самого поля
general — Куда именно добавлять настройку
array(‘id’=>’ivacms_field_phone’,’name’=>’ivacms_field_phone’) — уникальное ID и NAME поля
Теперь создадим функцию add_file_phone
function add_field_phone($val){ $phone=esc_attr(get_option($val['name'])); echo "<input class='regular-text' type='text' id='".$val['id']."' name='".$val['name']."' value='$phone'>"; }
С помощью функции get_option, wordpress подтягивает из БД значение с именем настройки, в нашем случае:
get_option('ivacms_field_phone');
Обратите внимание, что в качестве дополнительной настройки я использую обычное текстовое поле «input», понятное дело, что можно подключить textarea и даже визуальный редактор, но это уже другая история.
Теперь соберем весь код, который у нас получился, и обернём его в одну функцию. Если мы этого не сделаем,Wordpress не найдет функцию add_settings_field, а всё потому что она работает только внутри хука admin_menu
function add_phone_in_settings(){ register_setting('general','ivacms_field_phone'); add_settings_field('ivacms_field_phone','Телефон','add_field_phone','general','default',array('id'=>'ivacms_field_phone','option_name'=>'ivacms_field_phone')); function add_field_phone($val){ $phone=esc_attr(get_option($val['option_name'])); echo "<input class='regular-text' type='text' id='".$val['id']."' name='".$val['option_name']."' value='$phone'>"; } }
Мы создали функцию add_phone_in_settings в которой находятся все требования для подключения нового поля в общие настройки. Теперь нужно данную функцию вызывать с помощью хука admin_menu
add_action('admin_menu','add_phone_in_settings'); function add_phone_in_settings(){register_setting('general','ivacms_field_phone'); add_settings_field('ivacms_field_phone','Телефон','add_field_phone','general','default',array('id'=>'ivacms_field_phone','option_name'=>'ivacms_field_phone')); function add_field_phone($val){ $phone=esc_attr(get_option($val['option_name'])); echo "<input class='regular-text' type='text' id='".$val['id']."' name='".$val['option_name']."' value='$phone'>"; }}
Весь разработанный код мы добавляем в файл function.php вашей темы по умолчанию, и на странице «Общих настроек» в самом низу мы видим новое поле «Телефон».
Как отобразить на сайте?
В любом месте шаблона, например footer.php или header.php пишем следующий код:
<?php echo get_option('ivacms_field_phone'); ?>
Аналогичным способом можно добавить множество различных настроек, и подключить их в шаблон.