Довольно часто я встречаюсь с необходимостью сделать для темы WordPress дополнительные настройки, которые администратор сайта мог бы менять по своему усмотрению.
В Вордпресс существует удобный и простой механизм создания таких настроек и вывода их на сайте. Проще всего это объяснить на примере. Например, нам нужно на различных страницах выводить определенные телефон и емейл.
Создание настроек
В первую очередь реализуем хранение этих контактных данных. Для этого в файл function.php нужно добавить код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
add_action('customize_register', function($customizer){ $customizer->add_section( 'dop_setting', array( 'title' => 'Настройки сайта', 'description' => 'Настройки сайта', 'priority' => 35, ) ); $customizer->add_setting( 'phone', array('default' => 'xxx') ); $customizer->add_control( 'phone', array( 'label' => 'Телефон', 'section' => 'dop_setting', 'type' => 'text', ) ); $customizer->add_setting( 'email', array('default' => 'xxx') ); $customizer->add_control( 'email', array( 'label' => 'Емейл', 'section' => 'dop_setting', 'type' => 'text', ) ); }); |
Данный код добавляет секцию (функция add_section) в раздел меню «Внешний вид — Настроить», то есть туда же, где WP отображает часть своих настроек. Новая секция будет отображаться с названием, которое мы передали с аргументом Title.
Для каждой настройки с помощью функции add_setting мы задаем ее название и значение по умолчанию, а помощью функции add_control задаем отображение в виде поля. Собственно если посмотреть на код и на картинки с результатом, то легко понять, что к чему.
Получение настроек
После создание новых настроек их необходимо получить и использовать в нужном месте. Для этого служит функция get_theme_mod. У нее 2 параметра: название нужной переменной, значение по умолчанию (если переменная не найдена). То есть если нам нужно вывести телефон, который в вышеприведенном коде содержится в переменной phone, нам нужно указать код:
1 |
<?php echo get_theme_mod('phone', '-1'); ?> |