Создание дополнительных настроек WordPress (без плагина)

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5
Загрузка...

В административной панели 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');
?>

Аналогичным способом можно добавить множество различных настроек, и подключить их в шаблон.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*