【问题标题】:jQuery breaking my wordpress sitejQuery 打破了我的 wordpress 网站
【发布时间】:2025-12-17 01:40:01
【问题描述】:

美好的一天

我在 header.php 文件中包含 jquery,如下所示:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>

但是这样做时,它会破坏我的主页滑块,它会破坏我的谷歌地图终极插件和其他一些东西。当我排除它时,我的页面上没有运行自定义 jquery...只有滑块工作,必须使用 jquery...

因此,如果 jquery 已经在我的网站上运行(因为我在主题中使用了 jquery 缓动等),为什么我在标签中添加到文件中的自定义 jquery 代码不起作用?但是,当我像上面所说的那样包含 jquery 时,我的自定义代码会运行,但它会破坏其他插件......

这是为什么呢?

谢谢

【问题讨论】:

    标签: jquery wordpress


    【解决方案1】:

    jQuery 1.9.1 弃用了很多功能。尝试使用jQuery Migrate 1.1.1 或降级到 1.8.3

    【讨论】:

    • 谢谢 gmartellino - 不知道 jQuery 1.9.1 存在兼容性问题 - 从现在起将使用 1.8.3 以确保安全。
    【解决方案2】:

    您的自定义 jQuery 代码没有与 WordPress 包含的现有 jQuery 一起运行的原因可能是因为 WordPress 的 jQuery 设置为 noconflict。 noconflict 方法放弃了 jQuery 中使用的“$”快捷方式。这意味着依赖它的代码,例如

    $("p").hide();
    

    ...不起作用,因为 $ 不会代表 jQuery 对象。尝试像这样包装您的自定义代码,这是获取 $ 对象的标准方法(示例取自 this page):

    jQuery(function ($) {
    /* You can safely use $ in this code block to reference jQuery */
        $("p").hide();
    });
    

    这样做是因为几个不同的 JavaScript 库使用 $ 作为“快捷方式”变量(例如 MooTools),并且第三方 WordPress 插件和主题通常包含其他 JavaScript 库。放弃 $ 并让您准确指定您真正要使用的对象是一种确保在 WordPress 将多个库加载到单个页面时冲突最少的方法。

    所以,我想说确保 WordPress 的标准版本的 jQuery 可用于您的主题(可能在您的 functions.php 中使用 wp_enqueue_script),如 tip one here 所示:

    function my_init() {
        if (!is_admin()) {
            wp_enqueue_script('jquery');
        }
    }
    add_action('init', 'my_init');
    

    ...然后通过添加上面的“map-jQuery-back-to-$”包装方法在您自己的函数中使用它对于全面兼容是最好的。当前大多数需要 jQuery 的 WordPress 主题和插件都将被编写为在 WordPress 中使用 jQuery 的发布版本,您可能也应该这样做。

    【讨论】: