我什么时候应该将wp_register_script()与wp_enqueue_script()结合使用而仅将wp_enqueue_script()与?


54

当您需要使用时,我很难理解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 );
}

我已经读了很多书(Codex,博客等),但是我不太明白什么时候应该首先注册,或者什么时候应该入队。作为示例,我注意到TwentyTwelve没有注册任何样式或脚本,而只是将它们排入队列。

Answers:


49

wp_register_script()法典第字面意思是:

在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

那肯定是可能的。由于我从未使用过“二十二十二”主题,所以我不知道它是如何构建的,但是他们肯定会enqueue代替register
Mike Madern 2013年

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

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

1
即使这解释得很好,我还是建议您也阅读此答案
lowtechsun '16

8

IMHO使用的主要优点wp_register_script之前wp_enqueue_scripts在从下面的段落中示出法典

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

如果您认为不需要此脚本(例如,因为您100%确信脚本不会涉及任何依赖项),则可以直接使用它wp_enqueue_scripts,而无需primary wp_register_script


2

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

  1. 使用wp_register_script()来注册任何脚本就是在注册。不加载。已注册的脚本只有在使用入队后才会加载wp_enqueue_script()
  2. 我们不需要同时注册和加入每个脚本。我们应该入队。由于该wp_enqueue_script()功能会自动注册脚本,因此注册不是必须的。
  3. 但是在以下任何一种情况下,我们都需要进行注册:

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

    b。如果我们想使用一个脚本作为其他脚本的依赖项,那么就不需要将其加入队列wp_enqueue_script()。只需向注册wp_register_script()。当我们使用它的句柄名称作为以排队的其他脚本的依赖项时,它将自动排队wp_enqueue_script()

    C。如果我们希望脚本在必要时加载而不是立即加载,则可以将其注册以备后用。用例已在上面显示。

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

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

https://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html


您的解释是我读过的最好的。现在,我了解了为什么注册脚本很重要。谢谢!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.