我已經創建了WooCommerce產品,並使用鉤子woocommerce_before_add_to_cart_button
添加商品詳細頁上兩個選項。現在,當顧客從產品詳細信息頁面添加產品到購物車時,他們有兩種選擇。他們可以從這兩個選項中選擇一個選項。更改WooCommerce車價格後應用優惠券代碼
然後,我使用woocommerce hook woocommerce_add_cart_item_data將用戶選定的值存儲在購物車meta中。
我利用這個答案代碼:Save product custom field radio button value in cart and display it on Cart page
這是我的代碼:
// single Product Page options
add_action("woocommerce_before_add_to_cart_button", "options_on_single_product");
function options_on_single_product(){
$dp_product_id = get_the_ID();
$product_url = get_permalink($dp_product_id);
?>
<input type="radio" name="custom_options" checked="checked" value="option1"> option1<br />
<input type="radio" name="custom_options" value="option2"> option2
<?php
}
//Store the custom field
add_filter('woocommerce_add_cart_item_data', 'save_custom_data_with_add_to_cart', 10, 2);
function save_custom_data_with_add_to_cart($cart_item_meta, $product_id) {
global $woocommerce;
$cart_item_meta['custom_options'] = $_POST['custom_options'];
return $cart_item_meta;
}
這是我曾嘗試:
add_action('woocommerce_before_calculate_totals', 'add_custom_price', 10, 1);
function add_custom_price($cart_obj) {
if (is_admin() && ! defined('DOING_AJAX'))
return;
foreach ($cart_obj->get_cart() as $key => $value) {
$product_id = $value['product_id'];
$custom_options = $value['custom_options'];
$coupon_code = $value['coupon_code'];
if($custom_options == 'option2')
{
if($coupon_code !='')
{
global $woocommerce;
if (WC()->cart->has_discount($coupon_code)) return;
(WC()->cart->add_discount($coupon_code))
//code for second discount
}
else{
$percentage = get_post_meta($product_id , 'percentage', true);
//print_r($value);
$old_price = $value['data']->regular_price;
$new_price = ($percentage/100) * $old_price;
$value['data']->set_price($new_price);
}
}
}
}
現在我想做拿到最後的片段是:
- 如果客戶選擇了Option1,則運行woocommerce常規流程。
- 如果選擇了選項2,則首先應用於購物車的優惠券代碼(如果客戶輸入的代碼)然後價格除以某個百分比(存儲在產品元中)之後應用。
但它沒有像預期的那樣工作,因爲更改的產品價格是女傭之前和優惠券折扣後應用此更改的價格。
我想要的是,優惠券折扣將首先應用於產品正常價格,然後通過我的自定義產品折扣更改此價格後。
這可能嗎?我怎樣才能做到這一點?
謝謝。