php 根据Woocommerce订单中的付款方式显示自定义文本

pu82cl6c  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(115)

在Woocommerce中,我试图根据客户在提交订单时选择的付款方式显示一条消息。我有两种付款方式,BACS支票,我需要为每种方式显示不同的消息。
I just found that you can put a message on the page of thankyou. php
但我需要此自定义消息出现在订单页面上,并添加到PDF发票 (我使用WooCommerce PDF发票插件)

8hhllhi2

8hhllhi21#

下面将首先将基于支付网关的自定义消息保存为自定义订单Meta数据(自定义字段).这将使您能够更轻松地在PDF发票中设置此订单自定义字段 (请参阅末尾的注解)

// Save payment message as order item meta data
add_filter( 'woocommerce_checkout_create_order', 'save_custom_message_based_on_payment', 10, 2 );
function save_custom_message_based_on_payment( $order, $data ){
    if ( $payment_method = $order->get_payment_method() ) {
        if ( $payment_method === 'cheque' ) {
            // For Cheque
            $message = __("My custom message for Cheque payment", "woocommerce");
        } elseif ( $payment_method === 'bacs' ) {
            // Bank wire
            $message = __("My custom message for Bank wire payment", "woocommerce");
        }
        // save message as custom order meta data (custom field value)
        if ( isset($message) )
            $order->update_meta_data( '_payment_message', $message );
    }
}

然后,下面将显示此自定义消息在订单接收页面,查看订单页面和电子邮件通知,使用挂钩 (不改变模板)

// On "Order received" page (add payment message)
add_filter( 'woocommerce_thankyou_order_received_text', 'thankyou_custom_payment_message', 10, 2 );
function thankyou_custom_payment_message( $text, $order ) {
    if ( ! is_a($order, 'WC_Order') ) return; 
    if ( $message = $order->get_meta( '_payment_message' ) ) {
        $text .= '<br><div class="payment-message"><p>' . $message . '</p></div>' ;
    }
    return $text;
}

// On "Order view" page (add payment message)
add_action( 'woocommerce_view_order', 'view_order_custom_payment_message', 5, 1 );
function view_order_custom_payment_message( $order_id ){
    if ( $message = get_post_meta( $order_id, '_payment_message', true ) ) {
        echo '<div class="payment-message"><p>' . $message . '</p></div>' ;
    }
}

// Email notifications display (optional)
add_action( 'woocommerce_email_order_details', 'add_order_instruction_email', 10, 4 );
function add_order_instruction_email( $order, $sent_to_admin, $plain_text, $email ) {
    if( $sent_to_admin )
        return;
    elseif( $text = $order->get_meta('_payment_message') )
        echo '<div style="border:2px solid #e4e4e4;padding:5px;margin-bottom:12px;"><strong>Note:</span></strong> '.$text.'</div>';
}

代码在您的活动子主题(或主题)的function.php文件中。测试和作品。

PDF发票备注
stackOverFlow上的规则是一次一个问题,所以一问一答,避免你的问题因为太宽泛而被封闭。

由于Woocommerce有许多不同的PDF发票插件,您将有to read the developer documentation用于Woocommerce PDF发票插件,以显示PDF发票中的自定义消息。

相关问题