目前,我正在研究一个主题,并加入了一些样式和脚本。将脚本排入队列时,我首先使用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_stylewp_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