将订单变量中的自定义动态二维码图像添加到 Woocommerce 谢谢

问题描述 投票:0回答:1

我正在尝试在我的 Woocommerce 电子商店的thankyou.php 页面中添加一个img。我已经完成了将文件从 /plugins/woocommerce/... 移动到文件夹 /themes/... 的过程

您可以在下面找到thankyou.php 文件的代码。有必要这样做,因为我需要一些订单变量来生成img(总数和数字)。

<?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 wc_get_template( 'checkout/order-received.php', array( 'order' => $order ) ); ?>

        <ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">

            <li class="woocommerce-order-overview__order order">
                <?php esc_html_e( 'Order number:', 'woocommerce' ); ?>
                <strong><?php echo $order->get_order_number(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></strong>
            </li>

            <li class="woocommerce-order-overview__date date">
                <?php esc_html_e( 'Date:', 'woocommerce' ); ?>
                <strong><?php echo wc_format_datetime( $order->get_date_created() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></strong>
            </li>

            <?php if ( is_user_logged_in() && $order->get_user_id() === get_current_user_id() && $order->get_billing_email() ) : ?>
                <li class="woocommerce-order-overview__email email">
                    <?php esc_html_e( 'Email:', 'woocommerce' ); ?>
                    <strong><?php echo $order->get_billing_email(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></strong>
                </li>
            <?php endif; ?>

            <li class="woocommerce-order-overview__total total">
                <?php esc_html_e( 'Total:', 'woocommerce' ); ?>
                <strong><?php echo $order->get_formatted_order_total(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></strong>
            </li>

            <?php if ( $order->get_payment_method_title() ) : ?>
                <li class="woocommerce-order-overview__payment-method method">
                    <?php esc_html_e( 'Payment method:', 'woocommerce' ); ?>
                    <strong><?php echo wp_kses_post( $order->get_payment_method_title() ); ?></strong>
                </li>
            <?php endif; ?>
        </ul>
        
        <img 
            class="qrcodecz" 
            src="https://api.paylibo.com/paylibo/generator/czech/image?accountNumber=2202681982&amp;bankCode=2010&amp;amount=<?php echo $order->get_subtotal(); ?>&amp;currency=CZK&amp;vs=<?php echo $order->get_order_number() ?>&amp;message=svetvramu.cz&amp;size=200"
            alt="QR platba" 
        />

    <?php endif; ?>

    <?php do_action( 'woocommerce_thankyou_' . $order->get_payment_method(), $order->get_id() ); ?>
    <?php do_action( 'woocommerce_thankyou', $order->get_id() ); ?>

<?php else : ?>

    <?php wc_get_template( 'checkout/order-received.php', array( 'order' => false ) ); ?>

<?php endif; ?>

这个特定的代码是我试图生成的,但它不起作用。

<img 
    class="qrcodecz" 
    src="https://api.paylibo.com/paylibo/generator/czech/image?accountNumber=2202681982&amp;bankCode=2010&amp;amount=<?php echo $order->get_subtotal(); ?>&amp;currency=CZK&amp;vs=<?php echo $order->get_order_number() ?>&amp;message=svetvramu.cz&amp;size=200"
    alt="QR platba" 
/>

thankyou.page 没有变化(订单总数仍然相同)。我编辑的页面正确吗?我想是的,因为列表肯定是从这个文件生成的。

感谢您的任何提示!

php wordpress woocommerce qr-code orders
1个回答
0
投票

您不需要覆盖 checkout/thankyou.php 模板文件。相反,您可以使用以下修改后的代码:

add_action( 'woocommerce_thankyou', 'display_order_received_qr_code', 10, 1 );
function display_order_received_qr_code( $order_id ) { 
    $order = wc_get_order($order_id);

    printf('<img class="qrcodecz" alt="QR platba" src="%s" />', 
        add_query_arg( array(
            'accountNumber' => '2202681982',
            'bankCode'      => '2010',
            'amount'        => $order->get_subtotal(),
            'currency'      => 'CZK',
            'vs'            => $order->get_order_number(),
            'message'       => 'svetvramu.cz',
            'size'          => 200,
        ), 'https://api.paylibo.com/paylibo/generator/czech/image' ),
    );
}

代码位于活动子主题(或活动主题)的functions.php 文件中。已测试并有效。

在订单收到(谢谢)页面上,您将得到类似以下内容:

© www.soinside.com 2019 - 2024. All rights reserved.