我現在已經為這個問題撓頭好幾天了,需要一些指導。
我正在為一個WooCommerce網站制作一個完全從頭開始的自定義主題,現在我正試圖讓購物車功能發揮作用。我被卡在了更新購物車中產品數量的按鈕( /-)上。
對我來說,問題似乎是我在 functions.php 中使用的 WC() 與當前的前端會話不是同一個實體,或者是其中的某些內容。至少我現在是這么想的。
如果我除錯正確的話,WC()->cart->set_quantity($cart_item_key, 0)沒有給出錯誤(如果使用數字0),所有其他數字給出'500(內部服務器錯誤)'。但是,即使使用0,購物車中的數量也不會改變。
我已經正確地排隊了腳本,所以當按鈕被點擊時,AJAX函式呼叫執行得很好。
這是我的HTML和PHP(simplified)
< div class="cart-items">
<? php foreach(WC()->cart->get_cart() as $cart_item_key => $cart_item) : ?>。
<div class="cart-item">
< div class=" quantity" id="cart-qty-< ? php echo $cart_item_key ? >"/span>>
<button class="minus" id="car-subtract"onclick="updateCartQuantity('<? php echo $cart_item_key ? >', '< ? php echo $cart_item[' quantity'] ? >', -1)">-</button>
<p><? php echo $cart_item[' quantity'] ? ></p>>
<button class="plus" id="car-add"> </button>
</div>/span>
</div>/span>
<? endforeach; ? >
</div>
這是我的JS(在一個名為shopping-ajax.js的檔案中)
function updateCartQuantity(cart_item_key, current_qty, value) {
function qty_cart(){
jQuery.ajax({
type: "POST"。
url: my_ajax_object.ajax_url,
資料。{
行動。"update_cart",
hash: cart_item_key,
quantity: current_qty,
值:值。
},
成功。function (data) {
console.log(data)。
},
error。function (data) {
console.log(data)。
},
});
}
qty_cart()。
}
這是我的PHP函式(在functions.php內)
function updateCartQuantity(){
$cart_item_key = $_REQUEST['cart_item_key'/span>]。
$quantity = $_REQUEST[' quantity']。
$value = $_REQUEST['value'] 。
WC()->cart->set_quantity($cart_item_key, $quantity $value) 。
echo $quantity $value;
wp_die()。
}
add_action( 'wp_ajax_nopriv_update_cart', 'updateCartQuantity' ) 。
add_action( 'wp_ajax_update_cart', 'updateCartQuantity' ) 。
請提前對任何幫助或指標表示感謝!
uj5u.com熱心網友回復:
你應該根據qty輸入框(改變qty)來管理產品的數量。
我的JS:
location: theme directory -> js -> custom.js
jQuery( function($) {
$( document ).on( 'change', 'input. qty', function() {
var $thisbutton = $(this)。
var item_hash = $( this ).attr( 'name ). replace(/cart[([w] )][qty]/g, "$1") 。
var item_quantity = $( this ).val( ) 。
var currentVal = parseFloat( item_quantity )。
$.ajax({
type: 'POST'。
url: cart_qty_ajax.ajax_url,
data: {
action: 'my_cart_qty',
hash: item_hash,
quantity: currentVal
},
success: function(response) {
jQuery(document.body)。 trigger('added_to_cart', [response.fragments, response.cart_hash, $thisbutton]) 。
//jQuery(document.body).trigger('update_checkout');/span>
}
});
});
});
fuctions.php -
設定Enqueue Ajax腳本:
function enqueue_cart_qty_ajax() /span>{
wp_register_script( 'my_cart_qty-ajax-js', get_template_directory_uri() . '/js/custom.js', array( 'jquery' ), '', true ) 。
wp_localize_script( 'my_cart_qty-ajax-js', 'cart_qty_ajax', array( 'ajax_url' => admin_url( 'admin-ajax. php' ) )。)
wp_enqueue_script( 'my_cart_qty-ajax-js' )。
}
add_action('wp_enqueue_scripts', 'enqueue_cart_qty_ajax') 。
Ajax呼叫 -
function ajax_my_cart_qty() /span>{
//設定專案鍵為input.qty的名稱中找到的哈希值。
$cart_item_key = $_POST['hash'/span>]。
//獲取我們要更新的產品所擁有的數值陣列。
$threeball_product_values = WC()->cart->get_cart_item( $cart_item_key ) 。
//獲取購物車中物品的數量。
$threeball_product_quantity = apply_filters( 'woocommerce_stock_amount_cart_item', apply_filters( 'woocommerce_stock_amount', preg_replace( "/[^0-9. ]/", '', filter_var($_POST[' quantity'], FILTER_SANITIZE_NUMBER_INT) ), $cart_item_key )。
//更新購物車驗證。
$passed_validation = apply_filters( 'woocommerce_update_cart_validation', true, $cart_item_key, $threeball_product_values, $threeball_product_quantity )。)
//更新購物車中物品的數量。
if ( $passed_validation ) {
WC()->cart->set_quantity( $cart_item_key, $threeball_product_quantity, true ) 。
}
//重繪 頁面。
echo do_shortcode( '[woocommerce_cart]' ) 。
die()。
}
add_action('wp_ajax_my_cart_qty', 'ajax_my_cart_qty') 。
add_action('wp_ajax_nopriv_my_cart_qty', 'ajax_my_cart_qty') 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323836.html
標籤:
