在我的主题功能中。php中,我调用add\\u操作以获得对jquery加载位置的控制(在页脚中以及主题的其他脚本中)。
我遇到的问题是,当我使用add\\u action(“wp\\u enqueue\\u scripts”)时,只有在没有加载插件的情况下才会触发。但是,add\\u action(“init”)方法在所有情况下都有效。
我想不起为什么,但我相信在这种情况下,add\\u action(\'wp\\u enqueue\\u scripts\')是首选。如果这是真的,我怎样才能让它在所有情况下都起作用?
在函数中。php
//if(!is_admin()){add_action(\'init\', \'my_theme_init\');} //THIS WORKS ALL THE TIME
//add_action(\'wp_enqueue_scripts\', \'my_theme_init\'); //THIS ONLY WORKS WHEN NO PLUGINS PRESENT
if(!is_admin())
{
require_once(TEMPLATEPATH . \'/functions_public.php\');
}
在functions\\u public中。php
function my_theme_init()
{
/* PREVENT DUPLICATE COPIES OF JQUERY FROM PLUGINS
**************************************************/
wp_deregister_script(\'jquery\');
/* LOAD THE LOCAL WORDPRESS COPY OF JQUERY AND THEME CUSTOM SCRIPTS IN THE FOOTER
***********************************************/
wp_register_script(\'jquery\', get_bloginfo(\'template_directory\').\'/scripts.mythemescripts.js\',false,false,true);
wp_enqueue_script(\'jquery\');
}
第二种方法是使用add\\u action(\'wp\\u enqueue\\u scripts\'),显然在存在插件将脚本依赖性写入主题的情况下无法执行。
SO网友:Chip Bennett
这里有多个相互关联的问题。
用于将脚本排队的正确操作挂钩是wp_enqueue_scripts
要在页脚中打印脚本,请通过wp_enqueue_script()
, 设置$footer
参数到true
你的add_action( $hook, $callback )
呼叫不应包含在任何内容中;让他们直接从functions.php
你应该把你的is_admin()
在回调中进行条件检查
无论出于何种原因,都不应该从主题中注销核心捆绑脚本。即使您的目的是脚本连接,这也是插件领域如果必须注销jquery,则wp_enqueue_scripts
太晚了。将注销/注册代码拆分为挂接到的回调init
.调用一些脚本“jquery”也可能不是一个好的做法。更好的选择是退出jQuery队列,然后加载自定义脚本请确保回调的优先级较低,以便覆盖插件的使用get_template_directory()
而不是TEMPLATEPATH
将所有这些放在一起:
<?php
function wpse55924_enqueue_scripts() {
if ( ! is_admin() ) {
// Dequeue jQuery
wp_dequeue_script( \'jquery\' );
// Register/enqueue a custom script, that includes jQuery
wp_register_script( \'mythemescripts\', get_template_directory_uri() . \'/scripts.mythemescripts.js\', false, false,true );
wp_enqueue_script( \'mythemescripts\' );
}
}
add_action( \'wp_enqueue_scripts\', \'wpse55924_enqueue_scripts\', 99 );
但是,这确实不是最好的方法。您最好的选择是删除注销核心jQuery的插件add\\u action()回调,或者使用不会像替换核心捆绑jQuery那样鲁莽的插件。
SO网友:Den Pat
这个答案并不完全针对您的问题,但代码中还有一个问题。
You never need to use and should not use:
wp_enqueue_script(\'jquery\');
如果您想使用WordPress提供的jquery,那么最好的方法是,当您将自己的javascript文件排队时,将jquery作为依赖项传递,这样,它将由WordPress自己处理,您无需手动排队。
示例:
wp_enqueue_script( \'myjslib-handle\', get_stylesheet_directory_uri() . \'/js/myfile.js\', array(\'jquery\'), \'1.0.0\', true );
array(\'jquery\') 在上面的代码中,是作为依赖项加载jquery所需的参数。