Отображать пользовательский текст на основе способов оплаты в заказах Woocommerce - PullRequest
0 голосов
/ 19 марта 2019

В Woocommerce я пытаюсь отобразить сообщение в зависимости от способа оплаты, который клиент выбирает при отправке заказа. У меня есть 2 способа оплаты, BACS и Чек , и мне нужно отобразить разные сообщения для каждого.

Я только что обнаружил, что вы можете поместить сообщение на странице thankyou.php

но мне нужно, чтобы это пользовательское сообщение появилось на странице заказа, а также было добавлено к счету pdf (я использую плагин WooCommerce PDF Invoices) .

1 Ответ

1 голос
/ 20 марта 2019

Следующее сначала сохранит пользовательское сообщение, основанное на платежных шлюзах, как метаданные пользовательского заказа (настраиваемые поля)… Это позволит вам намного проще установить это пользовательское поле заказа в вашем 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 ( $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 - это один вопрос за один раз , поэтому для одного вопроса один ответ, чтобы избежать закрытия вопроса как слишком широкого.

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

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