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

问题描述 投票:0回答:6

我在 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 文件中,然后再 wp_head();

<script type="text/javascript">
  var $j = jQuery.noConflict();

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

很明显,我的 jquery.js 和 jquery.advanced-slider.js 在上面的 JavaScript 代码之后加载,因此我的滑块不起作用。如果我把它放在 wp_head() 调用之后

<head>
滑块就可以工作。

但是如果我把它放在 wp_head() 之后,那不是黑客吗?我希望我的代码是干净的。正如二十一主题明确所说的那样

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

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

javascript jquery wordpress wordpress-theming
6个回答
3
投票

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

</body>
之前。

无论如何,在浏览器中解析完整的 DOM 之前,您的滑块初始化 JS 代码不会被执行,因此这没有任何缺点。

事实上,像 Steve Souders 这样的 Web 性能专家建议应该在 HTML 页面末尾添加脚本块,因为脚本块会阻止渲染,这样页面加载速度会更快。


3
投票

根据 WordPress 函数参考:

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

如果你想保持“代码干净”,你可能会重新考虑你的 js 是如何组织的。 我使用 WordPress 的方法是(通常)为所有初始化和小脚本保留一个 script.js,并为插件保留单独的文件。但一切都取决于您拥有的文件大小和数量 - 您希望避免过多的 http 请求和难以管理的文件。

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


3
投票

等待使用

window.onload
函数加载 jQuery,一旦
jQuery
文件和其他 js/内容加载,
window.onload
函数就会被触发。

<script type="text/javascript">
window.onload = function(){

var $j = jQuery.noConflict();
    $j(".advanced-slider").advancedSlider({
        width:614,
        height:297,
        delay:1000,
        pauseRollOver:true
    });
}
</script>

1
投票

一个更简单(但可能不太好)的技巧是简单地添加 1 毫秒的超时

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

1
投票

您要添加到页面底部的代码应该外部化到它自己的文件中,并使用

wp_enqueue_script();
函数添加,如下所示。

请注意在每次调用 wp_enqueue_script 的末尾使用“true”指令。这告诉 WordPress,您希望它们包含在

wp_footer();
挂钩(而不是
wp_head();
挂钩)中,该挂钩应直接出现在结束
</body>
标签之前 - 根据其他人提到的性能最佳实践。

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()
条件语句中,因此所有 3 个文件 - 加上 jQuery - 将仅包含在主页中。


0
投票

get_template_directory_uri()
确实为您提供了主题目录,但如果您使用的是子主题,这不是您想要的。

get_stylesheet_directory_uri()
将为您提供“当前主题”的目录,因此无论哪种情况,使用都是最安全的。

© www.soinside.com 2019 - 2024. All rights reserved.