Tôi đang làm việc trên một trang web cho phép người dùng thêm sản phẩm vào giỏ hàng từ trang chủ. Tôi đã theo dõi một số tài nguyên trực tuyến từ trang web của họ và các câu hỏi SO khác cho phép tôi thêm sản phẩm vào giỏ hàng qua Ajax nhưng tổng số giỏ hàng sẽ không cập nhật mà không cần tải lại trang.WooCommerce - Ajax Thêm vào giỏ hàng và cập nhật Tổng số
WooCommerce's documentation là nơi chức năng cpp_header_add_to_cart_fragment
đến và dường như không hoạt động. Ban đầu tôi đã sử dụng add_to_cart_fragments
nhưng tôi phát hiện ra rằng đã không được chấp nhận và tôi nên sử dụng woocommerce_add_to_cart_fragments
nhưng thay đổi đó cũng không giúp được gì.
Tôi càng đọc mã ... Tôi nhận thấy rằng các đoạn bắt đầu được trả về từ cuộc gọi ajax vì vậy tôi bắt đầu nghĩ rằng tôi cần phải thay thế html hiển thị tổng số giỏ hàng với những gì được trả về từ javascript?
page_home.php
<!-- Cart link to be updated when products are added -->
<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e('View your shopping cart'); ?>">
<?php echo WC()->cart->get_cart_total(); ?>
</a>
functions.php
add_action('wp_enqueue_scripts', 'cpp_enqueue_scripts');
function cpp_enqueue_scripts() {
/* Other enqueue/registers */
wp_register_script('diy_kits', get_template_directory_uri().'/js/diy_kit.js');
wp_enqueue_script('diy_kits');
wp_localize_script(
'diy_kits',
'cpp_ajax',
array(
'ajaxurl' => admin_url('admin-ajax.php'),
'diy_product_nonce' => wp_create_nonce('diy_product_nonce')
)
);
}
add_action('wp_ajax_nopriv_cpp_ajax-submit', 'cpp_ajax_submit');
add_action('wp_ajax_cpp_ajax-submit', 'cpp_ajax_submit');
function cpp_ajax_submit() {
global $woocommerce;
$nonce = $_POST['nonce'];
if(!wp_verify_nonce($nonce, 'diy_product_nonce')) {
wp_die('Busted!');
}
// Add product to cart... this works
$product_id = $_POST['product_id'];
if($woocommerce->cart->add_to_cart($product_id)) {
$data = apply_filters('woocommerce_add_to_cart_fragments', array());
do_action('woocommerce_ajax_added_to_cart', $product_id);
} else {
$data = array('success' => false, 'product_id' => $product_id);
}
$response = json_encode($data);
header("Content-Type: application/json");
echo $response;
exit;
}
cpp_header_add_to_cart_fragment
// CART UPDATE AJAX this doesn't work
add_filter('woocommerce_add_to_cart_fragments', 'cpp_header_add_to_cart_fragment');
function cpp_header_add_to_cart_fragment($fragments) {
global $woocommerce;
ob_start(); ?>
<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e('View your shopping cart'); ?>">
<?php echo WC()->cart->get_cart_total(); ?>
</a>
<?php
$fragments['a.cart-contents'] = ob_get_clean();
return $fragments;
}
diy_kits.js
// setup and other stuff...
links.click(function(e) {
/* unrelated stuff */
jQuery.post(
cpp_ajax.ajaxurl,
{
action : 'cpp_ajax-submit',
nonce : cpp_ajax.diy_product_nonce,
product_id : jQuery(this).attr('data-product-id')
},
function(response) {
console.log(response);
}
);
});
Tôi có thể có được một bình luận giải thích downvote? Đó là gần như ngay lập tức ... – CaldwellYSR
Tôi chống lại downvote, mặc dù tôi nghĩ rằng câu hỏi của bạn sẽ được hưởng lợi từ mô tả bổ sung về vấn đề xảy ra và kết quả thực tế so với dự kiến. * Tôi đang đấu tranh với [...] * và * điều này không hoạt động * có thể được hiểu là "gỡ lỗi này cho tôi". – OhBeWise
@OhBeWise Cảm ơn bạn. Tôi sẽ chỉnh sửa câu hỏi để giải thích thêm một chút. Tôi cảm thấy như thế này có thể được hiểu là "gỡ lỗi này cho tôi" nhưng lý do duy nhất là tôi đã kiệt sức về kiến thức của mình về chủ đề và không thể thấy lý do nào tại sao nó không hoạt động. – CaldwellYSR