如何隐藏woocommerce中的特定消息?

时间:2016-10-10 10:00:03

标签: php wordpress woocommerce

我想在不修改基本的woocommerce插件的情况下隐藏/删除来自woo commerce的特定消息。 有几种与优惠券相关的消息,如

  1. 已使用优惠券代码!
  2. 抱歉!优惠券12345已经应用于您的购物车。 (这里我基本上想隐藏优惠券代码)
  3. 以及其他几个与这些优惠券代码相似的内容。

    我只想隐藏这些类型的优惠券/购物车消息,其他人则很喜欢“产品成功添加!”或任何其他错误消息。

    基本上,目的是显示所有其他消息(错误和成功消息),但不想在这些消息中显示优惠券消息和优惠券代码。

    那么,有没有办法通过做任何钩子等来做到这一点,就像我发现消除所有消息字符串(如果我没有错)。

    add_filter( 'woocommerce_coupon_message', '__return_empty_string' );
    
    1. 还有一件事是,当我将产品添加到汽车时,有几条消息在购物车页面上重复多次。 “已申请优惠券代码!” 2,3到4次。

3 个答案:

答案 0 :(得分:2)

好的,找到了解决方案

转到woocommerce tempaltes,复制通知文件夹并编辑所需的模板,在我的情况下是error.php

复制/编辑代码

<ul class="woocommerce-error">
    <?php
     foreach ( $messages as $message ) : 
     if ( $message == "Coupon code already applied!" ) {
            $message = "";//empty error string

        }  else if (strpos($message, 'does not exist!') !== false) {
                $message = ""; //empty error string

            }
           else if (strpos($message, 'Sorry, it seems the coupon') !== false) {
                $message = "";//empty error string

            }
           else if (strpos($message, 'Sorry, this coupon is not applicable to your cart contents') !== false) {
                $message = "Sorry, the discount is not applicable to your cart contents"; //updated error string

            }
    ?> 
        <li><?php echo wp_kses_post( $message ); ?></li>
    <?php
    break;
     endforeach; ?>
</ul>

答案 1 :(得分:1)

我知道这是一个旧线程,但是我想我已经解决了优惠券错误消息的解决方法。

在我的商店中,我使用WooCommerce智能优惠券,该优惠券允许将优惠券作为礼品卡出售。我不希望人们能够使用礼品卡购买礼品卡,因此我已将礼品卡类别添加到了优惠券使用限制的排除类别列表中。

无论如何,如果购物车中有礼品卡时有人尝试使用礼品卡优惠券代码,我想更改错误消息。这是我使用的代码:

function filter_woocommerce_coupon_error( $err, $err_code, $instance ) {

    if ( $err_code == '114' ) {

        global $woocommerce;                
        $categories = $instance->get_excluded_product_categories();

        if ( in_array( '15', $categories ) ) {

            $err = sprintf( __( 'Sorry, you cannot use a Gift Card to purchase another Gift Card.' ) );

        }
    }   

    return $err;

};

add_filter( 'woocommerce_coupon_error', 'filter_woocommerce_coupon_error', 10, 3 );

可以在文件$err_code中找到特定错误消息的woocommerce/includes/class-wc-coupon.php

就我而言,我想编辑错误代码为114(E_WC_COUPON_EXCLUDED_CATEGORIES)的错误消息。我还希望仅在购物车中的礼品卡触发114错误时显示我的自定义消息,而不是每114错误都出现。为了解决这个问题,我添加了if ( in_array( '15', $categories ) )。这样做的目的是检查错误消息是否由类别15中的产品触发了(这是我商店的礼品卡类别。将15更改为所使用的类别)。

$instance变量是WooCommerce用于将购物车/优惠券的详细信息传递回该函数的

我对编码非常陌生,因此,如果我的代码和解释不理想,很抱歉,但是它确实对我有用。我将其添加到functions.php中。

答案 2 :(得分:0)

所以问题的症结在于 - 如何自定义WooCommerce优惠券消息?

我有半个答案 - 我使用&#34; woocommerce_coupon_message&#34;定制了优惠券消息(绿色盒装消息)。过滤。但是我还没有能够使用&#34; woocommerce_coupon_error&#34;来获取优惠券错误消息(红色框内的消息)。过滤。

我尝试过基于类WC_Cart的几种不同方法的条件语句,但无济于事。我似乎无法拦截&#34; (然后自定义)错误消息,然后再打印出来。如果某人有优惠券错误的解决方案,我很乐意听到它。

无论如何......下面的函数被挂钩到&#34; woocommerce_before_cart&#34; &安培; &#34; woocommerce_before_checkout_form&#34;动作,因此该功能适用​​于任一页面。

它显然可以自定义,但我的示例基本上测试有效的优惠券,然后您可以更改消息或不返回任何内容。您还可以测试其他条件,以提出各种自定义通知!比修改模板文件好多了! : - )

add_action( 'woocommerce_before_cart', 'custom_coupon_messages' );
add_action( 'woocommerce_before_checkout_form', 'custom_coupon_messages' );
function custom_coupon_messages() {
    global $woocommerce;

    //Set coupon codes.
    $coupon_code = 'Bigly-Yuge';

    //Set coupon objects.
    $coupon_test = new WC_Coupon( 'Bigly-Yuge' );

    //Get the cart subtotal. Should return as a Double.
    $cart_subtotal = WC()->cart->subtotal;

    //If coupon test is passed add coupon.
    if ( $coupon_test->is_valid() && $woocommerce->cart->has_discount( $coupon_code ) ) {
        //Filter the coupon success message to display a custom message.
        add_filter( 'woocommerce_coupon_message', 'filter_woocommerce_coupon_message', 10, 3 );
        function filter_woocommerce_coupon_message( $msg, $msg_code, $instance ) {
            //Set a custom coupon message.
            $msg_code = 'case self::WC_COUPON_SUCCESS';
            $msg = __( 'You saved BIGLY YUGE!', 'woocommerce' );

            return $msg;
            return $msg_code;

            //Or return nothing (no message will be displayed - comment out the above/uncomment below).
            // return '';
        };
        //Print the above notice to screen.
        wc_print_notices();
    }
    elseif ( $cart_subtotal > 499 ) {
        //Print a notice (the blue boxed one)
        wc_print_notice( 'Spend $500 to qualify for the BIGLY YUGE discount!!!', 'notice' );
    }
}