将插件中的类中的脚本入队

时间:2013-05-11 作者:elclanrs

我有这样一个插件:

<?php
/*
Plugin Name: MyPlugin
*/

class MyPlugin
{
  public function __construct()
  {
    add_action(\'wp_enqueue_scripts\', array($this, \'enqueueAssets\'));
  }

  public function enqueueAssets()
  {
    wp_register_script(\'myplugin\', plugins_url(\'myplugin.js\', __FILE__), array(\'jquery\'));
    wp_enqueue_script(\'myplugin\');
  }

  // More methods
}
在侧栏中,我创建了一个新实例:

$plugin = new MyPlugin;
但当我在Chrome中打开devtools并转到“源”时,资产并没有被加载。如果我在类外部使用函数,则它可以工作:

add_action(\'wp_enqueue_scripts\', \'enqueueAssets\');
function enqueueAssets()
{
  wp_register_script(\'myplugin\', plugins_url(\'myplugin.js\', __FILE__), array(\'jquery\'));
  wp_enqueue_script(\'myplugin\');
}

class MyPlugin
{
我错过什么了吗?

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

当您的小部件(或侧栏,如果是硬编码的)加载时,您已经错过了wp_enqueue_scripts 钩子,它在标头中运行,这意味着您错过了在<head> 实际上,您正在尝试这样做——没有第五个参数可以在页脚中加载脚本。

您可以在中排队wp_footer 或任何其他紧随其后的钩子wp_enqueue_scripts 只要添加第五个参数,脚本就会加载到页脚中。

class MyPlugin
{
  public function __construct()
  {
    add_action(\'wp_footer\', array($this, \'enqueueAssets\'));
  }

  public function enqueueAssets()
  {
    wp_register_script(\'myplugin\', plugins_url(\'myplugin.js\', __FILE__), array(\'jquery\'), \'\', true);
    wp_enqueue_script(\'myplugin\');
  }

  // More methods
} 
而法典确实规定您应该在wp_enqueue_scripts, 它还说:

从3.3版开始,该函数可以调用mid page(在wp\\u footer()模板标记之前)或使用wp\\u head操作挂钩。这将在页脚中放置脚本,就像$in\\u footer参数设置为true一样。

http://codex.wordpress.org/Function_Reference/wp_enqueue_script

结束

相关推荐