Woocommerce - 未定义 Cookie

Woocommerce - Cookies is not defined

嗯,

我收到 JS 错误 "Cookies is not defined",但 "js.cookie.min.js" 在 "woocommerce.min.js" 之前加载。

我检查了 apache 日志以查看是否有任何错误,但是有 none。 我没有缓存插件。

我不知道如何跟踪此错误以找到根本原因,一切似乎都正常。

waitForImages 是另一个已加载的 JS,但出现错误。

我错过了什么吗?查找错误的提示?

编辑*********

进一步调查

这是 js-cookie 的代码,出于某种原因我不明白 js-cookie 将 "registeredInModuleLoader" 设置为 true,但是变量 "Cookies" 尚未定义。

;(function (factory) {
    var registeredInModuleLoader = false;
    if (typeof define === 'function' && define.amd) {
        define(factory);
        registeredInModuleLoader = true;
    }
    if (typeof exports === 'object') {
        module.exports = factory();
        registeredInModuleLoader = true;
    }
    if (!registeredInModuleLoader) {
        var OldCookies = window.Cookies;
        var api = window.Cookies = factory();
        api.noConflict = function () {
            window.Cookies = OldCookies;
            return api;
        };
    }
} /* ... */

编辑 2

我想我找到了问题所在,但还不知道为什么。

星期一,我从 MailChimp 上传了一个需要此代码的单选表格。 我认为问题出在 "embed.js",因为在 "define.amd" 条件下(上图)指向 "embed.js"。删除此脚本后,错误消失了。

有什么想法吗?

<script type="text/javascript" src="//s3.amazonaws.com/downloads.mailchimp.com/js/signup-forms/popup/embed.js" data-dojo-config="usePlainJson: true, isDebug: false"></script>

<script type="text/javascript">require(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us14.list-manage.com","uuid":"xxxxxxxxxxxxxxxxxxxxxxxxx","lid":"xxxxxxxxxx"}) })</script>

已解决

我将 Mailchimp 脚本的位置更改为之前的最后一项,没有更多问题。

谢谢。

重命名文件并更新functions.php

wp-content/plugins/woocommerce/assets/js/jquery-cookie/jquery.cookie.js
wp-content/plugins/woocommerce/assets/js/jquery-cookie/jquery.cookie.min.js

至:

wp-content/plugins/woocommerce/assets/js/jquery-cookie/jquery_cookie.js
wp-content/plugins/woocommerce/assets/js/jquery-cookie/jquery_cookie.min.js

并将以下内容添加到主题的 functions.php 文件中:

add_action( 'wp_enqueue_scripts', 'custom_frontend_scripts' );function custom_frontend_scripts() {global $post, $woocommerce;

$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? : '.min';
wp_deregister_script( 'jquery-cookie' );
wp_register_script( 'jquery-cookie', $woocommerce->plugin_url() . '/assets/js/jquery-cookie/jquery_cookie' . $suffix . '.js', array( 'jquery' ), '1.3.1', true );
}

当您在页面上加载了 2 个版本的 jquery 时,通常会发生这种情况,这通常是由于尝试将 google 用于 jquery 或主题。这需要删除。您无法通过全新安装重现此文件。

检查并确认 jquery 已正确加载后,请参阅 https://docs.woocommerce.com/document/jquery-cookie-fails-to-load/

我将 Mailchimp 脚本的位置更改为 </body> 之前的最后一项,不再有问题。

也许 mailchiump 脚本试图加载尚未加载的内容..

问题也影响了我们,就在我们的 WordPress WooCommerce 网站上实施 MailChimp 弹出窗口之后。我们在将礼券添加到购物车、能够启用或禁用运送到与结账页面上的账单不同的地址、拖放文件上传等方面遇到了问题 - 基本上任何其他使用 jQuery/javascript 进一步向下页面 ...

虽然我已将此脚本加载到页脚中,但我没有采取措施将其放在页脚的最底部/最后加载。

因此,对于那些可能需要具体帮助的人,如何确切地加载 只是 页脚底部的 MailChimp 列表注册弹出窗口,我可以提出以下建议:

add_action('wp_footer', 'so45956946_mailchimp_popup', PHP_INT_MAX);

function so45956946_mailchimp_popup(){ ?>
<script type="text/javascript" src="//downloads.mailchimp.com/js/signup-forms/popup/embed.js" data-dojo-config="usePlainJson: true, isDebug: false"></script><script type="text/javascript">require(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.usXX.list-manage.com","uuid":"YOUR_UUID","lid":"YOUR_LID"}) })</script>
<?php }

通过将 PHP_INT_MAX(此版本 PHP 中支持的最大整数)作为 add_action() 调用中的优先级,它肯定会最后加载。