Учебники

Шаблон настройщика тем – Условные параметры, дочерние темы и плагины

Шаблон настройщика тем - Условные параметры, дочерние темы и плагины

До сих пор мы видели, насколько просто обрабатывать параметры темы с помощью Boilerplate настройщика тем и его хуков. Как вы, наверное, помните, наиболее важным шагом было подключение к хуку фильтра thsp_cbp_options_array и передача ему массива параметров, которые вы хотите использовать в своей теме.

Я уверен, что вы уже знакомы с обработчиками действий и фильтров WordPress – Plugin API – и с тем, как они работают, но на всякий случай вот краткий обзор (на примере обработчиков фильтров). Вы можете определить свою пользовательскую функцию и подключить ее к существующему фильтру с помощью функции add_filter:

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Сосредоточимся на аргументе приоритета. Его значение по умолчанию – 10, поэтому, если вы не используете другое число, это будет приоритет выполнения вашей функции. Чем меньше число, тем раньше будет выполнена ваша функция. Итак, если вы сделаете что-то вроде этого:

// Adding first message function my_theme_add_first_message( $content) { $content .= '<p>First Message</p>'; return $content; } add_filter( 'the_content', 'my_theme_add_first_message', 1 ); // Adding second message function my_theme_add_second_message( $content) { $content .= '<p>Second Message</p>'; return $content; } add_filter( 'the_content', 'my_theme_add_second_message', 2 );

Когда вы вызываете функцию the_content в single.php или любом другом шаблоне, будет показано содержимое публикации, за которым следует Первое сообщение, а затем Второе сообщение. Не потому, что это их порядок в этом фрагменте кода, а из-за параметра приоритета выполнения. Думайте о крюках, как если бы они были снежками, катящимися с холма, собирающими на своем пути всякие вещи.

Как это применимо к шаблону настройщика тем?

Вы можете подключиться к thsp_cbp_options_array из файла function.php вашей темы, используя пользовательскую функцию (например, my_theme_options_array) со значением приоритета, установленным на 1. Это означает, что любая другая функция, которая подключается к обработчику фильтра thsp_cbp_options_array, будет делать это ПОСЛЕ функции my_theme_options_array вы уже определено. Взгляните на этот пример:

