Наверняка вы знаете, что в меню Внешний вид в админке WordPress есть пункт "Настроить". Его английский аналог - Appearance → Customize. Так вот Customizer - это английский вариант слова "настройщик" и одновременно специальный класс, который предназначен для управления настройками темы в ее классическом варианте.
Подключаем файл customize.php в functions.php
Для того чтобы использовать Customizer в WordPress, лучше создать отдельный файл в папке inc с именем customize.php, чтобы не смешивать этот код с другим. Затем его нужно подключить в файл functions.php, т.к. он отвечает за весь функционал вашей темы.
|
1 2 3 4 5 6 7 |
<?php define('THEME_DIR', get_template_directory() ); //Весь предыдущий код //.... /* Customizer */ require THEME_DIR. '/inc/customizer.php'; |
Затем необходимо определиться с тем, какие настройки вы будете добавлять. Самыми распространенными являются: текстовое поле и текстовая область, флажок (checkbox), radio-кнопки, выпадающий список (select) и его разновидности в виде списка категорий, записей или страниц, colorbox и загрузчик медиа (картинок, видео и т.д).
Кроме того, настройки могут размещаться в отдельной секции, или разделе настройщика либо могут быть добавлены в уже существующие. Если вы хотите выделить настройки вашей темы в отдельный блок, то можете создать свою панель. Давайте начнем с этих крупных блоков Customizer, а затем уже посмотрим, куда мы можем добавить конкретные поля и кнопки.
Всю информацию по Customizer вы можете найти в официальной документации на ресурсе для разработчиков WordPress.
Чтобы использовать Customizer, как объект, а также получить доступ к диспетчеру Customizer, добавьте в customize.php хук customize_register:
|
1 2 3 4 5 |
function themeslug_customize_register( $wp_customize ) { // некие действия с использованием методов с объектомом $wp_customize, //представляющим класс WP_Customize_Manager. } add_action( 'customize_register', 'themeslug_customize_register' ); |
Методы, которые вы можете использовать, представлены ниже. Все они имеют свои настройки, но, если говорить в общем, то методы, начинающиеся с add_ позволяют добавить настройки, get_ - их получить, remove_ - удалить.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
add_action('customize_register','mytheme_customize_register'); function mytheme_customize_register( $wp_customize ) { $wp_customize->add_panel(); $wp_customize->get_panel(); $wp_customize->remove_panel(); $wp_customize->add_section(); $wp_customize->get_section(); $wp_customize->remove_section(); $wp_customize->add_setting(); $wp_customize->get_setting(); $wp_customize->remove_setting(); $wp_customize->add_control(); $wp_customize->get_control(); $wp_customize->remove_control(); } |
Это только названия функций по группам. У каждой из них есть еще параметры. Что касается самих функций, то самыми используемыми являются те, что начинаются с add_, т.к. нам нужно, прежде всего, добавить панели, разделы, настройки.
Создание отдельной панели
За создание панелей отвечает класс WP_Customize_Panel. Название темы, для которой мы здесь будем создавать настройки, techex, поэтому во всех строках для перевода будет указана эта строка и сами настройки будут начинаться с techex_. Поэтому панель мы добавим с помощью метода add_panel():
|
1 2 3 4 5 6 7 |
//Theme Optitions $wp_customize->add_panel( 'techex_theme_options', array( 'priority' => 10, //по умолчанию 160 'title' => __( 'Theme Options', 'techex' ), 'description' => __( 'Theme Modifications', 'techex' ), )); |
Приоритет (priority) позволяет расположить настройки темы выше/ниже в списке уже существующих настроек, title - это название панели, а description - описание того, что можно сделать с помощью данных настроек.
Ни раздела, ни элементов управления у нас пока что нет, то есть увидеть сейчас созданную панель мы не сможем.
Создание нового раздела настроек
Чтобы панель отобразилась в настройщике, в нее нужно добавить хотя бы один раздел. За создание разделов настроек отвечает класс WP_Customize_Section и метод add_section():
|
1 2 3 4 5 6 |
//Footer Section $wp_customize->add_section( 'techex_footer_options' , array( 'title' => __( 'Footer Options', 'techex' ), 'priority' => 45, 'panel' => 'techex_theme_options', ) ); |
Важно, чтобы ваш раздел имел приоритет, который позволит его разместить выше или ниже существующих или после них. Если вы собираетесь добавлять раздел не в созданную вами панель, а между стандартными, то ниже вы найдете их названия и приоритет (своего рода уровень).
| Название | ID (слаг) | Приоритет (Priority) |
| Свойства сайта (Site Title & Tagline) | title_tagline | 20 |
| Цвета (Colors) | colors | 40 |
| Изображение заголовка (Header Image) | header_image | 60 |
| Фоновое изображение(Background Image) | background_image | 80 |
| Панель Меню (Menus) | nav_menus | 100 |
| Панель виджетов (Widgets) | widgets | 110 |
| Настройки главной страницы (Static Front Page) | static_front_page | 120 |
| По умолчанию (default) | 160 | |
| Дополнительный CSS (Additional CSS) | custom_css | 200 |
Имейте в виду, что вы можете добавлять элементы управления не только в новые панели, но и в те, что присутствуют в таблице выше. Для этого в атрибуте section нужно указать ID (слаг) соответствующего раздела, например, 'section' => 'colors'.
Добавляем свои (пользовательские) элементы управления
Пользовательские элементы управления - это собственно те самые текстовые поля, чекбоксы, радио-кнопки или выпадающие списки, о которых мы говорили в начале. Для каждого такого элемента настройки темы нужно добавлять саму настройку, за которую отвечает класс WP_Customize_Setting и контролирующий элемент, создаваемый классом WP_Customize_Control.
Для начала добавляем настройку. Она задает название поля, его значение по умолчанию, метод очистки данных, тип обновления и тип настройки. Ниже представлен общий вид со всеми возможными параметрами и их описанием:
|
1 2 3 4 5 6 7 8 9 |
$wp_customize->add_setting( 'setting_id', array( 'type' => 'theme_mod', // Или 'option' 'capability' => 'edit_theme_options', // Права доступ к изменению настроек кастомайзера. 'theme_supports' => '', // Требуется редко. 'default' => '', // Значение по умолчанию. 'transport' => 'refresh', // По умолчанию - перезагрузка фрейма или 'postMessage' - через дополнит.JS. 'sanitize_callback' => '', // Очистка данных на стороне PHP. 'sanitize_js_callback' => '', // Очистка данных на стороне JavaScript. В основном 'to_json'. ) ); |
Имеет смысл остановиться на параметре type: он может иметь значение option (опции) и theme_mod (модификации темы):
- Опции (option) хранятся в таблице wp_options и имеют имя (название) в виде первого параметра
'setting_id'. В файлах темы вы будете получать значение любой опции принято функцией get_option(). - Модификации темы (theme_mod) - это значение по умолчанию. Они хранятся для каждой темы отдельно в виде сериализованного массива в таблице wp_options, в опции с названием
theme_mods_THEME_NAME. Получать такие опции принято функцией get_theme_mod() или get_theme_mods().
Для нашего раздела в футере мы добавим настройку для копирайта в виде текстового поля.
|
1 2 3 4 5 6 |
//Setting for Copiright text $wp_customize->add_setting( 'techex_copyright_text', array( 'default' => __( 'All rights reserved ', 'techex' ), 'sanitize_callback' => 'sanitize_text_field', )); |
Теперь укажем, что это будет текстовое поле:
|
1 2 3 4 5 6 7 8 9 |
$wp_customize->add_control( 'techex_copyright_text', array( 'type' => 'text', 'priority' => 10, 'section' => 'techex_footer_options', 'label' => __('Copyright text', 'techex' ), 'description' => __( 'Text in the footer', 'techex' ), ) ); |
Методadd_control( $id, $args ) добавляет элемент управления, в котором вы указываете, каким будет ваш элемент управления (какой-либо из обычных элементов форм, например, text, textarea, checkbox, select или тот, что описан в ядре WordPress, например, WP_Customize_Color_Control. Общий вид использования этого метода:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$wp_customize->add_control( $id, //совпадает со строкой setting_id в методе add_setting() array( 'type' => 'radio', // 'text' по умолчанию 'priority' => 10, // последовательность размещения полей. По умолчанию: 10 'section' => 'section_id', // id раздела, в котором будет элемент настройки 'label' => 'text', // Подпись для элемента. 'description' => __( 'Choose Layout', 'themeslug' ), // текст описания 'choices' => array( // массив атрибутов для radio и select 'leftsidebar' => __( 'Left Sidebar', 'themeslug' ), //значение => текст метки label/option 'rightsidebar' => __( 'Right Sidebar', 'themeslug' ), 'fullwidth' => __( 'Full Width', 'themeslug' ), ), 'input_attrs' => array( // Атрибуты в виде классов, id, data-атрибутов или placeholder 'class' => 'inline-form-control', //'атрибут' => 'значение' 'style' => 'border: 1px solid #900', 'placeholder' => __( 'Some text', 'themeslug' ), ), 'active_callback' => 'is_front_page', // на какой странице показывать элемент. Необязательный ) ); |
Параметры add_control():
$id- обязательный параметр, который чаще всего является строкой или объектом Customize Control.type- тип поля в виде строки или объекта.- Строки, которые можно использовать
text,checkbox,textarea,radio,select,dropdown-pages, иemail,url,number,hidden,date. - Объекты, которые можно использовать в качестве параметра $id.
- Разные:
- Image:
- Nav_Menu:
- Widget:
- Строки, которые можно использовать
- Массив свойств для нового объекта управления указывается, только когда в $id будет строка (как в примере выше). Если же в $id указывается объект (например,
WP_Customize_Color_Control), то параметры передаются в создаваемый объект. Большая часть из них описана в коде. Обратить внимание нужно на редко используемые:- allow_addition( по умолчанию false). Установите true, чтобы разрешить пользователям добавлять новые страницы из элемента управления dropdown-pages.
- active_callback (callback) - этот необязательный аргумент может отображать или скрывать раздел в зависимости от просматриваемой в данный момент страницы внутри настройщика. Это аргумент использует такие условные функции, как is_page, is_front_page, is_archive и др., но без круглых скобок. То есть какой-либо элемент настройки будет показан, когда вы открыли главную страницу в кастомайзере (настройщике), но он же будет скрыт на других страницах. К слову используется редко, т.к. много настроек не подразумевают переключение страниц.
Параметр input_attrs мы еще используем для создания настройки для текстового поля с шорткодом.
Настройки для футера
Давайте соберем все, что писали по частям, в один код для файла customize.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 35 36 |
<?php function techex_customize_register( $wp_customize ) { //Theme Options Panel $wp_customize->add_panel( 'techex_theme_options', array( 'priority' => 10, 'title' => __( 'Theme Options', 'techex' ), 'description' => __( 'Theme Modifications', 'techex' ), ) ); //Footer Section $wp_customize->add_section( 'techex_footer_options' , array( 'title' => __( 'Footer Options', 'techex' ), 'priority' => 45, 'panel' => 'techex_theme_options', ) ); //Setting for Copiright text $wp_customize->add_setting( 'techex_copyright_text', array( 'default' => __( 'All rights reserved ', 'techex' ), 'sanitize_callback' => 'sanitize_text_field', )); // Control for Copyright text $wp_customize->add_control( 'techex_copyright_text', array( 'type' => 'text', 'priority' => 10, 'section' => 'techex_footer_options', 'label' => __('Copyright text', 'techex' ), 'description' => __( 'Text in the footer', 'techex' ), ) ); } add_action( 'customize_register', 'techex_customize_register' ); |
В результате этих действий мы увидим в кастомайзере следующие настройки:
Настройка для кнопки "Прокрутить вверх"
Для того, чтобы "усилить" наши настройки футера, добавив в них еще одну - это флажок (checkbox), который будет отображать или прятать кнопку , отправляющую прокрутку вверх (to top), которая традиционно размещается в футере.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//добавьте внутрь функции techex_customize_register() // Setting for to top button $wp_customize->add_setting( 'techex_istotop', array( 'default' => 1,//or 0 'sanitize_callback' => 'techex_sanitize_checkbox', )); // Control for to top button $wp_customize->add_control( 'techex_istotop', array( 'type' => 'checkbox', 'priority' => 15, 'section' => 'techex_footer_options', 'label' => __('Show To Top Button', 'techex' ), 'description' => __( 'Check if you need To Top button', 'techex' ), ) ); |
В методе add_setting() у нас есть функция techex_sanitize_checkbox(), которая нужна для проверки значения checkbox и его преобразования. Она не слишком обязательна, т.к. можно использовать и стандартную sanitize_text_field(), но давайте посмотрим, как можно реализовать этот код:
|
1 2 3 |
function techex_sanitize_checkbox( $checked ) { return ( ( isset( $checked ) && true == $checked ) ? true : false ); } |
Добавляем настройки в файл footer.php
Теперь наши настройки нужно применить на всех страницах, добавив код в файл footer.php. Для этого мы будем использовать функцию get_theme_mod('setting_id', 'default_value'). В эту функцию нужно передать id настройки, под которым вы добавили ее в customize.php и значение по умолчанию.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $copyright_text = get_theme_mod('techex_copyright_text', __( 'All rights reserved', 'techex' )); $isToTop = get_theme_mod('techex_istotop', 1); ?> <div class="footer-bottom"> <div class="container text-center"> <div class="footer-bottom-content"> © <?php echo date('Y') ?> <a href="<?php bloginfo('siteurl'); ?>"><?php bloginfo('sitename') ?></a>. <?php echo $copyright_text ?> </div> </div> </div> </footer> <?php if($isToTop): ?> <a id="scrollUp" href="#top"><i class="fal fa-angle-up"></i></a> <?php endif; ?> <?php wp_footer(); ?> |
Как добавить дату в футере, можно прочитать здесь. Вывод последних записей для футера вы найдете в отдельной статье.
В результате получим такое сочетание настроек и внешнего вида футера.
Добавление шорткода в Customizer. Текстовое поле для чтения
По умолчанию тип поля в Кастомайзере - это текст. И как правило, он должен быть редактируемым, как в примере с настройками для копирайта.
Однако, может быть случай, когда вам нужно, чтобы поле было только для чтения. Примером такого поля может быть шорткод, который назначается, например, для любой формы в плагине Contact Form 7. Возможно, в настройках темы вам понадобится такое же поле. Оно должно иметь такой атрибут, как readonly, или readonly="readonly". Задать его можно с помощью дополнительной опции настроек input_attrs - т.е. артибуты поля ввода. Мы добавим 2 атрибута: 'input_attrs' => array('readonly'=>'readonly', 'onclick'=>'this.select()':
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$wp_customize->add_section( 'techex_review_logo_section' , array( 'title' => __( 'Review Shortcode Options', 'techex' ), 'priority' => 35, 'panel' => 'techex_theme_options', ) ); $wp_customize->add_setting('techex_review_shortcode', array( 'default' => '[techex_reviews_logo]', )); $wp_customize->add_control('techex_review_shortcode', array('label' => esc_html__('Shortcode for post and pages', 'mytheme'), 'section' => 'techex_review_logo_section', 'type' => 'text', 'input_attrs' => array( 'readonly'=>'readonly', 'onclick'=>'this.select()' ) )); |
В результате вы получите текстовое поле, в котором уже будет находится значение по умолчанию, но изменить его нельзя. Можно только скопировать.
Необходимость в таком поле может появиться тогда, когда некий шорткод нужно вставить на несколько страниц, но его сложно найти или сохранить где-либо, кроме настроек.
Настройки для создания слайдера вы найдете в статье "Используем Customizer для загрузки изображений".

