在jquery.js加载到WordPress站点后加载javascript代码

我在WordPress网站的主页上有一个自定义的基于jquery的滑块。 我在我的主题的functions.php文件中使用下面的代码加载jQuery(jquery.js)和滑块js(jquery.advanced-slider.js)。

function my_load_scripts() { if (!is_admin()) { wp_enqueue_script("jquery"); if (is_home()) { wp_enqueue_script('theme-advanced-slider', get_template_directory_uri().'/js/jquery.advanced-slider.js', array('jquery')); wp_enqueue_script('theme-innerfade', get_template_directory_uri().'/js/innerfade.js', array('jquery')); } } } 

add_action(’wp_enqueue_scripts’,’my_load_scripts’);

现在我把下面的代码放在我的header.php文件BEFORE wp_head();

  var $j = jQuery.noConflict(); $j(document).ready(function () { //Slider init JS $j(".advanced-slider").advancedSlider({ width: 614, height: 297, delay: 1000, pauseRollOver: true }); });  

这里显而易见的是我的jquery.js和jquery.advanced-slider.js在上面的JavaScript代码之后加载,因此我的滑块不起作用。 如果我把它放在wp_head()之后调用 ,滑块就可以了。

但是,如果我把它放在wp_head()之后就不会是黑客攻击吗? 我希望我的代码干净。 正如二十四岁的主题清楚地说的那样

 /* Always have wp_head() just before the closing  * tag of your theme, or you will break many plugins, which * generally use this hook to add elements to  such * as styles, scripts, and meta tags. */ 

我在这里很困惑。 我可能会遗漏一些非常简单的线索。 但帮助我的人。 在jquery.js和slider.js加载之后将JavaScript放在wp_head()之前并将其加载的最佳方法是什么?

将您的脚本块添加到HTML页面的底部,就在

你的slide init JS代码不会被执行,直到在浏览器中解析完整的DOM,所以这没有任何缺点。

事实上,像Steve Souders这样的网络性能专家建议,应该在HTML页面的末尾添加脚本块,因为脚本块会阻止渲染,并且页面似乎以这种方式加载更快。

根据wordpressfunction参考:

将JavaScript添加到WordPress生成页面的安全和推荐方法是使用wp_enqueue_script()。 此函数包括脚本(如果尚未包含),并安全地处理依赖项。

如果您想保持“代码清洁”,您可能会重新考虑您的js的组织方式。 我使用wordpress的方法是(通常)为所有初始化保留一个scripts.js,为插件保留小脚本和单独的文件。 但是一切都取决于你有多大和多少文件 – 你想避免太多的http请求和难以管理的文件。

同样,wp_enqueue_script允许您将脚本放在页脚中。 http://codex.wordpress.org/Function_Reference/wp_enqueue_script

等待用window.onload函数加载jQuery,一旦jQuery文件和其他js / content加载, window.onload函数就会被激活。

  

您要添加到页面底部的代码应该外部化到它自己的文件中,并添加wp_enqueue_script(); function如下图所示。

注意在每次调用wp_enqueue_script结束时使用’true’指令。 这告诉WordPress你希望它们包含在wp_footer(); hook(而不是wp_head(); hook)应该直接出现在结束标记之前 – 根据其他人提到的性能最佳实践。

 function my_load_scripts() { if (is_home()) { wp_enqueue_script('theme-advanced-slider', get_template_directory_uri().'/js/jquery.advanced-slider.js', array('jquery'), true); wp_enqueue_script('theme-innerfade', get_template_directory_uri().'/js/innerfade.js', array('jquery'), true); wp_enqueue_script('your-custom-script', get_template_directory_uri().'/js/yourcustomscript.js', array('jquery'), true); } } } add_action('wp_enqueue_scripts', 'my_load_scripts'); 

我已经删除了你所包含的jQuery入队行,因为你不需要注册jQuery脚本,因为它已经被WP内核注册了,因为你已经将它定义为依赖项之一,它将被包含在内。

由于您已将它全部包装在is_home()条件语句中,因此所有这三个文件(加上jQuery)都将包含在主页中。

更容易 – 但可能不那么好 – 黑客只需添加1毫秒的超时

 setTimeout(function () { jQuery('#text-6').insertBefore('#header'); }, 1);