使用add_filter自定义WooCommerce通知



我正在尝试自定义WooCommerce通知。这是我要替换的通知:

wc_add_notice( sprintf( __( '%s has been removed from your cart because it can no longer be purchased. Please contact us if you need assistance.', 'woocommerce' ), $_product->get_title() ), 'error' )

基于此有用的答案WooCommerce通知消息,我该如何编辑?,我想到了:

function my_woocommerce_membership_notice( $error ) {
    if ( '%s has been removed from your cart because it can no longer be purchased. Please contact us if you need assistance.' == $error ) {
        $error = '%s has been removed from your cart because you added a membership product. Please complete the membership purchase first.';
    }
    return $error;
}
add_filter( 'woocommerce_add_error', 'my_woocommerce_membership_notice' );

这会导致http500错误,我无法确定为什么。

谢谢!

在互联网中搜索这个问题,似乎很多人都有类似的错误问题试图使用类似的事物……

此错误消息在中设置在中/class-wc-cart.php 在第238行。

查看中的WC 2.6源代码> include/wc-notice-functions.php wc_add_notice()正在处理2个变量:$message$notice_type

所以在这里 $消息变量我们有:
sprintf( __( '%s has been removed from your cart because it can no longer be purchased. Please contact us if you need assistance.', 'woocommerce' ), $_product->get_title() )
而不是:
'%s has been removed from your cart because it can no longer be purchased. Please contact us if you need assistance.'

%s sprintf()使用的字符串变量,由 $_product->get_title() 值代替。但是您不能再在这里使用 %s
这可能是您错误问题的原因。而不是'%s has been…尝试'An item has been…

然后基于此线程,使用条件内的strpos() PHP功能,我毫无保证地编译了此片段:

function my_woocommerce_membership_notice( $message ) {
    if (strpos($message,'has been removed from your cart because it can no longer be purchased') !== false) {
        $message = 'An item has been removed from your cart because you added a membership product. Please complete the membership purchase first.';
    }
    return $message;
}
add_filter( 'woocommerce_add_error', 'my_woocommerce_membership_notice' );

最新更新