Я использую WordPress с газетной темой (как дочерняя тема). Я заметил, что мой пользовательский CSS из дочерней темы загружается дважды.
Я проверил function.php, и мне интересно, является ли вторая функция корнем моей проблемы?
if ( !function_exists( 'chld_thm_cfg_parent_css' ) ):
function chld_thm_cfg_parent_css() {
wp_enqueue_style( 'chld_thm_cfg_parent', trailingslashit( get_template_directory_uri() ) . 'style.css', array( ) );
}
endif;
add_action( 'wp_enqueue_scripts', 'chld_thm_cfg_parent_css', 1001 );
if ( !function_exists( 'child_theme_configurator_css' ) ):
function child_theme_configurator_css() {
wp_enqueue_style( 'chld_thm_cfg_child', trailingslashit( get_stylesheet_directory_uri() ) . 'style.css', array( 'chld_thm_cfg_parent','td-theme','td-theme-demo-style' ) );
}
endif;
add_action( 'wp_enqueue_scripts', 'child_theme_configurator_css' );
Спасибо за вашу помощь.
Изменить 1: я нашел эти две строки кода через инспектор кода сайта. Как вы думаете, это может быть?
<link rel='stylesheet' id='td-theme-css' href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />
<link rel='stylesheet' id='chld_thm_cfg_child-css' href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />
Мы видим, что таблица стилей включается дважды с разными идентификаторами …:
<link rel='stylesheet' id='td-theme-css'
href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />
<link rel='stylesheet' id='chld_thm_cfg_child-css'
href='.../wp-content/themes/Newspaper-lesser-old-child/style.css?ver=8.1.1504096948' type='text/css' media='all' />
…так что мы можем использовать идентификаторы td-theme
а также chld_thm_cfg_child
чтобы найти проблему.
Вам нужно взглянуть на функции, вызываемые в wp_enqueue_scripts
действие в вашем functions.php в родительской и дочерней темах.
Вы уже нашли, где ваши таблицы стилей ставятся в очередь в вашей дочерней теме, и по идентификатору видно, что она загружается с помощью следующего кода из вашего дочернего functions.php:
if ( !function_exists( 'child_theme_configurator_css' ) ):
function child_theme_configurator_css() {
wp_enqueue_style( 'chld_thm_cfg_child', trailingslashit( get_stylesheet_directory_uri() ) . 'style.css', array( 'chld_thm_cfg_parent','td-theme','td-theme-demo-style' ) );
}
endif;
add_action( 'wp_enqueue_scripts', 'child_theme_configurator_css' );
Так что теперь нам нужно отследить другой экземпляр. Вот где сложность
потому что вы не включили код постановки в очередь от родителя.
Потенциальные причины & Решения:
get_stylesheet_directory_uri
Насколько я могу сказать, идентификатор td-theme
происходит от темы газеты. Это говорит о том, что он использует get_stylesheet_directory_uri
вместо get_template_directory_uri()
загрузить таблицу стилей.
get_stylesheet_directory_uri
загружает таблицу стилей из папки активной темы, поэтому, если дочерний элемент этой темы активен, он будет загружать дочернюю таблицу стилей вместо своей собственной.
Если он уже загружен родительской темой, вам не нужно загружать его снова в дочерней теме, поэтому удалите код, который снова загружает дочернюю таблицу стилей в дочерний файл functions.php
Есть и другие потенциальные причины этой проблемы, но они здесь не применяются. Однако я включу их на тот случай, если ваш вопрос не имеет всех функций постановки в очередь, а также для всех, у кого могут быть подобные проблемы.
Дочерняя тема может неправильно пытаться загрузить родительскую таблицу стилей, а также дочернюю. В этом случае я бы ожидал увидеть что-то подобное в функции вашего ребенка. Php:
wp_enqueue_style( 'td-theme', get_stylesheet_directory_uri() . '/style.css',
array(), $version);
wp_enqueue_style( 'chld_thm_cfg_child', get_stylesheet_directory_uri() . '/style.css',
array(), $version);
В вашем случае это не является проблемой, потому что вы используете другой идентификатор («chld_thm_cfg_parent») для загрузки родительской таблицы стилей.
Если это было случай, чтобы исправить это, вы должны использовать get_template_directory_uri
для родительской таблицы стилей и get_stylesheet_directory_uri
для ребенка, например:
/* load parent stylesheet from parent theme folder with get_template_directory_uri */
wp_enqueue_style( "td-theme", get_template_directory_uri() . '/style.css' ,
array(), $version);
/* load child stylesheet from child theme folder withget_stylesheet_directory_uri
Note: we include the parent's id in the dependencies array so it gets loaded first */
wp_enqueue_style( "chld_thm_cfg_child", get_stylesheet_directory_uri() . '/style.css',
array("parent-id"), $version);
(Обратите внимание, что это может привести к тому, что родительская тема будет включена дважды, в зависимости от того, как она включена в родительскую тему — но опять же, не видя реального кода, трудно точно знать).
Других решений пока нет …