wp_enqueue_script()和wp_register_script()之间有什么区别?

19

我不确定何时/在哪里使用 wp_enqueue_script() wp_register_script()


1
http://wordpress.stackexchange.com/questions/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque - Naga
3个回答

13

简单来说;

wp_enqueue_script 的意思是将文件添加到队列中进行注册
wp_register_script 的意思是立即注册文件

wp_register_script 注册一个脚本,以便稍后使用 wp_enqueue_script() 函数进行排队。

wp_enqueue_script() 如果提供了 $src(不覆盖),则会注册该脚本并将其加入队列。 来源: Developer.wordpress

这里是WordpressDevelopment上的简要答案

wp_register_script( $handle, $src, $deps, $ver, $in_footer );

使用 wp_register_script() 预注册的脚本,如果它们被列为另一个已经被 enqueued 的脚本的依赖项,则不需要使用 wp_enqueue_script() 手动 enqueue。WordPress 会在包含列出已注册脚本作为依赖项的 enqueued 脚本之前自动包含已注册的脚本。

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

wp_enqueue_script() 函数会根据脚本的依赖关系,在正确的时间将脚本文件链接到生成的页面上,如果脚本尚未被包含并且所有依赖项都已注册。您可以使用 wp_register_script() 函数注册一个先前注册过的句柄来链接脚本,或者提供该函数所需的所有参数来链接脚本。


4
WordPress的命名方式真是糟糕透顶!太令人困惑了。 - tfont
1
你在回答开头的“简单说法”恰恰相反。事实上,情况正好相反:
  • wp_enqueue_script 的意思是,注册文件并立即将文件添加到队列中
  • wp_register_script 的意思是,仅注册文件,但稍后等待加入队列。
- user1030151
2
在阅读前两段的矛盾之后,更加困惑了。 - m4n0

2

我来到这里是因为我有同样的问题。
阅读了相关内容后,我认为仍然有必要更新答案,因此这是我的尝试:

wp_register_script - 这告诉 Wordpress 有一个脚本 但不足以加载该脚本 wp_enqueue_script 确保所有依赖脚本(以及它们的依赖项递归)都将被加载,并且主要脚本将在它们之后加载。

wp_register_stylewp_enqueue_style 使用相同的逻辑。

因此,要加载脚本,它必须成为调用 wp_enqueue_script 的“主”脚本,或者作为在调用 wp_enqueue_script 中列出的依赖项(并且先前注册或排队为主脚本)。

脚本和样式的排队(没有相应的 *_*_styles 动作钩子)应在内部进行。

add_action('wp_enqueue_scripts' , myFunc); // - for scripts that need to run on the front end
add_action('admin_enqueue_scripts', myFunc); // - for scripts that need to run on the admin panel
add_action('login_enqueue_scripts', myFunc); //- for scripts that need to run on the login page

如果在所有情况下都需要脚本,则可以在“init”操作中注册/排队它。
在myFunc中,您应该调用wp_enquq_script和wp_enquq_style。
myFunc还可以接收一个参数($hook),如果您想将脚本的加载限制为管理仪表板内的特定页面,则可以使用该参数。
例如:
function my_enqueue_admin_scripts( $hook ) {
    if ( 'pagename.php' == $hook ) {
        wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'myscript.js', array(), '1.0' );
    }
    
}
add_action( 'admin_enqueue_scripts', 'my_enqueue_admin_scripts' );

全局变量$wp_scripts$wp_styles拥有一个registered属性,列出了已注册的脚本和样式表。
在限制加载脚本和样式表的上下文时,print_r(get_current_screen())也可以提供帮助。

最具信息量和特定性的答案!谢谢。 - SeparateReality
当您使用wp_register_script时,如果另一个脚本依赖于它,该脚本可以自动加载。例如,在functions.php中注册jQuery库是非常常见的做法,而不是将其加入队列,因为这样可以在需要时按需加载该库。 - aldemarcalazans

-1
据我理解,wp_register_scriptswp_register_scripts是一种函数,用于立即注册您的脚本(js)和样式(css),但不直接在您的WordPress页面中加载它们。
有一种switch()语句与这些函数配合使用,使它们仅在需要它们的页面上加载您的“脚本”。
不必注册所有脚本,但这可以为您的代码添加一些逻辑,并确保您成为更好的开发人员;具备清晰的代码编写感觉。
一个很好的例子是为您的管理区域排队自定义样式表或自定义js脚本(例如与WordPress媒体上传器一起使用)。在这两种情况下,您应分别使用wp_register_stylewp_register_script。此外,在这两种情况下,您都要在admin_enqueue_scripts调用您的函数,因此一个好的经验法则是当您钩入admin_enqueue_scripts时,请务必注册您的脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接