#php #wordpress #woocommerce #orders #notice
#php #wordpress #woocommerce #заказы #УВЕДОМЛЕНИЕ
Вопрос:
Мне нужно проверить на странице оформления заказа, прошел ли платеж успешно или нет, и отобразить сообщение: «Ваш платеж прошел успешно», а затем перенаправить на страницу благодарности (которая настраивается для каждого продукта с помощью плагина Woo Product Tools). Я пытался найти ссылки на документацию Woo, но пока безуспешно. Последний код, который у меня есть:
add_action( 'woocommerce_after_checkout_validation', 'message_after_payment' );
function message_after_payment(){
global $woocommerce;
$order = wc_get_order( $order_id );
if ( $order->has_status('processing') ){
wc_add_notice( __("Your payment has been successful", "test"), "success" );
}
}
Как этого можно достичь?
Ответ №1:
Вы не можете отобразить уведомление об успешном завершении на странице оформления заказа после отправки заказа (размещения заказа)… Вы можете сделать это на странице получения заказа (спасибо). Также в вашем коде $order_id
не определено…
Таким образом, вместо правильного хука woocommerce_before_thankyou
используется wc_print_notice()
функция:
add_action( 'woocommerce_before_thankyou', 'success_message_after_payment' );
function success_message_after_payment( $order_id ){
// Get the WC_Order Object
$order = wc_get_order( $order_id );
if ( $order->has_status('processing') ){
wc_print_notice( __("Your payment has been successful", "woocommerce"), "success" );
}
}
Ввод кода functions.php файл активной дочерней темы (или активной темы). Протестировано и работает.
Дополнение: отображение пользовательского HTML-сообщения вместо уведомления Woocommerce
Просто замените строку кода:
wc_print_notice( __("Your payment has been successful", "woocommerce"), "success" );
например, с помощью этого:
echo '<p class='cudtom-message"> . __("Your payment has been successful", "woocommerce"), "success" ) . '</p>';
Вы можете добавить свой собственный HTML-код по своему усмотрению вокруг текстового сообщения.
Комментарии:
1. Хорошо, и нет ли способа показать это сообщение с помощью другого метода, который не печатает уведомления??
2. Я имел в виду, если нет способа показать это сообщение на странице оформления заказа? Например, с другим хуком, чем ‘woocommerce_before_thankyou’?? Чтобы сообщение отображалось после нажатия пользователем кнопки «Оформить заказ» и до того, как произойдет перенаправление
3. О, хорошо. Итак, мой подход к использованию $order_id был неправильным. Как насчет перехватов, которые не используют $order_id . Я видел другие сообщения здесь, на SO и на Stackexchange, в которых говорится о woocommerce_checkout_order_processed и woocommerce_before_checkout_process, но документация по ним очень расплывчата
4. @andressanchez Никоим образом… Страница оформления заказа не обрабатывает это, как я уже сказал, данные публикуются и перенаправляются на страницу благодарности в процессе WooCommerce после подтверждения оплаты (за исключением наложенного платежа). Конец разговора.
5. Хорошо, я приму ваш ответ. Извините, что беспокою вас так сильно