导航到 Wordpress 中的新页面时无法清除 WooCommerce 购物车 [重复]

Posted

技术标签:

【中文标题】导航到 Wordpress 中的新页面时无法清除 WooCommerce 购物车 [重复]【英文标题】:Unable to clear WooComerce cart when navigating to a new page inside Wordpress [duplicate] 【发布时间】:2020-11-18 18:39:12 【问题描述】:

每当访问者导航到特定页面(ID #1)时,我都会尝试清空 Woocomerce 购物车。

环境:

WP 5.4.2

Woocomerce 4.2.2

Woodmart 主题

Litespeed 缓存(已禁用)and applied these recommendations

使用谷歌浏览器/火狐浏览器测试。隐身模式和普通模式。

on this similar question 的答案都没有帮助

我在functions.php中使用这个代码:

add_action( 'template_redirect', 'woocommerce_clear_cart' );
function woocommerce_clear_cart() 
  global $woocommerce, $post;
    if( $post->ID == 1) 
      WC()->cart->empty_cart();
      WC()->session->set('cart', array());
    

结果:

    客户进入产品页面并将产品添加到购物车。(我的模板显示了迷你购物车中的产品) 客户导航到页面 id 1。 产品仍显示在迷你购物车中/或导航到购物车页面时。 购物车只有在使用 CTRL+F5 重新加载浏览器后才会清空,没有缓存。或在页面之间导航几次之后。

见解:

预期结果正确发生当我以管理员身份登录时(导航到第 1 页时购物车清空) 当清空客户会话(WooCommerce/Status/Tools -> 清除客户会话)后用户添加产品(在步骤 1 和 2 之间)导航到页面 id 1 会产生预期的结果。 我怀疑是浏览器缓存问题。 当页面#1 加载时打印出WC()->session 时,我可以看到步骤 1 中的购物车项目。

是否有一些 WC 方法可以以编程方式从数据库中清除特定的客户会话?

我也试过这段代码,但这些都没有给我预期的结果

add_action( 'template_redirect', 'woocommerce_clear_cart' );
function woocommerce_clear_cart() 
    if( $post->ID == 1) 
        WC()->session->set( 'cart', null );
        WC()->session->set( 'cart_totals', null );

        $cart = WC()->cart; 
        foreach( $cart->get_cart() as $cart_item_key => $cart_item ) 

                $cart->remove_cart_item( $cart_item_key ); // remove it from cart
         
    

【问题讨论】:

【参考方案1】:

试试:

add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() 
  global $woocommerce;

    if ( is_front_page() && isset( $_GET['empty-cart'] ) )  
        WC()->cart->empty_cart(); 
    

这是首页,替换为您选择的页面。

【讨论】:

如您所见,我正在使用此代码。它不适合我

以上是关于导航到 Wordpress 中的新页面时无法清除 WooCommerce 购物车 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从侧边栏链接导航到同一页面上的新 bootstrap 4 选项卡?

当我导航到本机反应的新页面时,如何强制卸载组件?

当我导航到其他路由器页面时,如何清除由错误边界创建的自定义消息

突出显示单个页面的 wordpress 导航链接

wordpress 如何在子页面中导航上一页和下一页

导航菜单在 Wordpress 的管理面板中不起作用