提问者:小点点

改变


我正在尝试更改链接

我只允许每个产品添加一个数量。但是Woocommerce的默认方式是直接指向带有通知的单个页面。

相反,我希望用户

  • 查看文本“查看购物车”,并将用户引导到购物车

  • 请参阅文本添加,没有任何链接。

谢谢你


共1个答案

匿名用户

要更改文本,您需要下面的代码。

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;
}