javascript文件woocommerce/assets/js/frontend/add-to-cart-variation.js,负责显示可变的产品价格,基本上是用$('form').find('.single_variation');来更新价格,所以如果.single_variation在表格外,就不起作用了。
所以这样的事情是行不通的:
function move_variation_price() {
remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_single_variation', 5 );
}
add_action( 'woocommerce_before_add_to_cart_form', 'move_variation_price' );
也就是说,如果您想在产品之上使用它,最好的选择是使用 woocommerce_before_variations_form 挂钩。
woocommerce_single_variation 钩子也会弹出添加到购物车按钮,因此您必须使用 CSS 将其隐藏:
form.variations_form.cart .single_variation_wrap:nth-child(1) .quantity {
display: none !important; /* important is necessary */
}
form.variations_form.cart .single_variation_wrap:nth-child(1) button {
display: none;
}
我知道这很痛苦。但这是“唯一”的方式。
方法二
好吧,我对方法 1 很生气,想出了这个新方法,它不需要对 PHP 进行任何更改,只需要 Javascript 和 CSS。
将检查可变产品价格是否发生变化的 JavaScript,并将使用新值更新实际价格 div。这个新的价格 div 可以在任何地方,不仅在表单内部。
Javascript:
// Update price according to variable price
if (jQuery('form.variations_form').length !== 0) {
var form = jQuery('form.variations_form');
var variable_product_price = '';
setInterval(function() {
if (jQuery('.single_variation_wrap span.price span.amount').length !== 0) {
if (jQuery('.single_variation_wrap span.price span.amount').text() !== variable_product_price) {
variable_product_price = jQuery('.single_variation_wrap span.price span.amount').text();
jQuery('.single-product-summary p.price span.amount').text(variable_product_price);
}
}
}, 500);
}
CSS:
.single_variation_wrap .price {
display: none;
}
最终结果: