目前,我正在研究一个主题,并加入了一些样式和脚本。将脚本排入队列时,我首先使用
wp_register_script()
,然后使用wp_enqueue_script()
排入队列-因为我知道这是将脚本排入队列的正确方法。但是在排队样式时,我仅使用wp_enqueue_style()
及其所有参数。但是现在我从s_ha_dum得到了一个答案,说使用wp_register_style()
可以使主题子主题变得友好-我想知道,如果没有wp_register_style()
,我只会使用wp_enqueue_style()
,并且主题可以与排队的样式一起正常工作。我将它们排入队列:我为什么要重复它们?或者,除wp_enqueue_style()
之外,wp_register_style()
的确切用途是什么?#1 楼
首先,我们要说的是,对于这些函数,对样式有效的对脚本而言是完全有效的,但是答案中有相反解释的例外。wp_enqueue_*
和各个wp_register_*
函数之间的主要区别是,是第一个将脚本/样式添加到队列中,第二个准备要添加的脚本/样式。您可能已经知道了,但是有第二个区别;
wp_register_*
可以用在每个钩子中,甚至可以用在像init
这样的早期钩子中,但是wp_enqueue_*
应该用在wp_enqueue_scripts
钩子(或后端是admin_enqueue_scripts
)上。1.使用两种功能的典型情况是想要在主题init上注册脚本/样式,然后有条件地将它们排队在某些页面上,例如add_action('init', 'my_register_styles');
function my_register_styles() {
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
wp_register_style( 'style3', get_template_directory_uri() . '/style3.css' );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );
function my_enqueue_styles() {
if ( is_front_page() ) {
wp_enqueue_style( 'style3' );
} elseif ( is_page_template( 'special.php' ) ) {
wp_enqueue_style( 'style1' );
wp_enqueue_style( 'style2' );
} else {
wp_enqueue_style( 'style1' );
}
}
这样,有条件的排队更易读,更省力。
另外,如果要在后端也加入一种或多种注册样式/脚本,则可以在钩住
admin_enqueue_scripts
的函数中使用注册句柄,而不必再次传递所有参数。 br /> 确保这对于脚本更有用,因为
wp_localize_script
可以在脚本注册后在以前的场景中调用一次,然后在有条件排队时将脚本入队,即使该脚本被使用了多次也是如此: 当您注册脚本/样式时,在y之后立即ou排队,这只是一个不必要的任务,实际上可以完全避免:
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_enqueue_style( 'style1' );
这样的样式(或脚本)排队没有优势,只是将
wp_enqueue_style
与wp_enqueue_style
的所有参数一起使用就可以了。关于儿童主题友谊,上一句话也是正确的。要覆盖子主题中的样式,当父样式立即使用
wp_register_style
紧随其后使用wp_enqueue_style
时,您必须注销样式并再次使用另一个URL注册。如果父级仅使用wp_enqueue_style
,则在子级主题中可以使用wp_dequeue_style
并加入新样式,因此在子级主题中,两种情况下都需要两行代码。子主题友好型是在
if ( ! function_exists(
中包装入队和/或注册样式和脚本的功能...这样子主题可以在一个地方覆盖父主题样式和脚本:if ( ! function_exists( 'my_register_styles' ) ) {
function my_register_styles() {
wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
wp_register_style( 'style3', get_template_directory_uri() . '/style3.css' );
}
}
if ( ! function_exists( 'my_enqueue_styles ') ) {
function my_enqueue_styles() {
if ( is_front_page() ) {
wp_enqueue_style( 'style3' );
} elseif ( is_page_template( 'special.php' ) ) {
wp_enqueue_style( 'style1' );
wp_enqueue_style( 'style2' );
} else {
wp_enqueue_style( 'style1' );
}
}
}
现在在子主题中,可以编写另一个
my_register_styles
和/或my_enqueue_styles
函数并更改所有样式(当然,如果需要的话),而不必一个个地注销/退出样式。1这与脚本和样式有另一个区别:
wp_enqueue_script
可以在页面的正文中使用(通常使用简码),脚本将放在页脚中。
评论
优秀的GM内在的评价很好,整体如此。感谢您的努力。 :)
– Mayeenul伊斯兰教
13年11月25日在11:38
感谢@MayeenulIslam,我开始回答,然后再把问题标记为重复。很高兴对您有用,所以对其他人也是如此:)
– gmazzap♦
13年11月25日在11:48
@gmazzap非常有用,只需搜索wp_register_style与wp_enqueue_style即可,您的回复帮助我彻底了解了此问题。
–lowtechsun
16年11月15日在18:13
好答案,谢谢。
– EmSixTeen
20/12/2在18:41