當產品小計超過3000時,它必須是另一個價格。
我將它作為元欄位添加到產品中。在 Stack Overflow 上,很久以前有人建議我以特價購買過濾器woocommerce_cart_item_name
為了我的目的,我對其進行了一些修改:
function kia_add_subtitle_to_cart_product( $title, $cart_item ){
$threshold = 3000; // Change price if > 3000
$_product = $cart_item['data'];
$meta = $_product->get_meta( '_opt_price_var');
$price = $_product->get_regular_price();
$subtotal = $cart_item['quantity'] * $price;
if ( $subtotal > $threshold && ( $meta )) {
$_product->set_price( $meta );
}
echo $title;
}
add_filter( 'woocommerce_cart_item_name', 'kia_add_subtitle_to_cart_product', 10, 2 );
特價僅顯示在購物車表格中,但不在購物車總數中,也不在結帳中,在總計和結帳時價格仍然是正常的,主計算器不會從此過濾器中獲取它。
我該如何解決?如何將它也包含在主計算器中?
我嘗試了不同的鉤子可以回應計算器 -add_action
和add_filter
,有和沒有10, 2
- 不是這樣。
add_action('woocommerce_before_shipping_calculator', 'kia_add_subtitle_to_cart_product',10,2);
add_action('woocommerce_before_cart_totals', 'kia_add_subtitle_to_cart_product', 10, 2 );
uj5u.com熱心網友回復:
該woocommerce_cart_item_name
鉤子在您的代碼嘗試中被濫用。與使用 echo 相比,過濾器鉤子應該總是回傳一些東西。
你應該改用woocommerce_before_calculate_totals
鉤子
所以你得到:
function action_woocommerce_before_calculate_totals( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
// Change price if > 3000
$threshold = 3000;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Get regular price
$price = $cart_item['data']->get_regular_price();
// Subtotal = Get quantity * price
$subtotal = $cart_item['quantity'] * $price;
// Greater than
if ( $subtotal > $threshold ) {
// Get meta
$meta = $cart_item['data']->get_meta( '_opt_price_var', true );
// NOT empty
if ( ! empty ( $meta ) ) {
// Set new price
$cart_item['data']->set_price( $meta );
}
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'action_woocommerce_before_calculate_totals', 10, 1 );
uj5u.com熱心網友回復:
add_filter('woocommerce_calculated_total', 'custom_calculated_total', 10, 2);
function custom_calculated_total($total, $cart_object) {
if (is_admin() && !defined('DOING_AJAX'))
return;
if (!WC()->cart->is_empty()):
foreach ($cart_object->cart_contents as $key => $cart_item) {
$meta = $cart_item['data']->get_meta('_opt_price_var');
if ($total >= 3000 && ( $meta )) {
$total = $meta;
}
}
endif;
return $total;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466609.html
標籤:WordPress woocommerce 产品 大车 钩woocommerce