如何从noConflict包装器中的插件加载管理员中的库脚本?

时间:2014-06-20 作者:Mayeenul Islam

对于我的插件,我需要为我的CPT中的一些自定义字段创建一个元框(xyz), 为了组织字段,我需要实现选项卡。我学习了使用wp_enqueue_script(), 因此,从我的插件中,我输入了以下内容(使用Chip Bennett\'s suggestion 记住,我排除了wp_register_script() 仅使用wp_enqueue_script() 并避免取消注册内置脚本):

function my_scripts() {    

    wp_enqueue_script( \'jquery-lib-scripts\', plugins_url( \'/js/jquery-1.10.2.min.js\', __FILE__ ) );
    wp_enqueue_script( \'jquery-ui-for-tabs\', plugins_url( \'/js/jquery-ui.js\', __FILE__ ) );
    //wp_enqueue_script( \'plugin-scripts\', plugins_url( \'/js/plugin-scripts.js\', __FILE__ ) );

    wp_enqueue_style( \'plugin-style\', plugins_url( \'plugin-style.css\', __FILE__ ) );

}

add_action(\'admin_enqueue_scripts\', \'my_scripts\');
因此,文件在管理面板中全局加载。

一切都很好,尽管我完全了解内置的WP管理脚本jquery, jquery-ui-core, 和jquery-ui-tabs. 但不知何故,我的脚本并不冲突,并且正在使用CPT中的选项卡post-new.php (新增)页面;但是正在打破标签post.php (CPT的编辑屏幕xyz).

我正在使用WAMP和WP 3.9.1开发我的开发环境localhost,同时我尝试停用所有其他插件并尝试切换到默认的T14主题。

刚发现,用我的代码,所有页面上的标签都能正常工作,但如果我激活任何其他插件,即使是Akismet,它也会CONFLICTING. 我了解了noConflict wrappers, 但是假设它们只用于自定义脚本,但是how can I enqueue library scripts for my plugin in a noConflict wrapper?

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

我并不是在回答这个问题,而是在这里,我是如何在没有上这门课的情况下得到我的解决方案的:

首先,我从WPSE answer. 它很有魅力。但当我尝试将上传到字段的媒体嵌入到wp_enqueue_media(), 即使在jquery上传程序运行的那个页面上,它也不起作用。

我尝试停用所有插件,然后用define(\'SCRIPT_DEBUG\', true). 在@G.M.的建议下,我尝试了他提供的以下代码:

function header_sent() { headers_sent() && die(\'Sent!\'); }
add_action( \'init\', \'header_sent\' );
检查是否已经发送了任何标头,但我收到了绿色信号。然后,通过多次尝试和@Rup的评论,我将所有最新的jQuery内容(jQ 1.11.1和jQUI 1.10.4)排入队列。但问题仍然存在。但通过这些广泛的努力,我至少找到了一个希望,我的插件不会与Akismet冲突。

我修改了wp_enqueue_media() 具有this SO answer. 但是当我激活WordPress SEO时,虽然我的插件jQuery正在工作,但是WP SEO。所以这与WordPress SEO有明显的冲突。

然后我把meta box的优先级从\'high\'\'low\'$mdash;什么都没发生。他们的一些东西触动了我的心,我开始写剧本in_footer 使用:

wp_enqueue_script( \'jquery-lib-scripts\', plugins_url( \'/js/jquery-1.11.1.min.js\', __FILE__ ), \'\', \'\', true );
wp_enqueue_script( \'jquery-ui-for-tabs\', plugins_url( \'/js/jquery-ui-1.10.4.min.js\', __FILE__ ), \'\', \'\', true );
这就解决了我的问题
(但我不知道这些脚本将来是否会与任何其他插件冲突,那么我该怎么办:()

结束