我有一个notmytheme, 最初的css加载顺序如下:
<link rel=\'stylesheet\' id=\'something\' href=\'http://localhost/mywp/wp-content/themes/notmytheme/something.css\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'notmytheme-style-css\' href=\'http://localhost/mywp/wp-content/themes/notmytheme/style.css?ver=1.0.9\' type=\'text/css\' media=\'all\' />
当我创建一个名为
notmytheme-child, 然后把孩子们排成一列,变成这样:
<link rel=\'stylesheet\' id=\'notmytheme-style-css\' href=\'http://localhost/mywp/wp-content/themes/notmytheme/style.css?ver=1.0.9\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'child-style-css\' href=\'http://localhost/mywp/wp-content/themes/notmytheme-child/style.css?ver=18.08.07\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'something\' href=\'http://localhost/mywp/wp-content/themes/notmytheme/something.css\' type=\'text/css\' media=\'all\' />
我希望父样式和子样式在其他样式之后加载,例如父主题的加载方式,因此我将其按优先级向下移动(
add_action( \'wp_enqueue_scripts\', \'my_theme_enqueue_styles\', 999 );
), 现在变成这样:
<link rel=\'stylesheet\' id=\'something\' href=\'http://localhost/mywp/wp-content/themes/notmytheme/something.css\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'notmytheme-style-css\' href=\'http://localhost/mywp/wp-content/themes/notmytheme-child/style.css?ver=1.0.9\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'child-style-css\' href=\'http://localhost/mywp/wp-content/themes/notmytheme-child/style.css?ver=18.08.07\' type=\'text/css\' media=\'all\' />
我不知道为什么,但现在
get_template_directory_uri()
现在指向
notmytheme-child 而不是
notmytheme.
我当前的排队脚本如下所示:
add_action( \'wp_enqueue_scripts\', \'my_theme_enqueue_styles\', 999 );
function my_theme_enqueue_styles() {
$parent_style = \'notmytheme-style\';
wp_enqueue_style( $parent_style,
get_template_directory_uri() . \'/style.css\',
array(),
\'1.0.9\' );
wp_enqueue_style( \'child-style\',
get_stylesheet_directory_uri() . \'/style.css\',
array( $parent_style ),
\'18.08.07\',
\'all\' );
}
调整优先级会更改css的加载位置以及哪个目录
get_template_directory_uri()
指向。
EDIT/SOLUTION
我的代码现在是:
add_action( \'wp_enqueue_scripts\', \'my_enqueue_child\', 999 );
function my_enqueue_child() {
wp_dequeue_style( \'notmytheme-style\' );
wp_enqueue_style( \'parent-style\',
get_template_directory_uri() . \'/style.css\',
array(),
\'1.0.9\' );
wp_enqueue_style( \'child-style\',
get_stylesheet_directory_uri() . \'/style.css\',
array( \'parent-style\' ),
\'18.08.07\',
\'all\' );
}
最合适的回答,由SO网友:Jacob Peattie 整理而成
主题通常会将样式表排成这样:
wp_enqueue_style( \'notmytheme-style\', get_stylesheet_uri() );
当你为一个主题激活一个子主题时,
get_stylesheet_uri()
成为子主题的样式表URL。这意味着父主题将对子主题的样式表进行排队(使用
notmytheme-style
作为ID),但不是它自己的样式表。
这就是它的来源:
<link rel=\'stylesheet\' id=\'notmytheme-style-css\' href=\'http://localhost/mywp/wp-content/themes/notmytheme-child/style.css?ver=1.0.9\' type=\'text/css\' media=\'all\' />
它是父主题的ID和子主题的URL。
代码的问题是使用了相同的句柄(notmytheme-style
) 要将父主题样式表作为父主题排队,请使用加载子主题的样式表。执行此操作时,它将被忽略,并将定义的第一个版本排入队列。这就是为什么更改优先级会影响结果。无论哪个notmytheme-style
先定义后加载。
因此,在这种情况下,让CSS排队的正确方法是不要让子主题样式表排队,而让父主题的样式表以不同的句柄和更高的优先级(更少的数字)排队:
add_action( \'wp_enqueue_scripts\', \'my_theme_enqueue_styles\', 9 );
function my_theme_enqueue_styles() {
$parent_style = \'notmytheme-parent-style\'; // New handle.
wp_enqueue_style( $parent_style,
get_template_directory_uri() . \'/style.css\',
array(),
\'1.0.9\' );
}
这意味着子主题样式表将使用父主题的版本号。可以通过取消父主题原始样式的队列并将其重新排队来避免这种情况:
add_action( \'wp_enqueue_scripts\', \'my_theme_enqueue_styles\', 999 );
function my_theme_enqueue_styles() {
$parent_style = \'notmytheme-style\';
wp_dequeue_style( $parent_style );
wp_enqueue_style( $parent_style,
get_template_directory_uri() . \'/style.css\',
array(),
\'1.0.9\' );
wp_enqueue_style( \'child-style\',
get_stylesheet_directory_uri() . \'/style.css\',
array( $parent_style ),
\'18.08.07\',
\'all\' );
}