我将一堆脚本排入页面的页脚:
function core_scripts() {
wp_deregister_script('jquery');
wp_register_script('jquery', '//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js', false, null, true);
wp_register_script('bootstrap', '//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js', array('jquery'), '3.1.1', true);
wp_register_script('flexslider', get_template_directory_uri().'/js/jquery.flexslider-min.js', array('jquery'), '2.2.2', true);
wp_register_script('jqzoom', get_template_directory_uri().'/js/jquery.jqzoom-core-pack.js', array('jquery'), '2.3', true);
wp_register_script('fancybox', get_template_directory_uri().'/js/jquery.fancybox.pack.js', array('jquery'), '2.1.5', true);
... a bunch of others ...
}
add_action('init', 'core_scripts'); // Add Custom Scripts
function write_site_scripts()
{
wp_enqueue_script('jquery');
wp_enqueue_script('bootstrap');
wp_enqueue_script('flexslider');
wp_enqueue_script('jqzoom');
wp_enqueue_script('fancybox');
...etc...
}
add_action('wp_enqueue_scripts', 'write_site_scripts'); // write all enqueued scripts
function write_custom_scripts()
{
$html = "<!-- Custom script -->
<script>
var custom = '1';
</script>";
echo $html;
}
add_action('wp_footer', 'write_custom_scripts'); // this script writes in the footer before the dependent js scripts
我的问题是自定义脚本总是在jQuery脚本之前写入页面,我猜是因为自定义脚本是通过echo write命令写入页面的。
如何在将jQuery脚本写入页面后将自定义javascript代码添加到页脚中?即。我需要延迟add_action('wp_footer','write_custom_scripts');要在稍后执行,或者我如何使用enqueue添加自定义JavaScript?
注意我已经删除了之前发布的CDN代码,因为这会引导所有人进行另一次讨论 - 一个有效的讨论,但这不是我现在所处理的问题。
答案 0 :(得分:2)
编辑II
因为问题本质上已经多次改变,并且为了使你免于阅读(例如 - 理解)以下所有长篇解释,只需使用。
add_action('wp_footer', 'write_custom_scripts',9999);
这会将优先级设置为非常高,最后会probably
回显您的代码(除非您或其他插件/主题开发人员使用更高优先级或更高版本的过滤器..)
对于那些想要做正确方法的人:
function my_javascripts() {
wp_enqueue_script('the-script-handle',
'path/to/file.js',
array('jquery','other_script_that_we_depend_on'),
'scriptversion eg. 1.0',
true);
}
add_action('wp_enqueue_scripts', 'my_javascripts');
当你将上面的脚本(正确的方式)排队时,你可以看到它wp_enqueue_script()有4个参数。path
,dependencies
,version
和{ {1}}。
这是加载脚本的唯一正确方法,如果需要,只需将jquery排队到同一个函数 - wp将确保它首先加载。
依赖关系意味着wp不会加载你的脚本,因为jQuery已经加载了,并且会尝试加载jQuery FIRST ......
LAST参数实际上将定义天气以在FOOTER(TRUE)或标题中加载脚本(FALSE)
话虽如此,你总是可以在HEADER中加载jQuery而不是页脚(但不是那么推荐)
之后,对于脚本的最后一位,您可以在页脚中回显它,还可以控制添加它的方式和时间。
我不明白,是你方法的总体目标。 (这部分是关于“做错了”)
首先 - 我认为从CDN加载并不是一个好的IDEA。我是NOT ALONE。在没有任何有意义的专业人士的WP中被认为是一个不好的做法(时间问题是一个笑话,因为你可能会直接加载很多其他脚本并且脚本被缓存)。
在做这件事的时候 - 你想到一个后备是好的,但回退应该是wp自己的版本 - 而不是你自己包含的版本。
如果你仍然坚持做错了,你总是可以做一些事情(或者只是改变执行顺序):
in-footer
这基本上允许你在wp_footer动作之前或之后回复你的东西而且技术上它会起作用 - 。它仍然是错误的。
编辑我问题编辑后。
您在该代码中遇到了几个问题。
remove_action('wp_head', 'wp_print_scripts');
remove_action('wp_head', 'wp_print_footer_scripts', 9);
remove_action('wp_head', 'wp_enqueue_scripts', 1);
// your stuff
add_action('wp_footer', 'wp_print_scripts', 5);
add_action('wp_footer', 'wp_enqueue_scripts', 5);
add_action('wp_footer', 'wp_print_footer_scripts', 5);
注册jQuery(CDN)。如果你想这样做(你不应该这样做,请不要)你需要在再次注册之前取消注册jquery。
jquery
再次。我不能强调这是多么错误。
2。你是整个剧本的一大堆 - 但你在哪里排队?
3。再次。喜欢在评论中(我认为你还是不明白)
如果你有一个脚本要添加到页脚 - 你需要注册并使用依赖项将其排队..(正确的方法)
根据编辑问题:
创建一个名为my_script.js的文件
<?php wp_deregister_script( 'jquery' ); ?>
排队!
var custom = '1';
在这种情况下,您的脚本将加载您列出的依赖项... 你要做的就是直接回应。
关于如何正确传递变量的评论 - read here
你也可以这样做(对象):
wp_enqueue_script('the-script-handle',
'path/to/my_script.js',
array('jquery','other_script_that_we_depend_on'),
'0.0.1',
true);