【发布时间】:2018-04-12 09:19:40
【问题描述】:
我在 Woocommerce 购物车页面上的自动更新购物车脚本存在一个小问题。它只是一个小的 sn-p,它在添加(或减去)项目时更新购物车。 它在以前的主题上运行良好,但是我切换了主题并遇到了故障。 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"> </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) . ' ';
} 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 增量,即第一个增量它什么都不做,然后在下一个增量它更新,并在后续尝试以完全相同的行为重复此操作,即错过一个,更新下一个等。减法也是如此。
有点疑惑为什么它现在不能正常工作。
欢迎任何提示
谢谢
【问题讨论】:
-
你应该在你的问题中添加所有相关的代码,你应该更好地解释你的代码应该做什么......记住:“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。"
-
嗨,这是所有的 jQuery 代码,期望的行为是在每次递增/递减时更新,并且之前工作正常。现在它只在每第二个增量/减量时更新,每次都完全忽略第一个增量。我现在添加了 cart.php 代码,看看是否有帮助。谢谢
-
通常 Woocommerce 默认单独执行此操作,无需任何额外的 jQuery 代码...默认情况下有:
<input type="submit" class="button" name="update_cart" value="Update cart">并且 Woocommerce 会在您每次更改购物车页面中的数量时激活按钮...所以当您点击这个按钮一切都更新了,没有任何额外的需求。 -
嗨,不,不是这样,否则我不会添加代码,其他主题必须将其添加到更新购物车,我只是将其转移到新主题。默认情况下,WC 不会自动更新购物车,因此添加了。
-
IE WC 没有激活按钮,用户必须点击按钮,因此代码自动执行。
标签: jquery wordpress woocommerce