如果产品位于购物车中,则动态更改 WooCommerce 产品单个添加到购物车按钮文本

问题描述 投票:0回答:1

在 WooCommerce 中,我想在按下“添加到购物车”按钮后将相应产品添加到购物车时更新“添加到购物车”文本。

反之亦然,这样,当按下“从购物车中删除按钮”将相应产品从购物车中删除时,“添加到购物车”文本就会更改。

以下代码需要刷新页面以反映产品的状态并更新“添加到购物车”按钮文本。

add_filter( 'woocommerce_product_single_add_to_cart_text', 'already_in_cart_single_add_to_cart_text', 10, 2 );
function already_in_cart_single_add_to_cart_text( $add_to_cart_text, $product ) {
    foreach( WC()->cart->get_cart() as $item ) {
        if( $item['data']->get_id() === $product->get_id() ) {
            return __('Product already in Cart. Add again?', 'woocommerce');
        }
    } 
    return $add_to_cart_text;
}

但是,我希望在按下“添加到购物车”按钮或“从购物车中删除”按钮时更新。

php jquery wordpress woocommerce product
1个回答
0
投票

请注意,您当前的代码仅适用于简单的产品。所以我的答案代码也适用于简单的产品。

要动态更新产品添加到购物车文本,如果产品在购物车中并被删除,则需要 JavaScript 和 Ajax。

尝试以下操作:

// Filter product button single add to cart text
add_filter( 'woocommerce_product_single_add_to_cart_text', 'already_in_cart_single_add_to_cart_text', 10, 2 );
function already_in_cart_single_add_to_cart_text( $add_to_cart_text, $product ) {
    if (!$product->is_type('simple')) {
        return $add_to_cart_text;
    }

    foreach( WC()->cart->get_cart() as $item ) {
        if( $item['data']->get_id() === $product->get_id() ) {
            return __('Product already in Cart. Add again?', 'woocommerce');
        }
    } 
    return $add_to_cart_text;
}


// Check dynamically cart items via Ajax and update add to cart text (jQuery)
add_action( 'woocommerce_before_add_to_cart_button', 'ajax_update_single_add_to_cart_text' );
function ajax_update_single_add_to_cart_text(){
    global $product;

    if (!$product->is_type('simple')) return;
    
    wc_enqueue_js("$(document.body).on( 'added_to_cart removed_from_cart', function(){
        $.ajax({
            type: 'POST',
            url: '" . admin_url('/admin-ajax.php') . "',
            data: {
                'action': 'check_cart_items',
                'product_id': ".$product->get_id()."
            },
            success: function (response) {
                $('[name=add-to-cart]').html(response)
            }
        });
    });");
}

// PHP AJAX Receiver: Process the ajax request (check cart items)
add_action('wp_ajax_check_cart_items', 'check_cart_items_for_single_add_to_cart_text');
add_action('wp_ajax_nopriv_check_cart_items', 'check_cart_items_for_single_add_to_cart_text');
function check_cart_items_for_single_add_to_cart_text() {
    if ( isset($_POST['product_id']) && $_POST['product_id'] > 0 ) {
        // Loop through cart items
        foreach( WC()->cart->get_cart() as $item ) {
            if( $item['data']->get_id() == intval($_POST['product_id']) ) {
                wp_die( __('Product already in Cart. Add again?', 'woocommerce') );
            }
        } 
        wp_die( __('Add to cart', 'woocommerce') );
    }
    wp_die();
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.