Как добавить текст или HTML на страницу «Заказ принят»

В этом уроке я покажу вам несколько способов, как вы сможете добавить какой-нибудь произвольный текст или HTML-код на страницу «Спасибо» в WooCommerce.

И прежде, чем мы приступим, я бы хотел порекомендовать вам свой видеокурс по WooCommerce, который доступен по этой ссылке.

Начнём вот с такого нехитрого примера:

Произвольное сообщение на странице Спасибо в WooCommerce
Этот текст мы добавили при помощи хука woocommerce_before_thankyou в теме Storefront, готовый код чуть ниже.

Для того, чтобы добавить текст как на скриншоте, вы можете использовать код:

add_action( 'woocommerce_before_thankyou', 'truemisha_before_thankyou', 25 );
 
function truemisha_before_thankyou( $order_id ) {
	echo '<h2>20% на следующую покупку!</h2>';
	echo '<p>Мы благодарим вас за покупку и поэтому дарим вам промокод "<strong>PROMO20</strong>" на получение 20% скидки на вашу следующий заказ!</p>';
}

А вот и полный набор хуков изменения и добавления текста на странице «Заказ принят»:

  • woocommerce_before_thankyou – ну этот мы и использовали с вами в примере – позволяет добавить текст или HTML прямо в самом начале страницы «Спасибо», сразу после заголовка.
  • woocommerce_thankyou – то же самое, только в самом конце странице.
  • woocommerce_thankyou_ПЛАТЁЖНЫЙ ШЛЮЗ, например woocommerce_thankyou_paypal – позволяет вывести что-либо в конце страницы «Спасибо» в зависимости от используемого метода оплаты покупателем, как узнать ярлык метода оплаты вы можете найти в этом уроке.

Каждый из перечисленных выше экшн-хуков имеет один и тот же параметр – $order_id (ID заказа).

Как изменить или удалить текст «Спасибо, ваш заказ был принят»

Ещё на самом первом скриншоте этого урока вы могли заметить, что сразу после нашего добавленного текста есть ещё какая-то строчка «Спасибо, ваш заказ был принят», так вот, это автоматический текст WooCommerce, который был в шаблоне, но благодаря фильтр-хуку woocommerce_thankyou_order_received_text мы можем изменить его или удалить.

Меняем текст:

add_filter( 'woocommerce_thankyou_order_received_text', 'truemisha_thank_you_text', 25 );
 
function truemisha_thank_you_text( $order ) { // объект заказа доступен внутри
	return 'Спс!';
}

Если хотите удалить, то можете просто возвратить пустую стркоу, но к сожалению оборачивающие этот текст теги <p> никуда не денутся, возможно придётся применить CSS.

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 2

  • Андрей 21 августа 2020 #

    Спасибо Михаил за ваш труд. Но у меня возник вопрос. Как сделать автоматическую генерацию одноразового промокода, со вставкой на страницу "Спасибо"?

  • Алексей 26 августа 2020 #

    Хочу задать вопрос.
    У меня на сайте работает сниппет, который преобразует, суммирует, сниженную цену товаров "sale_price" и выдает в корзине и в чекауте сообщение: Вы ссэконмили столько-то. Все хорошо, но далее, уже на странице "Thanl you" когда заказ принят и обработан в деталях ордера цена отображается уже сниженная без упоминания и без сообщения об экономии. Таким образом, клиент получает инвойс на почту, где в деталях платежа не отображается экономия. После изучения темы и попытки разобраться в этом, стало понятно, что woocomerce в деталях платежа отображает скидку только в случае применения купона, а вот случае сниженной цены, такого не происходит, и это странно. Автоматическое применение купонов делать не хочу, так как нет там возможности показать клиенту сразу, что цена снижена. В общем, бьюсь долго и никак не могу вывести в деталях платежа и в инвойсе, информацию о ссэкономленных средствах.
    Собственно вопрос, можно ли решить ту проблему? И каким-то образом вывести информацию "sale_price" или "sale_price_total" об экономии в деталях платежа и инвойсе?

    Вот сниппет:

    function expert_wc_discount_total() {
     
        global $woocommerce;
     
        $cart_subtotal = $woocommerce->cart->cart_contents;
     
        $discount_total = 0;
     
      foreach ($woocommerce->cart->cart_contents as $product_data) {
     
            if ($product_data['variation_id'] > 0) {
                $product = wc_get_product( $product_data['variation_id'] );
            } else {
                $product = wc_get_product( $product_data['product_id'] );
            }
     
            if ( !empty($product->sale_price) ) {
            $discount = ($product->regular_price - $product->sale_price) * $product_data['quantity'];
            $discount_total += $discount;
            }
     
        }
     
        if ( $discount_total > 0 ) {
        echo '<tr class="cart-discount">
        <th>'. __( 'Ahorro:', 'woocommerce' ) .'</th>
        <td data-title=" '. __( 'Ahorro:', 'woocommerce' ) .' ">'
        . wc_price($discount_total+$woocommerce->cart->discount_cart) .'</td>
        </tr>';
        }
    }
     
    add_action( 'woocommerce_cart_totals_before_order_total', 'expert_wc_discount_total');
    add_action( 'woocommerce_review_order_before_order_total', 'expert_wc_discount_total');

    Спасибо.

    P.S. WordPress 5.5
    Woocommerce 4.4.1
    Для инвойсов использую плагин "WooCommerce PDF Invoices & Packing Slips" Версия: 2.6.0
    https://es.wordpress.org/plugins/woocommerce-pdf-invoices-packing-slips/

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.