Как использовать методы очереди родительской темы

Вопрос или проблема

Согласно кодексу, при создании дочерней темы вам нужно вручную подключать скрипты родительской темы.

Моя родительская тема имеет логику для условного отображения различных css файлов, кэшированного css и динамического css, сгенерированного из панели Параметры темы. Тема называется Camille.

function camille_scripts() {    
    wp_register_style('bootstrap', get_template_directory_uri() . '/css/bootstrap.css');
    wp_enqueue_style( 'bootstrap' );
    //...больше скриптов и стилей
}
function camille_enqueue_dynamic_styles( ) { 
    //отображает wp_options в физический файл и подключает физический файл
    //...
    wp_register_style( $cache_file_name, $css_cache_file_url, $cache_saved_date);
    wp_enqueue_style( $cache_file_name );
    //...
}

Я пытался вызвать эти методы в своем файле functions.php темы…

function my_theme_scripts() {
    camille_scripts();
    camille_enqueue_dynamic_styles();
}
add_action('wp_enqueue_scripts', 'my_theme_scripts');

Но ничего не подключалось. Я проверил разметку, и ни одного css файла родительской темы не было. Затем я попытался скопировать полный исходный код этих методов в мой functions.php, и все стили отобразились как обычно. Однако я не хочу этого делать, потому что копирование и вставка кода нарушает принцип DRY, и если тема будет обновлена, моя дочерняя тема не получит изменения.

Почему стили моей родительской темы не отображаются в разметке? Есть ли лучшие практики для подключения родительского css, когда родительская тема использует сложную логику для создания и подключения css?

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

include( get_template_directory() . '/functions.php');

get_template_directory() находит директорию родительской темы даже при использовании дочерней темы.

Обратите внимание, что это выполнит все, что может быть выполнено в functions.php родительской темы. Так что, что бы она ни делала, это произойдет, когда вы ее подключите.

Если в functions.php родительской темы есть что-то, что вы не хотите подключать, вы всегда можете отключить это ( после вызова get_template_directory() ) в functions.php дочерней темы с помощью соответствующей функции отключения: wp_dequeue_script() или wp_dequeue_style().

Ответ или решение

Когда вы создаете дочернюю тему в WordPress, важно правильно подключить стили и скрипты родительской темы. В вашем случае, вы используете тему Camille, которая имеет сложную логику для условного подключения CSS-документов. Позвольте мне подробно объяснить, как использовать методы подключения стилей родительской темы, а также предложить правильные практики для этого процесса.

Проблема

Вы указали, что пытались вызвать методы camille_scripts и camille_enqueue_dynamic_styles в вашем functions.php дочерней темы, но CSS родительской темы не отображался в результирующем HTML. Вы также пытались скопировать эти методы в вашу дочернюю тему, что нарушает принцип DRY (Don’t Repeat Yourself).

Почему ваши стили не отображаются

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

Лучшие практики для подключения CSS родительской темы

Вместо ручного копирования кода или неэффективного использования функций родительской темы, рекомендуется следовать следующему процессу:

  1. Вызов функций через хук: Если вы хотите использовать методы из родительской темы, вызовите их в дочерней теме при помощи подходящего хука. Например:

    function my_theme_scripts() {
       // Проверка, если функция существует
       if (function_exists('camille_scripts')) {
           camille_scripts(); // Подключаем скрипты родителя
       }
       if (function_exists('camille_enqueue_dynamic_styles')) {
           camille_enqueue_dynamic_styles(); // Подключаем динамические стили родителя
       }
    }
    
    add_action('wp_enqueue_scripts', 'my_theme_scripts');

    Таким образом, вы будете уверены, что функции родительской темы вызываются только если они существуют.

  2. Загрузка файла родительской темы: В некоторых случаях необходимо загрузить все функции файла functions.php родительской темы, однако это может вызвать нежелательное поведение, если файл выполняет определенные действия, которые вам не нужны. Вы можете использовать следующую конструкцию с осторожностью:

    include( get_template_directory() . '/functions.php' );

    Но помните, что это приведет к выполнению всего кода из файла, включая возможные регистрации стилей и скриптов, которые вы, возможно, не хотите включать.

  3. Отмена подключения ненужных стилей/скриптов: Если в родительской теме есть стили или скрипты, которые вам не нужны, вы можете использовать функции wp_dequeue_style() или wp_dequeue_script().

    function my_dequeue_unwanted_styles() {
       // Пример отключения стиля
       wp_dequeue_style('название_стиля_родителя');
    }
    add_action('wp_enqueue_scripts', 'my_dequeue_unwanted_styles', 20);

Заключение

Используя правильный подход к подключению стилей и скриптов из родительской темы, вы можете избежать дублирования кода и обеспечить корректное функционирование вашей дочерней темы. Всегда проверяйте доступность функций перед их вызовом, а также учитывайте потенциальные конфликты с другими скриптами или стилями. Таким образом, вы сможете придерживаться принципов DRY и сохранять возможность обновления родительской темы без проблем.

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

Капча загружается...