Woocommerce (Checkout-Page) - замена контента после размещения заказа - PullRequest
1 голос
/ 16 апреля 2020

Этот вопрос относится к thankyou page.

Я создал свой собственный макет благодарности, и у него есть шорткод [custom-thankyou-054].

- Обычно, когда вы делаете заказ, на странице оформления заказа вам сообщают Thank you. Your order has been received. и некоторые детали вашего заказа.

Я не хочу показывать все эти детали. Я разработал простой, но более интерактивный макет и хочу использовать его вместо этого.

Интересно, есть ли для этого ловушка?

Я знаю ловушку для перенаправления на другую страницу после размещения заказ.

add_action( 'woocommerce_thankyou', 'bbloomer_redirectcustom');

function bbloomer_redirectcustom( $order_id ){
    $order = wc_get_order( $order_id );
    $url = 'https://yoursite.com/custom-url';
    if ( ! $order->has_status( 'failed' ) ) {
        wp_safe_redirect( $url );
        exit;
    }
}

К сожалению, это не мой случай. Я хотел, чтобы пользователь оставался на этом checkout page, но менял его содержимое только с помощью своего пользовательского макета после размещения заказа, что-то вроде:

add_action( '??????????', 'change_checkout_page_content_after_placing_order'); 
function change_checkout_page_content_after_placing_order( $order_id ){
 return do_shortcode('[custom-thankyou-054]');
}

это возможно?

1 Ответ

1 голос
/ 18 апреля 2020

Вы делаете это неправильно, но вы достаточно близко.

Не добавляйте элементы на страницу оформления заказа напрямую с Elementor. Поскольку вы просто хотите добавить элементы вверху и внизу формы оформления заказа, вы можете сделать это, используя хук woocommerce_before_checkout_form для верхней части формы оформления заказа и woocommerce_after_checkout_form для нижней части формы оформления заказа.

Если вы действительно хотите использовать Elementor для оформления элементов верхней и нижней части формы оформления заказа, то я предлагаю сделать это так, как вы создали свой шаблон спасибо, а затем использовать его шорткод.

Например, Вы создали шаблон, предназначенный для верхней и нижней части формы оформления заказа, а шорткод выглядит как [my-top-design] и [my-bottom-design]. Затем go на ваш function.php и выполните следующие действия.

/** This will add your template designed for the top of the checkout form **/
add_action('woocommerce_before_checkout_form', 'custom_top_checkout_form');
function custom_top_checkout_form(){
    echo do_shortcode('[my-top-design]');
    /**You can also insert an html tag here instead of the shortcode of your template..**/
    // echo '<h2>Some top elements...</h2>';
}

/** This will add your template designed for the bottom of the checkout form **/
add_action('woocommerce_after_checkout_form', 'custom_bottom_checkout_form');
function custom_bottom_checkout_form(){
    echo do_shortcode('[my-bottom-design]');
    /**You can also insert an html tag here instead of the shortcode of your template..**/
    // echo '<h2>Some bottom elements...</h2>';
}

После размещения заказа вся форма оформления заказа, включая верхний и нижний элементы, исчезнет и заменит ее страницей с благодарностью. .

Теперь, благодаря вашей странице спасибо, вы можете переопределить ее, используя Переопределение шаблона WooCommerce .

Скопируйте: / WP-содержание / плагины / WooCommerce / шаблоны / фотографии / большое спасибо. php. В вашей активной теме должно быть что-то вроде этого: /wp-content/themes/activetheme/woocommerce/checkout/thankyou.php

Затем отредактируйте thankyou.php и удалите ненужную информацию вместо вашего пользовательского шаблона благодарности, снова используя шорткод.

Это будет примерно так.

<?php
defined( 'ABSPATH' ) || exit;
?>

<div class="woocommerce-order">

    <?php if ( $order ) :

        do_action( 'woocommerce_before_thankyou', $order->get_id() ); ?>

        <?php if ( $order->has_status( 'failed' ) ) : ?>

            <p class="woocommerce-notice woocommerce-notice--error woocommerce-thankyou-order-failed"><?php esc_html_e( 'Unfortunately your order cannot be processed as the originating bank/merchant has declined your transaction. Please attempt your purchase again.', 'woocommerce' ); ?></p>

            <p class="woocommerce-notice woocommerce-notice--error woocommerce-thankyou-order-failed-actions">
                <a href="<?php echo esc_url( $order->get_checkout_payment_url() ); ?>" class="button pay"><?php esc_html_e( 'Pay', 'woocommerce' ); ?></a>
                <?php if ( is_user_logged_in() ) : ?>
                    <a href="<?php echo esc_url( wc_get_page_permalink( 'myaccount' ) ); ?>" class="button pay"><?php esc_html_e( 'My account', 'woocommerce' ); ?></a>
                <?php endif; ?>
            </p>

        <?php else : ?>
            <?php 
                //your custom template here...
                echo do_shortcode('[custom-thankyou-054]'); 
            ?>  
        <?php endif; ?>
    <?php else : ?>

        <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received"><?php echo apply_filters( 'woocommerce_thankyou_order_received_text', esc_html__( 'Thank you. Your order has been received.', 'woocommerce' ), null ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></p>

    <?php endif; ?>

</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...