我正在創建一個WooCommerce(5.6.0版)網站,用戶可以購買泡沫產品,價格在存檔頁面計算。基本上,用戶輸入尺寸,價格是根據一個公式計算的。我目前正在努力更新購物車中的價格,我以前沒有在這個層面上定制產品和價格的經驗,所以非常感謝任何幫助。到目前為止,我所做的步驟:
1.獲取(通過Ajax)并在WC_Session中設定自定義產品價格function get_custom_product_price_set_to_session(){
//檢查是否有'foamPrice'和foamProductI _POST變數。
if (isset($_POST['foamProductId'/span>]) & & isset($_POST['foamPrice']) {
//啟用客戶WC_Session(第一次添加到購物車時需要)。
if (!WC()->session-> has_session()) {
WC()->session->set_customer_session_cookie(true)。
}
//在WC_Session變數中設定product_id和自定義價格。
WC()->session->set('foam_price', [
'id' => (int)wc_clean($_POST['foamProductId'])。
'price' => (float)wc_clean($_POST['foamPrice']) 。
]);
}}
add_action('wp_ajax_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session')。
add_action('wp_ajax_nopriv_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session') 。
2.從WC_Session資料中改變購物車專案價格:
add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 20, 1)。)
function custom_cart_item_price($cart>){
if (is_admin() && !defined('DOING_AJAX')
return;
//必須從Woocommerce 3.2版本開始要求購物車專案屬性的變化。
if (did_action('woocommerce_before_calculate_totals') >=2)
return;
//Loop through our specific cart item keys[/span].
foreach ($cart->get_cart() as $cart_item) {
//獲取當前專案的自定義產品價格。
if (($data =WC()->session->get('foam_price')) & & $cart_item['data']->get_id() == $data['id'] ){
//設定新的產品價格。
$cart_item['data']->set_price($data['price'])。
}
}}
我遇到的問題是,它只對最近添加到購物車的產品有效,以前添加到購物車的產品在我每次添加新產品到購物車時都被重新設定為0價格。如果有人能提供一些指導,我將非常感激。謝謝!
uj5u.com熱心網友回復:
用
WC()->session->set('foam_price', [
'id' =>(int)wc_clean($_POST['foamProductId'])。
'price' => (float)wc_clean($_POST['foamPrice']) 。
]);
你基本上是用最新添加到購物車的價格來覆寫之前的 "foam_price"。
在我看來,你需要為不同的產品ID存盤不同的值。
嘗試一下(未經測驗):
function get_custom_product_price_set_to_session()>{
//檢查是否有'foamPrice'和foamProductI _POST變數。
if (isset($_POST['foamProductId'/span>]) & & isset($_POST['foamPrice']) {
//啟用客戶WC_Session(第一次添加到購物車時需要)。
if (!WC()->session-> has_session()) {
WC()->session->set_customer_session_cookie(true)。
}
//在WC_Session變數中設定product_id和自定義價格。
WC()->session->set('foam_price' . wc_clean($_POST['foamProductId']), [
'id' => (int)wc_clean($_POST['foamProductId']) 。
'price' => (float)wc_clean($_POST['foamPrice']) 。
]);
}}
add_action('wp_ajax_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session')。
add_action('wp_ajax_nopriv_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session') 。
...然后:
add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 20, 1)。)
function custom_cart_item_price($cart>){
if (is_admin() && !defined('DOING_AJAX')
return;
//必須從Woocommerce 3.2版本開始要求購物車專案屬性的變化。
if (did_action('woocommerce_before_calculate_totals') >=2)
return;
//Loop through our specific cart item keys[/span].
foreach ($cart->get_cart() as $cart_item) {
//獲取當前專案的自定義產品價格。
if (($data = WC()->session->get('foam_price' . $cart_item['data']->get_id()) && $cart_item['data']->get_id() == $data['id'] ) {
//設定新的產品價格。
$cart_item['data']->set_price($data['price'])。
}
}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319156.html
標籤:
