【问题标题】:Reinitialise Woocommerce Scripts again after loading Products with Wordpress Infinite Scroll使用 Wordpress Infinite Scroll 加载产品后再次重新初始化 Woocommerce 脚本
【发布时间】:2025-12-14 20:20:08
【问题描述】:

我正在运行一个带有 infinite scroll plugin 的 Wordpress Woocommerce-Shop,以便在我的商店页面上自动加载下一组产品。

有一些带有下拉菜单的可变产品,在选择属性后显示价格(默认woocommerce功能)。

很遗憾,此功能仅适用于初始页面加载并在向下滚动后无限滚动加载的产品上中断。

所以我想我必须在每次无限页面滚动后重新初始化负责该功能的 js 脚本。无限滚动插件有以下 部分(function(newElements)..) 在加载新元素后初始化函数。 任何想法(如果可能的话,更新安全)如何重新初始化变量 Products 的 woocommerce 脚本? 我猜它至少是 add-to-cart-variation.min.js

    if (obj_nes.infinitescroll != 'disable') {
    nextSelector = obj_nes.nextselector;
    nextSelector = '#navigation #navigation-next a';
    
    $masonry.infinitescroll({
        navSelector : '#navigation',
        nextSelector : nextSelector,
        itemSelector : '.product',
        prefill: true,
        bufferPx : 900,
        loading: {
            msgText: '', 
            img: '',
            finished: function() {}
        }
    }, function(newElements) {
        
        // Initialize again
                                
    });
}

【问题讨论】:

  • 一般来说,您可能会发现这是一本好书:*.com/questions/10920355/…
  • @ficuscr - 我不明白你的意思吗?我关注了您的链接 - 但我不明白如何将其与我的问题联系起来?

标签: php jquery ajax wordpress woocommerce


【解决方案1】:

所以我解决了这个问题。希望这对其他人有所帮助。

使可变产品下拉菜单工作的最安全且几乎“更新保存”的方法是在再次加载一对新产品后加载add-to-cart-variation.min.js。请关注// Initialize again部分:

if (obj_nes.infinitescroll != 'disable') {
nextSelector = obj_nes.nextselector;
nextSelector = '#navigation #navigation-next a';

$masonry.infinitescroll({
    navSelector : '#navigation',
    nextSelector : nextSelector,
    itemSelector : '.product',
    prefill: true,
    bufferPx : 900,
    loading: {
        msgText: '', 
        img: '',
        finished: function() {}
    }
    }, function(newElements) {

        // Initialize again

        // if wp is installed in a subfolder
        // $.getScript("../wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js");

        $.getScript("/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js");

    });
}

更新

缓存脚本文件的更好方法! getScript() 调用 jQuery.get() 女巫是 Ajax function 的简写

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

因此,通过调用 getScript() 可以进行 ajax 调用,而 jQuery 不会保留任何类型的文件缓存。要缓存文件也使用以下

if (obj_nes.infinitescroll != 'disable') {
nextSelector = obj_nes.nextselector;
nextSelector = '#navigation #navigation-next a';

$masonry.infinitescroll({
    navSelector : '#navigation',
    nextSelector : nextSelector,
    itemSelector : '.product',
    prefill: true,
    bufferPx : 900,
    loading: {
        msgText: '', 
        img: '',
        finished: function() {}
    }
    }, function(newElements) {

      // Initialize again

      $.ajax({
          type: "GET",

          // if wp is installed in a subfolder   
          // url: "../sichere-anwendung/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js",

          url: "/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js"),
          cache: true
            });

    });
}

【讨论】:

  • 谢谢。这是可行的,我通过 ajax 加载了一个产品简码(基于类别和标签下拉菜单)。对于 URL,我使用了以下内容:wp_localize_script( 'custom-js', 'myTheme', array( 'contenturl' => content_url(), 'axurl' => admin_url( 'admin-ajax.php' ) ) );url: myTheme.contenturl + "/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js"
  • 绝对传奇。到目前为止,我的 AJAX 商店让我泄气了,但是加载 ajax 的变体不起作用!我知道我必须重新加载一些 JS,但我不知道是哪一个 :D 谢谢!