更新购物车Woocommerce(jQuery)



我在Woocommerce购物车页面上的自动更新购物车脚本有一个小问题。它只是一个小片段,在添加(或减去(项目时更新购物车。它在以前的主题上工作正常,但是我切换了主题并遇到了故障。代码段只是找到隐藏的"更新"字段,并对其进行更新。

代码段如下

 jQuery(window).on('load', function(){
             jQuery("[name='update_cart']").closest( 'form' ).find( 'input[name="update_cart"]' );
                  });
                 jQuery( document.body ).on( 'updated_cart_totals', function(){
              jQuery("[name='update_cart']").closest( 'form' ).find( 'input[name="update_cart"]' );
                });
                  jQuery('div.woocommerce').on('change', '.qty', function(){
               jQuery("[name='update_cart']").trigger("click"); 
        });

该字段的 html 是

  <input type="submit" class="hidden" name="update_cart">

就在底部附近的返回商店按钮下方

完整的购物车.php代码如下

do_action('woocommerce_before_cart');
get_template_part('woocommerce/theme-custom/order', 'step');
?>
<script>
           jQuery(window).on('load', function(){
             jQuery("[name='update_cart']").closest( 'form' ).find( 'input[name="update_cart"]' );
                  });
                 jQuery( document.body ).on( 'updated_cart_totals', function(){
              jQuery("[name='update_cart']").closest( 'form' ).find( 'input[name="update_cart"]' );
                });
                  jQuery('div.woocommerce').on('change', '.qty', function(){
               jQuery("[name='update_cart']").trigger("click"); 
        });
</script>
<form action="<?php echo esc_url(wc_get_cart_url()); ?>" method="post" class="woocommerce-cart-form">
    <div class="row">
        <div class="col-xs-12 col-sm-7">
                <?php do_action('woocommerce_before_cart_table'); ?>
                <table class="shop_table shop_table_responsive cart woocommerce-cart-form__contents" cellspacing="0">
                    <thead>
                    <tr>
                        <th class="product-name" colspan="2"><?php _e('Product', 'woocommerce'); ?></th>
                        <th class="product-price"><?php _e('Price', 'woocommerce'); ?></th>
                        <th class="product-quantity"><?php _e('Quantity', 'woocommerce'); ?></th>
                        <th class="product-subtotal"><?php _e('Total', 'woocommerce'); ?></th>
                        <th class="product-remove">&nbsp;</th>
                    </tr>
                    </thead>
                    <tbody>
                    <?php do_action('woocommerce_before_cart_contents'); ?>
                    <?php
                    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
                        $_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
                        $product_id = apply_filters('woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key);
                        if ($_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters('woocommerce_cart_item_visible', true, $cart_item, $cart_item_key)) {
                            $product_permalink = apply_filters('woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink($cart_item) : '', $cart_item, $cart_item_key);
                            ?>
                            <tr class="woocommerce-cart-form__cart-item <?php echo esc_attr(apply_filters('woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key)); ?>">
                                <td class="product-thumbnail">
                                    <?php
                                    $thumbnail = apply_filters('woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key);
                                    if (!$product_permalink) {
                                        echo ent2ncr($thumbnail);
                                    } else {
                                        printf('<a href="%s">%s</a>', esc_url($product_permalink), $thumbnail);
                                    }
                                    ?>
                                </td>
                                <td class="product-name" data-title="<?php esc_attr_e('Product', 'woocommerce'); ?>">
                                    <?php
                                    if (!$product_permalink) {
                                        echo apply_filters('woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key) . '&nbsp;';
                                    } else {
                                        echo apply_filters('woocommerce_cart_item_name', sprintf('<a href="%s">%s</a>', esc_url($product_permalink), $_product->get_name()), $cart_item, $cart_item_key);
                                    }
                                    // Meta data
                                    echo wc_get_formatted_cart_item_data( $cart_item );
                                    // Backorder notification
                                    if ($_product->backorders_require_notification() && $_product->is_on_backorder($cart_item['quantity'])) {
                                        echo '<p class="backorder_notification">' . esc_html__('Available on backorder', 'woocommerce') . '</p>';
                                    }
                                    ?>
                                    <div class="mobile-content">
                                       <?php
                                       echo apply_filters('woocommerce_cart_item_price', WC()->cart->get_product_price($_product), $cart_item, $cart_item_key);
                                       echo apply_filters('woocommerce_cart_item_remove_link', sprintf(
                                           '<a href="%s" class="remove" aria-label="%s" data-product_id="%s" data-product_sku="%s">%s</a>',
                                           esc_url(wc_get_cart_remove_url($cart_item_key)),
                                           __('Remove this item', 'woocommerce'),
                                           esc_attr($product_id),
                                           esc_attr($_product->get_sku()),
                                           __('Remove', 'doma')
                                       ), $cart_item_key);
                                       ?>
                                   </div>
                                </td>
                                <td class="product-price" data-title="<?php esc_attr_e('Price', 'woocommerce'); ?>">
                                    <?php
                                    echo apply_filters('woocommerce_cart_item_price', WC()->cart->get_product_price($_product), $cart_item, $cart_item_key);
                                    ?>
                                </td>
                                <td class="product-quantity"
                                    data-title="<?php esc_attr_e('Quantity', 'woocommerce'); ?>">
                                    <?php
                                    if ($_product->is_sold_individually()) {
                                        $product_quantity = sprintf('1 <input type="hidden" name="cart[%s][qty]" value="1" />', $cart_item_key);
                                    } else {
                                        $product_quantity = woocommerce_quantity_input(array(
                                            'input_name' => "cart[{$cart_item_key}][qty]",
                                            'input_value' => $cart_item['quantity'],
                                            'max_value' => $_product->get_max_purchase_quantity(),
                                            'min_value' => '0',
                                        ), $_product, false);
                                    }
                                    echo apply_filters('woocommerce_cart_item_quantity', $product_quantity, $cart_item_key, $cart_item);
                                    ?>
                                </td>
                                <td class="product-subtotal" data-title="<?php esc_attr_e('Total', 'woocommerce'); ?>">
                                    <?php
                                    echo apply_filters('woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal($_product, $cart_item['quantity']), $cart_item, $cart_item_key);
                                    ?>
                                </td>
                                <td class="product-remove">
                                    <?php
                                    echo apply_filters('woocommerce_cart_item_remove_link', sprintf(
                                        '<a href="%s" class="remove" aria-label="%s" data-product_id="%s" data-product_sku="%s"><i class="cs-font clever-icon-close"></i></a>',
                                        esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
                                        __('Remove this item', 'woocommerce'),
                                        esc_attr($product_id),
                                        esc_attr($_product->get_sku())
                                    ), $cart_item_key);
                                    ?>
                                </td>
                            </tr>
                            <?php
                        }
                    }
                    do_action('woocommerce_cart_contents');
                    ?>
                    <?php do_action('woocommerce_after_cart_contents'); ?>
                    </tbody>
                </table>
                <div class="bottom-table-cart">
                    <a class="btn back-shop" title="<?php echo esc_attr__('Continue Shopping', 'doma') ?>"
                       href="<?php echo get_permalink(wc_get_page_id('homepage')) ?>">
                        <?php echo esc_html__('Continue Shopping', 'doma') ?>
                    </a>
                  <input type="submit" class="hidden" name="update_cart">
                    <?php do_action('woocommerce_cart_actions'); ?>
                    <?php wp_nonce_field('woocommerce-cart'); ?>
                </div>
                <?php do_action('woocommerce_after_cart_table'); ?>
        </div>
        <div class="col-xs-12 col-sm-5 cart-collaterals">
            <?php do_action('woocommerce_cart_collaterals'); ?>
        </div>
    </div>
    <?php do_action('zoo_woocommerce_cart_collaterals'); ?>
</form>
<?php do_action('woocommerce_after_cart'); ?>

以前工作正常,但现在由于某种原因只更新一次秒增量,即第一个增量它什么都不做,然后在下一个增量上它更新,并在后续尝试中重复此操作,具有完全相同的行为,即错过一个,下一个更新等。减法也会发生同样的情况。

所以有点困惑为什么它现在不能正常工作。

欢迎任何提示

谢谢

您可以通过单击输入或直接插入字段来触发数量更改的更新购物车按钮,因此只需将此代码粘贴到函数中.php您就可以开始了。此代码经过测试并且运行良好。

add_action( 'wp_footer', 'refresh_update_qty' ); 
 
function refresh_update_qty() {
   if (is_cart()) {
      ?>
      <script type="text/javascript">
         jQuery('div.woocommerce').on('click', '.quantity input.button, input.qty', function(){
  
            jQuery("[name='update_cart']").trigger("click");
         });
      </script>
      <?php
   }
}

最新更新