Настройка уведомления WooCommerce с помощью ловушки add_filter

Я пытаюсь настроить уведомление 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, и я не могу понять, почему именно.

Спасибо!

1

Решение

При поиске этого вопроса в Интернете выясняется, что многие люди сталкиваются с серьезными схожими ошибками, пытаясь использовать похожие вещи …

Это сообщение об ошибке устанавливается в включает / класс-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' );
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]