更新购物车Woocommerce(jQuery)

时间:2018-04-12 09:19:41

标签: jquery wordpress woocommerce

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

小部件在

之下
 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">

位于靠近底部的购物按钮

的正下方

完整的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'); ?>

以前工作正常,但是现在由于某种原因只更新每个SECOND增量,即第一个增量它什么都不做,然后在下一个增加它更新,这将重复进行后续尝试具有完全相同的行为,即错过一个,更新下一个等。减法也是如此。

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

欢迎任何提示

由于

1 个答案:

答案 0 :(得分:0)

您可以通过单击输入或直接在字段中插入来触发更改数量时的更新购物车按钮,因此只需将此代码粘贴到functions.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
   }
}