Если ты делаешь тему на WordPress и каждый раз хардкодишь цвета, логотипы и прочий визуальный мусор в CSS — остановись. Не надо быть великим гуру PHP, чтобы запихнуть всё это в кастомайзер и дать пользователю ползунки и выпадашки. Поговорим, как добавить настройки в тему — чтобы один раз сделал и не возвращался к этому через три месяца с фразой “а где я это менял”.
Первый шаг создания настроек
Создание настроек темы производится в файле functions.php вашего шаблона. Если его еще нет, то нужно его создать. После того, как вы его создадите, дабавьте в этот файл следующий код:
<?php
add_action('admin_menu', function(){
add_theme_page('Настроить', 'Настроить', 'edit_theme_options', 'customize.php');
});При переходе к пункту «Внешний вид» появится пункт «Настройки».
Создание панели настроек
Панель настроек является пунктом, который может содержать специальные секции с настройками:
WP_Customize_Manager::add_panel( WP_Customize_Panel|string $id, array $args = array() )Например:
$wp_customize->add_panel( 'panel_id', array(
'priority' => 10,
'capability' => 'edit_theme_options',
'theme_supports' => '',
'title' => 'Заголовок',
'description' => 'Описание',
) );Параметры:
- id - обязательный параметр, идентификатор панели
- args - аргументы
- priority - приоритет панели, определяющий порядок отображения панелей и разделов. По умолчанию 160
- capability - возможности, необходимые для панели. По умолчанию edit_theme_options
- theme_supports - тематические функции, необходимые для поддержки панели
- title - отображаемое название панели
- description - отображаемое описание панели
- type - тип панели
- active_callback - активный обратный вызов
Создание секции настроек
Секции могут располагаться внутри панелей, а также по отдельности. Внутри секций располагаются настройки темы:
WP_Customize_Manager::add_section( WP_Customize_Section|string $id, array $args = array() )Пример:
add_action('customize_register', function($customizer){
$customizer->add_section(
'example_section_one',
array(
'title' => 'Новые настройки',
'description' => 'Описание секции',
'priority' => 11,
)
);
});Параметры:
- id - обязательный параметр, идентификатор панели
- args - аргументы
- priority - приоритет панели, определяющий порядок отображения панелей и разделов. По умолчанию 160
- panel - идентификатор панели, к которой относится секция
- capability - возможности, необходимые для секции. По умолчанию edit_theme_options
- theme_supports - тематические функции, необходимые для поддержки секции
- title - отображаемое название секции
- description - отображаемое описание секции
- type - тип секции
- active_callback - активный обратный вызов
- description_hidden - скрыть описание за значком справки, вместо встроенного над первым элементом управления. Значение по умолчанию false.
Добавление настроек
Существует несколько типов настроек:
Настройка в виде чекбокса (галочки):
$customizer->add_control(
'example_text',
array(
'type' => 'checkbox',
'label' => 'Выбрать',
'section' => 'example_section',
)
);Настройка в виде радио кнопок (флажков):
$customizer->add_setting(
'radio',
array('default' => 'val_1')
);
$customizer->add_control(
'radio',
array(
'type' => 'radio',
'label' => 'Переключатели',
'section' => 'example_section',
'choices' => array(
'val_1' => 'val_1',
'val_2' => 'val_2',
'val_3' => 'val_3',
),
)
);Настройка в виде селекта (выпдающего списка):
$customizer->add_setting(
'select',
array('default' => 'item_1')
);
$customizer->add_control(
'select',
array(
'type' => 'select',
'label' => 'Список',
'section' => 'example_section',
'choices' => array(
'item_1' => 'Первый',
'item_2' => 'Второй',
'item_3' => 'Третий',
),
)
);Настройка в виде списка страниц Wordpress:
$customizer->add_setting(
'pages',
array('sanitize_callback' => 'example_sanitize')
);
$customizer->add_control(
'pages',
array(
'type' => 'dropdown-pages',
'label' => 'Выберите страницу',
'section' => 'example_section',
)
);Настройка в виде палитры (выбора цвета):
$customizer->add_setting(
'colors',
array(
'default' => '#FFFFFF',
'sanitize_callback' => 'sanitize_hex_color',
)
);
$customizer->add_control(
new WP_Customize_Color_Control(
$customizer,
'colors',
array(
'label' => 'Палитра цвета',
'section' => 'example_section',
'settings' => 'colors',
)
)
);Настройка в виде загрузки файлов:
$customizer->add_setting('files');
$customizer->add_control(
new WP_Customize_Upload_Control(
$customizer,
'files',
array(
'label' => 'Загрузить файл',
'section' => 'example_section',
'settings' => 'files'
)
)
);Настройка в виде загрузки изображений:
$wp_customize->add_setting('images');
$wp_customize->add_control(
new WP_Customize_Image_Control(
$wp_customize,
'images',
array(
'label' => 'Загрузка изображения',
'section' => 'example_section',
'settings' => 'images'
)
)
);Вывод настроек в теме
Для вывода значения настройки в шаблоне, необходимо использовать следующую функцию с идентификатором настройки:
<?php echo get_theme_mod($name, $default); ?>Функция get_theme_mod() включает в себя следующие параметры:
- $name - имя, идентификатор настройки
- $default - значение по умолчанию, которое будет отображаться если нет значения в настройки
Например:
<?php echo get_theme_mod('example_field', ''); ?>С помощью этих настроек возможно значительно облегчить и улучшить процесс изменения различных элементов темы Wordpress.
Может есть какие-то плагины, чтобы вручную это не добавлять кодом?
Вордпресс вообще не сильно сложный, даже без знания программирования можно разобраться, хотя и не во всех вопросах