有没有办法让 woocommerce_loop_add_to_cart_link 不更改 url 地址但仍将产品添加到购物车?

Is there a way I can make woocommerce_loop_add_to_cart_link not change url address but still add product to cart?

有没有什么方法可以在页面 url 不改变的情况下 add/remove 将产品添加到我的购物车?

我在我的自定义 Wordpress 主题上有自定义添加到购物车按钮,但是当我将产品添加到购物车时,url 更改为 http://localhost/mytheme/?add-to-cart=15。有什么办法可以避免它并仍然将产品添加到购物车吗?

<?php global $product;

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="addtocart_nupp">Add product</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( $product->get_id() ),
        esc_attr( $product->get_sku() ),
        $product->is_purchasable() ? 'add_to_cart_button' : '',
        esc_attr( $product->get_type() ),
        esc_html( $product->add_to_cart_text() )
    ),
$product ); ?>

WooCommerce 有一个挂钩 woocommerce_add_to_cart_redirect,当您将产品添加到购物车时会调用它。

有两个参数,您在重定向的地方 $url 和添加到您的购物车的 $product

add_filter( 'woocommerce_add_to_cart_redirect', 'bks_add_to_cart_redirect', 10, 2 );
function bks_add_to_cart_redirect( $url, $product ) {
    if ( $product && is_a( $product, 'WC_Product' ) ) {
        // Do any change or URL you want to $url.
    }
    return $url;
}

如果愿意,您可以更改逻辑并将其重定向回产品页面,方法是更改​​里面的 $url。

$url = esc_url($product->get_permalink());

你可以给它添加参数。

$url = esc_url( add_query_arg('name', 'value', $product->get_permalink() ) );

-- 或--

只需将其重定向到自定义页面即可。

$url = esc_url( home_url() . '/custom_page' );