function my_theme_options_array() { // Using helper function to get default required capability $thsp_cbp_capability = thsp_cbp_capability(); $options = array( // Section ID 'my_theme_new_section' => array( 'existing_section' => false, 'args' => array( 'title' => __( 'New Section', 'my_theme_textdomain' ), 'priority' => 10 ), 'fields' => array( /* * Radio field */ 'my_radio_button' => array( 'setting_args' => array( 'default' => 'option-2', 'type' => 'option', 'capability' => $thsp_cbp_capability, 'transport' => 'refresh', ), 'control_args' => array( 'label' => __( 'My Radio Button', 'my_theme_textdomain' ), 'type' => 'radio', // Radio control 'choices' => array( 'option-1' => array( 'label' => __( 'Option 1', 'my_theme_textdomain') ), 'option-2' => array( 'label' => __( 'Option 2', 'my_theme_textdomain') ), 'option-3' => array( 'label' => __( 'Option 3', 'my_theme_textdomain') ) ), 'priority' => 3) )) ) ); return $options; } add_filter( 'thsp_cbp_options_array', 'my_theme_options_array', 1 );

Это добавит новый раздел в настройщик тем с одним полем в нем, называемым My Radio Button. Затем вы или кто-то другой разрабатываете дочернюю тему для вашей темы и решаете сохранить новый раздел, но вместо My Radio Button может быть лучше иметь My Checkbox. Легко:

function my_child_theme_options_array( $options) { // Using helper function to get default required capability $thsp_cbp_capability = thsp_cbp_capability(); /* * This time, we're only editing fields in my_theme_new_section in the $options array */ $options['my_theme_new_section']['fields'] = array( 'my_checkbox_field' => array( 'setting_args' => array( 'default' => true, 'type' => 'option', 'capability' => $thsp_cbp_capability, 'transport' => 'refresh', ), 'control_args' => array( 'label' => __( 'My Checkbox', 'my_theme_textdomain' ), 'type' => 'checkbox', // Checkbox field control 'priority' => 2) ) ); return $options; } add_filter( 'thsp_cbp_options_array', 'my_child_theme_options_array', 2 );

Заметили, что я не передал параметр $ options в my_theme_options_array, а сделал это в функции my_child_theme_options_array? Это потому, что когда я впервые подключился к хуку thsp_cbp_options_array, я хотел переопределить параметры образца шаблона Customizer Boilerplate. Затем, когда я снова подключился к нему из своей дочерней темы, я не хотел полностью удалять параметры родительской темы, а просто немного их редактировал. Вот почему я возился только с $ options [‘my_theme_new_section’] [‘fields’], а не со всем массивом $ options.

Конечно, вы также можете более одного раза подключиться к хуку фильтра thsp_cbp_options_array из родительской темы. Допустим, вы решили не добавлять в свою тему функции территории плагинов и позволить плагинам делать то, что они должны. Теперь вы хотите отображать некоторые параметры настройщика тем, только если активен определенный плагин. Опять же легко:

function my_plugin_dependency_options_array( $options) { // Using helper function to get default required capability $thsp_cbp_capability = thsp_cbp_capability(); /* * Only adding my_plugin_dependency_section if 'test-plugin.php' is active */ if (is_plugin_active( 'test-plugin/test-plugin.php') ) { $options['my_plugin_dependency_section'] = array( 'existing_section' => false, 'args' => array( 'title' => __( 'Plugin Dependency', 'my_theme_textdomain' ), 'priority' => 10 ), 'fields' => array( /* * Text field */ // Field ID 'new_text_field' => array( 'setting_args' => array( 'default' => __( '', 'my_theme_textdomain' ), 'type' => 'option', 'capability' => $thsp_cbp_capability, 'transport' => 'refresh', ), 'control_args' => array( 'label' => __( 'Only shows if', 'my_theme_textdomain' ), 'type' => 'text', // Text field control 'priority' => 5) ),) ); } return $options; } add_filter( 'thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );

Хотите разработать плагин основной функциональности, который будет использоваться с вашей темой (как вам следует)? Вы также можете подключиться к thsp_cbp_options_array из одного из файлов вашего плагина, точно так же, как вы бы сделали это из файла function.php темы.

Не сходи с ума по варианту

Каждый раз, когда вы добавляете параметры в разрабатываемую тему, вам необходимо помнить об одном из основных принципов WordPress – решение, а не параметры. Легко увлечься и начать добавлять пользовательские параметры для каждой незначительной детали вашей темы, но это никому не идет на пользу. Я надеюсь, что эти несколько приемов, особенно добавление зависимых от плагинов опций, помогут снизить количество опций вашей темы как можно меньше.

В конце концов, если ваша тема имеет параметры для таких вещей, как каждый радиус границы каждого отдельного элемента, это не тема, это редактор WYSIWYG и, вероятно, не лучший.

Вы покупаете белую рубашку не потому, что приложив некоторые дополнительные усилия, вы можете превратить ее в скатерть, вы покупаете ее, потому что вам нравится ее «белоснежность». Темы WordPress тоже должны быть такими, они должны представлять контент определенным образом, а не пытаться делать все, что только можно вообразить. Если вы разработчик тем, ваша задача – убедиться, что ожидания пользователей соответствуют им.

Источник записи: https://www.wpexplorer.com

Похожие сообщения
Учебники

Как отображать похожие сообщения по категориям в WordPress

Учебники

Как получить отличный поиск для вашего блога WordPress

Учебники

Как начать успешный блог о еде с WordPress

Учебники

Как вручную загрузить шрифты Google в WordPress