当产品已经在购物车中并且产品标签为buynow时,将“添加到购物车”按钮文本更改为“添加”


Change Add to cart button text to Added when product already in cart and product tag is buynow

当产品已经在购物车中时,我想将添加到购物车文本更改为Added,当产品标签为buynow时,将添加到车按钮文本更改为立即购买。

这是我的代码:

/**
 * Change the add to cart text on single product pages
 */
add_filter('woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text');
function woo_custom_cart_button_text() {
global $woocommerce;    
    foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->id ) {
            //return __('✓ Added', 'woocommerce');
            return __('Added', 'woocommerce');
        }
    }
    //return __('Add to cart', 'woocommerce');
    if ( has_term( 'buynow', 'product_tag', $_product->id ) ) :
            return __( 'Buy Now', 'woocommerce' );
        else:
            return __( 'Add to Cart', 'woocommerce' );
        endif;
}
/**
 * Change the add to cart text on product archives
 */
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text' );
function woo_archive_custom_cart_button_text() {
global $woocommerce;    
    foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->ID ) {
            //return __('✓ Added', 'woocommerce');
            return __('Added', 'woocommerce');
        }
    }
    //return __('Add to cart', 'woocommerce');
    if ( has_term( 'buynow', 'product_tag', $_product->ID ) ) :
            return __( 'Buy Now', 'woocommerce' );
        else:
            return __( 'Add to Cart', 'woocommerce' );
        endif;
}

我的代码完全适用于单个产品页面,但不适用于产品归档页面。

任何人对此都有解决方案/建议,请分享。提前谢谢。

对对象$_product使用id而不是ID

尝试使用var_dump()查看比较的值。您会看到$_product->ID是空的。

最后它的工作

这是我在wooccommerce/lop/add-to-cart.php中放入的代码

global $product;
foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->id ) {
            $incart[] = $_product->id;
        }
    }
if (in_array($product->id, $incart, true)) {
    $output = 'Added';
}elseif(in_array($product->id, $incart, true) && has_term( 'buynow', 'product_tag', $_product->id )){
     $output = 'Added';
}elseif ( has_term( 'buynow', 'product_tag', $product->id ) ){
    $output = 'Buy Now';
}else{
$output = 'Add to cart';
}