Отображение пользовательского уведомления об успешном завершении после размещения заказа в WooCommerce

#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. Хорошо, я приму ваш ответ. Извините, что беспокою вас так сильно