php WooCommerce中出现错误时强制重定向到购物车

htrmnn0y  于 2023-03-11  发布在  PHP
关注(0)|答案(2)|浏览(98)

我通过重定向到添加到购物车的网址添加到WooCommerce购物车。例如,我的代码生成这个网址并重定向到它:

/?add-to-cart=2316723&variation_id=2316727&attribute_program=General&nyp=10

我必须以这种方式添加到购物车,因为我使用的是“Name Your Price”加载项,因此无法通过WC()->cart->add_to_cart()添加到购物车
不幸的是,当添加到购物车时出现错误时,WooCommerce会重定向到我的主页,而不是停留在购物车上,以便用户可以看到错误。
这种情况不会发生在客户点击产品按钮添加到购物车后出现购物车错误的情况下,而只会发生在我的代码重定向到添加到购物车URL后出现购物车错误的情况下。
我试过这个过滤器:

add_filter( 'woocommerce_cart_redirect_after_error', 'stop_woo_cart_redirect');
function stop_woo_cart_redirect( $url ) {
        $url = WC()->cart->get_cart_url();
        return $url;
}

这也没什么区别。
推车错误通常是从我的一些其他的,使用woocommerce_add_to_cart_validation过滤器。
因此,换句话说,我的代码生成一个添加到购物车的URL并重定向到它,我的其他代码确定特定的产品组合无效并生成购物车错误,但WooCommerce不会停留在购物车上,而是重定向远离它。
我有什么办法可以补救吗?

sxissh06

sxissh061#

因为你不能使用WC()-〉cart-〉add_to_cart(),我怀疑WC()-〉cart-〉get_cart_url();将工作。您将需要使用您的自定义代码挂钩。
试试这个。我不知道它是否有效,但值得一试。
add_filter('错误后的购物车重定向','返回错误');

ljsrvy3e

ljsrvy3e2#

对于仍然有这个问题的人,我设法使用模板重定向钩子重定向到购物车页面,如下所示:

add_action('template_redirect', function () {
    $addToCartQuery = intval($_GET['add-to-cart']);
    if (is_front_page() && !empty($addToCartQuery)) {
        wp_safe_redirect(WC()->cart->get_cart_url());
        exit();
    }
});

这段代码检查用户当前是否在登录页面上,并且add-to-cart参数是否存在。为了安全起见,我使用intval来清理原始get参数,因为它不能通过get_query_var()函数获得。
如果你想使用这个安全的wordpress函数来接收查询变量,你也可以使用下面的过滤器来添加它:

add_filter('query_vars', function ($vars) {
    $vars[] = 'add-to-cart';
    return $vars;
}, 10, 1);

相关问题