我在理解何时需要使用wp_register_script()时遇到了麻烦。目前,我只使用类似的东西:

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle';
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}


我已经做了大量的阅读工作(法典,博客等),但是我什么时候不太了解应该先注册,或者在我刚入队时注册。例如,我注意到TwentyTwelve没有注册任何样式或脚本,而只是将它们排入队列。

#1 楼

wp_register_script() Codex页面的字面意思是:


一种在WordPress中注册javascript以供以后与wp_enqueue_script()一起使用的安全方法。


这意味着,如果您想要注册脚本但不直接将其加载到页面中,可以注册一次文件,然后在需要时加载它们。

例如:

您有一个switch语句,它会加载一些功能,但是三种情况中有两种需要特定的javascript文件,而另一种则不需要。您可以每次都排入脚本,这会花费更多资源,或者仅在需要时才排入脚本:

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    default:
    case 'value3': // doesn't needs the file
        ...
    break;
}


无需注册脚本然后将它们排入队列,但是如果您在functions.php中某个地方而不是在代码中的任何地方注册了所需的所有脚本,则可以在代码中提供一些逻辑。

法典还告诉以下内容:


使用wp_enqueue_scripts操作调用此函数,或使用admin_enqueue_scripts在管理端调用此函数。


这意味着如果要在以下位置排队脚本在前端和后端,您可以注册一次脚本,然后将其加载到wp_enqueue_script的前端,然后将其加载到admin_enqueue_script的后端。在一个主题,插件,小部件或其他任何内容中,相同的入队资源两次。

评论


谢谢。这清除了很多。那么,您是否认为TwentyTwelve不必费心注册,因为它肯定会加载它们?

–akTed
13年1月21日在15:09

那肯定是可能的。我不知道二十一十二主题是如何构建的,因为我从未使用过它,但是他们肯定会有理由加入而不是注册。

–迈克·麦登(Mike Madern)
2013年1月21日15:14

从这个意义上说,我不同意“您可以每次使脚本入队,花费更多的资源,或者仅在需要时入队”。在示例代码中,您可以删除注册调用,而对wp_enqueue_style()进行多个等效的完整调用(带有$ src arg)。这只是更多的打字工作,而不会导致更大的资源需求。正确?

– Jan-Philip Gehrcke
2015年6月16日在20:43



到目前为止,所有说明都没有提到的一点是,您可以使用wp_register_script()仅注册一个脚本,以便可以将其用作其他脚本的依赖项,并且仅与它们一起加载,而无需直接排队。

– JHoffmann
16年11月5日在16:57

即使这很好解释了,我还是建议您阅读此答案。

–lowtechsun
16年11月15日在18:15

#2 楼

恕我直言,以下是Codex在以下段落中说明了在wp_register_script之前使用wp_enqueue_scripts的主要优点:


不需要使用wp_register_script()预注册的脚本进行
如果将wp_enqueue_script()列为被排队的另一个脚本的依赖项,则使用wp_enqueue_script()手动将其排队。 WordPress
将自动包含已注册的脚本,然后再包含
排队的脚本,该脚本将已注册脚本的句柄列为
依赖项。


您不需要这样做(例如,因为您100%确保脚本不会涉及任何依赖项),您可能可以直接使用wp_enqueue_scripts,而无需初步的wp_register_script

#3 楼

我浏览了一些文章并得出以下结论。我认为这很有帮助。


使用wp_register_script()注册任何脚本只是在注册;不加载。使用wp_enqueue_script()将注册的脚本排入队列之前,不会加载已注册的脚本。
我们不需要同时注册和排入每个脚本。我们应该入队。注册不是强制性的,因为wp_enqueue_script()函数会自动注册脚本。

但是在以下任何一种情况下,我们确实需要注册:

假设我们需要一个脚本来加载到多个地方,例如一次在前端,一次在后端(管理页面)。现在,我们只需注册一次脚本即可。然后将其分别放入前端和后端。看,排队意味着装载。注册并不意味着加载。万一我们不注册,它将在我们排队时自动注册多次。另一方面,如果我们注册一次,则无论我们排队多少次,它都会注册一次。

b。如果我们想使用脚本作为其他脚本的依赖项,则无需使用wp_enqueue_script()将其加入队列。只需向wp_register_script()注册即可。当我们将其句柄名称用作wp_enqueue_script()排队的其他脚本的依赖项时,它将自动排队。



N.B.据我所知,可以为CSS样式表得出相同的结论。我的意思是说我们可以以相同的方式使用wp_register_style()wp_enqueue_style()

请注意,这里得出的结论反映了我自己的推论。如果我错了,请纠正我。您可能得出了一个不同的更好的结论。如果是这样,请告诉我们。谁知道?也许你是最好的。俗话说:“有许多宗旨,有许多拯救方法。” :)

https://ansrthemeaction.blogspot.com/2019/11/wpregisterscript-when-to-use.html

评论


您的解释是我读过的最好的。现在,我了解了为什么注册脚本很重要。谢谢!

– Eje
19-10-30在21:42



非常感谢@Jee

– Mohammad Shohel Rana
19年11月4日在3:29