改变&如果产品已在购物车中,则添加到购物车按钮的链接

时间:2018-05-29 07:48:38

标签: woocommerce

我正在尝试更改链接&如果产品已在购物车中,则存档页面上的“添加到购物车”按钮的文本。

我只允许添加每个产品的数量。 但Woocommerce的默认方式是通过通知指向单页。

相反,我希望用户

  • 请参阅文本“查看购物车”并将用户定向到购物车

  • 请参阅“已添加”文字,并且没有任何链接。

谢谢

1 个答案:

答案 0 :(得分:0)

要更改文字,您需要以下代码。

add_filter('woocommerce_product_add_to_cart_text', 'wc_product_add_to_cart_text', 10, 2 );
add_filter('woocommerce_product_single_add_to_cart_text', 'wc_product_add_to_cart_text', 10, 2 );

function wc_product_add_to_cart_text( $text, $product ){

    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $in_cart ) {
        $text = "View Cart";
    }
    return $text;
}

要重定向到购物车,这样就可以了。

add_action( 'wp_loaded', 'wc_add_to_cart_action', 19 );
function wc_add_to_cart_action(){
    if ( empty( $_REQUEST['add-to-cart'] ) || ! is_numeric( $_REQUEST['add-to-cart'] ) ) {
        return;
    }
    $product_id             = absint( $_REQUEST['add-to-cart'] );
    $adding_to_cart         = wc_get_product( $product_id );
    $product_cart_id        = WC()->cart->generate_cart_id( $product_id );
    $in_cart                = WC()->cart->find_product_in_cart( $product_cart_id );
    if ( $in_cart && $adding_to_cart->is_sold_individually() ) {
        wp_safe_redirect( wc_get_cart_url() );
        exit;
    }
}

或将其用于第二部分。

add_action( 'woocommerce_simple_add_to_cart', 'wc_simple_add_to_cart' );
function wc_simple_add_to_cart(){
    global $product;
    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $in_cart ) {
        remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
        echo sprintf( '<form class="cart"><a href="%s" class="single_add_to_cart_button button alt">%s</a></form>', wc_get_cart_url(), __( 'View Cart', 'woocommerce' ) );
    }
}

更新

对于商店页面,您需要以下代码:

add_filter('woocommerce_product_add_to_cart_url', 'wc_product_add_to_cart_url', 10, 2 );
function wc_product_add_to_cart_url( $url, $product ){
    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $in_cart && is_shop() ) {
        $url = wc_get_cart_url();
    }
    return $url;
}