Plugins_url()可以在除wp_reqister_script()之外的任何地方运行

时间:2013-03-05 作者:ItsGeorge

所以我应该提前提到,我正在开发一个插件,所以我的url是“mysite”。com/plugin“(以防万一这与我的问题有关。

因此,在我的主插件文件(myplugin.php)中,我添加了以下内容:

$plugin_url = plugins_url(\'/my-plugin-directory/\');
紧接着

wp_enqueue_style(\'wp_enqueue_scripts\', $plugin_url . \'css/boxes.css\');
很好,到目前为止还不错。插件url被正确连接,脚本被添加到页面中,并在源代码中显示为

<link rel=\'stylesheet\' id=\'wp_enqueue_scripts-css\'  href=\'http://mysite.com/plugin/wp-content/plugins/my-plugin-directory/css/mystyle.css?ver=3.5.1\' type=\'text/css\' media=\'all\' />
在这一点上,我甚至可以echo $plugin_url; 返回:

http://mysite.com/plugin/wp-content/plugins/my-plugin-directory/ 
在下面,我编写了以下函数:

add_action("wp_enqueue_scripts", "my_jquery_enqueue", 11);
    function my_jquery_enqueue()    {
        wp_enqueue_script(\'jquery\');
        wp_register_script(\'jquery_masonry\', $plugin_url.\'js/jquery.masonry.min.js\', array(\'jquery\'), \'2.0.110526\' );
        wp_enqueue_script(\'jquery_masonry\');
    }
应该正常工作吗?事实并非如此。相反,在源代码中,它是这样的:

<script type=\'text/javascript\' src=\'http://georgespake.com/pluginjs/jquery.masonry.min.js?ver=2.0.110526\'></script>
呜呜。。。

所以目前,我只是把它写出来:

/****Add jquery stuff to header****/
add_action("wp_enqueue_scripts", "my_jquery_enqueue", 11);
    function my_jquery_enqueue()    {
        wp_enqueue_script(\'jquery\');
        wp_register_script(\'jquery_masonry\', $plugin_url . \'/wp-content/plugins/my-plugin-directory/js/jquery.masonry.min.js\', array(\'jquery\'), \'2.0.110526\' );
        wp_enqueue_script(\'jquery_masonry\');
    }
这感觉很马虎,因为这是我唯一要做这件事的地方。在其他地方$plugin_url 似乎返回了正确的字符串。我错过了什么?

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

这是一个PHP问题,不特定于WordPress。我建议阅读上的PHP文档variable scope 了解为什么这不起作用。

没有$plugin_urlmy_jquery_enqueue 函数,您必须调用global $plugin_url; 首先在函数中访问它,尽管我不建议使用像$plugin_url.

就我个人而言,我会为插件创建一个类来封装所有内容,而不会污染全局范围。

结束

相关推荐

在Functions.php中创建“无文件”页面模板

(所谓“页面模板”,我指的是具有\"Template Name\" header 可在管理页面的“模板”下拉字段中选择。)在多个实例中,我构建了页面模板,可以通过挂接到\\u内容或pre\\u get\\u帖子或类似的内容来完成。这让我想知道是否有一种方法可以在functions.php 或者不创建主题文件本身的插件。我想这样做的原因:在我想到的场景中,我通常只是复制页面。php几乎一字不差。这意味着将来对页面的任何更改。php需要制作两次。随着儿童主题的更新,这更加令人痛苦</我喜欢“模板”字段U