【问题标题】:WooCommerce: change the add to cart text when the product is already in cartWooCommerce:当产品已经在购物车中时更改添加到购物车的文本
【发布时间】:2020-10-18 14:48:48
【问题描述】:

我在更改 WooCommerce/WordPress 中的 “添加到购物车” 按钮的文本时遇到问题。

目前下面的代码,我想要它,以便如果产品已经在购物车中,“添加到购物车” 按钮通过更改文本以说明它已经在购物车中来反映这一点。

目前,即使产品在购物车中,它仍然是“添加到购物车”。奇怪的是,如果我删除 if 条件,文本会发生变化,所以我假设 if 条件有问题,但我看不出它有任何问题。

add_filter('woocommerce_product_add_to_cart_text', 'woocommerce_custom_add_to_cart_text');
function woocommerce_custom_add_to_cart_text($add_to_cart_text, $product_id) {
    global $woocommerce;
    
    foreach($woocommerce->cart->get_cart() as $key => $val ) {
        $_product = $val['data'];
 
        if($product_id == $_product->id ) {
            $add_to_cart_text = 'Already in cart';
        }
        
    return $add_to_cart_text;
    }
}

【问题讨论】:

    标签: php wordpress woocommerce product cart


    【解决方案1】:
    • $_product->id 应该是 $_product->get_id()
    • 在 foreach 循环外使用 return
    • 不需要全局$woocommerce
    • 来自woocommerce_product_add_to_cart_text 过滤器挂钩的第二个参数是$product,而不是$product_id

    所以你得到

    function woocommerce_custom_add_to_cart_text( $add_to_cart_text, $product ) {
        // Get cart
        $cart = WC()->cart;
        
        // If cart is NOT empty
        if ( ! $cart->is_empty() ) {
    
            // Iterating though each cart items
            foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
                // Get product id in cart
                $_product_id = $cart_item['product_id'];
         
                // Compare 
                if ( $product->get_id() == $_product_id ) {
                    // Change text
                    $add_to_cart_text = __( 'Already in cart', 'woocommerce' );
                    break;
                }
            }
        }
    
        return $add_to_cart_text;
    }
    add_filter( 'woocommerce_product_add_to_cart_text', 'woocommerce_custom_add_to_cart_text', 10, 2 );
    

    【讨论】:

    • 我现在只是在尝试你的答案。我在您编辑之前尝试过,但仍然无法正常工作,但我注意到您的新编辑:)
    • 嗯,它有效,很好。不过只有一个副作用。它已停止重定向到购物车。通常当人们按下添加到购物车时,它会将他们带到购物车页面,但现在他们点击“添加到购物车”后不会将他们带到购物车页面。
    • 啊,不用担心我修好了,我删除了休息。太棒了,谢谢你:)
    • break 只是为了离开 foreach 循环。确保您使用的代码是最新的,您问题中的代码包含几个适用于 WooCommerce 早期版本的过时方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2021-01-31
    • 1970-01-01
    • 2021-07-26
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多