Отправить уведомление по электронной почте для заказов наложенным платежом со статусом удержания в Woocommerce - PullRequest
0 голосов
/ 14 мая 2018

Я использую WordPress 4.9.5 и WooCommerce 3.3.5, я хотел бы, чтобы следующие способы оплаты, статус заказа и почта клиента были запущены.

  • Paypal = выполнено + электронное письмо с подтверждением оплаты
  • BACS = на удержании + электронная почта на удержании
  • ХПК = на удержании + электронная почта на удержании

На данный момент все работает, за исключением того, что при получении наложенного платежа не получен «заказ по удержанию». Статус заказа установлен как «на удержании», но электронное сообщение об удержании не отправлено!

Это код, который я использую:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
    if ( ! $order_id )
        return;

    // Get an instance of the WC_Product object
    $order = wc_get_order( $order_id );

    // On hold status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
        $order->update_status( 'on-hold' );
    // Updated status to "completed" for paid Orders with all others payment methods
    } else {
        $order->update_status( 'completed' );
    }
}

function unhook_new_order_processing_emails( $email_class ) {
        // Turn off pending to processing for now
        remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
        // Turn it back on but send the on-hold email
        add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_On_Hold_Order'], 'trigger' ) );
}

1 Ответ

0 голосов
/ 15 мая 2018

Сначала в вашей второй функции отсутствует ловушка ... Это должно быть:

add_action( 'woocommerce_email', 'unhook_new_order_processing_emails' );
function unhook_new_order_processing_emails( $email_class ) {
    // Turn off pending to processing for now
    remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
    // Turn it back on but send the on-hold email
    add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_On_Hold_Order'], 'trigger' ) );
}

Официальная документация: Отцепить / удалить электронные письма WooCommerce


Затем, чтобы вызвать уведомление «В ожидании» для заказов «Оплата наложенным платежом» , вы можете попробовать следующее:

// Trigger "On hold" notification for COD orders
add_action('woocommerce_order_status_on-hold', 'email_on_hold_notification_for_cod', 2, 20 );
function email_on_hold_notification_for_cod( $order_id, $order ) {
    if( $order->get_payment_method() == 'cod' )
        WC()->mailer()->get_emails()['WC_Email_Customer_On_Hold_Order']->trigger( $order_id );
}

Код помещается в файл function.php вашей активной дочерней темы (или активнойтема) ..

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