我有这样一个插件:
<?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
{
我错过什么了吗?
最合适的回答,由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