我正在尝试自定义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' );