Я пытаюсь настроить уведомление 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 Notice, как мне их редактировать?, Я придумал это:
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, и я не могу понять, почему именно.
Спасибо!
При поиске этого вопроса в Интернете выясняется, что многие люди сталкиваются с серьезными схожими ошибками, пытаясь использовать похожие вещи …
Это сообщение об ошибке устанавливается в включает / класс-WC-cart.php по линии 238.
Глядя на исходный код WC версии 2.6 в включает / туалет-уведомление-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' );
Других решений пока нет …