【问题标题】:Woocommerce, show/hide added to cart message based on parametersWoocommerce,根据参数显示/隐藏添加到购物车消息
【发布时间】:2021-10-15 00:16:27
【问题描述】:

将产品添加到购物车时,用户会被重定向到购物车/付款窗口,并显示“已添加到购物车”通知。这是我想保留的默认方式,但添加了我的自定义方法。

我的自定义按钮允许客户在添加其他产品时留在商店网站上。然而,当他进入购物车/付款时,他会被多条“添加到购物车”的消息淹没,这看起来很糟糕: multiple messages

我想知道是否有关闭消息的选项,但前提是用户单击了我的自定义按钮。 我尝试将 get 参数附加到按钮并在我的代码中读取它:

    add_filter( 'wc_add_to_cart_message_html', 'filter_wc_add_to_cart_message_html', 10, 2 ); 
    function filter_wc_add_to_cart_message_html( $message, $products ) { 
        $showMSG = get_query_var('show-cmsg');
        if ( $showMSG ){
            return $message;
        }
       return null;
    }

但无论获取参数如何,get_query_var 始终导致 null。我已经注册了:

function add_custom_query_vars( $vars ){
  $vars[] = "show-cmsg";
  return $vars;
}

有没有办法根据用户按下的按钮隐藏消息? 或者,如果您按下自定义按钮,是否可以阻止 woocommerce 生成消息? 或者只是一种将消息限制为最近的一条而不是一次显示的方法?

我也会对其他一些错误消息做同样的事情,但如果我能找到答案,那么我想我会管理错误。

【问题讨论】:

    标签: php css wordpress woocommerce


    【解决方案1】:

    我设法找到了解决方案:

    function filter_wc_add_to_cart_message_html( $message, $products ) { 
            $urlp = explode('/', $_SERVER['REQUEST_URI']);
            $urlp = $urlp[1];
    
        if ( $urlp == 'potwierdzenie'){
            return $message;
        }
        return null;
    }
    

    我只是在购买产品时检查用户是否在结帐 url 中,然后我会显示通知。如果用户仍在商店页面或任何其他页面上,则不会显示通知。这可以防止结帐时出现多个“已添加到购物车”消息。

    【讨论】:

      【解决方案2】:

      您应该使用会话,因为 add_custom_query_vars 只是添加键而不是值,这就是为什么您总是为空。 所以对于会话首先检查 session_start() 与否,然后在会话中设置值,然后你可以相应地到达任何地方。

      例子:

       function woo_register_session() {
         if(!session_id() || session_status() == PHP_SESSION_NONE){
             session_start();
         }
         $_SESSION['show_cmsg'] = true;
       }
      add_action( 'init', 'woo_register_session' );
      

      然后获取会话并在您的函数中相应地使用它

      add_filter( 'wc_add_to_cart_message_html', 'filter_wc_add_to_cart_message_html', 10, 2 ); 
      function filter_wc_add_to_cart_message_html( $message, $products ) { 
          $showMSG = $_SESSION['show_cmsg'] ? true : false;
          if ( $showMSG ){
              return $message;
          }
          return null;
      }
      

      消息的另一个替代函数

      add_filter( 'wc_add_to_cart_message', 'woo_add_to_cart_message' );
      function woo_add_to_cart_message() { 
          $showMSG = $_SESSION['show_cmsg'] ? true : false;
          if($showMSG){
              if (get_option('woocommerce_cart_redirect_after_add')=='yes') :
                  $return_to  = get_permalink(woocommerce_get_page_id('shop'));
                  $message    = sprintf('<a href="%s" class="button">%s</a> %s', $return_to, __('Continue Shopping &rarr;', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );
              else :
                  $message    = sprintf('<a href="%s" class="button">%s</a> %s', get_permalink(woocommerce_get_page_id('cart')), __('View Cart &rarr;', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );
              endif;
          }else{
              $message = null;
          }
          return $message;
      }
      

      【讨论】:

      • 遗憾的是,这在我的情况下不起作用,$showMSG 出于某种原因总是正确的。我设法找到了解决方案,发布在上面。
      • 如果您在会话中设置了值,它将始终设置,因此在将产品添加到购物车后,您应该取消设置会话或将会话值更新为 false。简单
      猜你喜欢
      • 2016-09-04
      • 1970-01-01
      • 2019-09-18
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      相关资源
      最近更新 更多