Отправлять уведомление по электронной почте при изменении статуса индивидуального заказа в WooCommerce

Я создал собственный статус заказа в моем WooCommerce под названием Обратный заказ (wc-backorder):

/**
     * Add custom status to order list
*/
    add_action( 'init', 'register_custom_post_status', 10 );
    function register_custom_post_status() {
        register_post_status( 'wc-backorder', array(
            'label'                     => _x( 'Back Order', 'Order status', 'woocommerce' ),
            'public'                    => true,
            'exclude_from_search'       => false,
            'show_in_admin_all_list'    => true,
            'show_in_admin_status_list' => true,
            'label_count'               => _n_noop( 'Back Order <span class="count">(%s)</span>', 'Back Order <span class="count">(%s)</span>', 'woocommerce' )
        ) );

}

/**
 * Add custom status to order page drop down
 */
add_filter( 'wc_order_statuses', 'custom_wc_order_statuses' );
function custom_wc_order_statuses( $order_statuses ) {
    $order_statuses['wc-backorder'] = _x( 'Back Order', 'Order status', 'woocommerce' );
    return $order_statuses;
}

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

Эта ссылка содержит исходный код моего подключаемого модуля код и код functions.php.

Я добавил ловушку в function.php:

add_action( 'woocommerce_order_status_wc-order-confirmed', array( WC(), 'send_transactional_email' ), 10, 10 );

function so_27112461_woocommerce_email_actions( $actions ){
    $actions[] = 'woocommerce_order_status_wc-order-confirmed';
    return $actions;
}
add_filter( 'woocommerce_email_actions', 'so_27112461_woocommerce_email_actions' );

Ничего не происходит, когда заказ переходит в статус «Обратный заказ».

Любые идеи?

Я перепробовал множество разных хуков, но мне не удалось запустить функцию триггера.

Я использую последние версии WordPress и WooCommerce (3.0+)

Спасибо


person sarun    schedule 01.05.2017    source источник


Ответы (2)


- ИЗМЕНИТЬ / ОБНОВИТЬ -

Поскольку учебник по коду, который вы используете, действительно устарел (2013 г.) для этой новой мега-основной версии 3.0+, эта настраиваемая функция, подключенная к хуку действия woocommerce_order_status_changed, выполнит свою работу. Таким образом, вы сможете отправить индивидуальное уведомление об обработке по электронной почте, когда статус заказа изменится на ваш индивидуальный.

Вот этот рабочий и протестированный код для WC 3.0+:

add_action('woocommerce_order_status_changed', 'backorder_status_custom_notification', 10, 4);
function backorder_status_custom_notification( $order_id, $from_status, $to_status, $order ) {

   if( $order->has_status( 'backorder' )) {

        // Getting all WC_emails objects
        $email_notifications = WC()->mailer()->get_emails();

        // Customizing Heading and subject In the WC_email processing Order object
        $email_notifications['WC_Email_Customer_Processing_Order']->heading = __('Your processing Back order','woocommerce');
        $email_notifications['WC_Email_Customer_Processing_Order']->subject = 'Your {site_title} processing Back order receipt from {order_date}';

        // Sending the customized email
        $email_notifications['WC_Email_Customer_Processing_Order']->trigger( $order_id );
    }

}

Этот код находится в файле function.php вашей активной дочерней темы (или темы) или также в любом файле плагина.


Поскольку ваш индивидуальный статус - wc-backorder, но не wc-order-confirmed, вам просто нужно везде заменить wc-order-confirmed на wc-backorder.

Чтобы он заработал, вам нужно будет изменить две последние перехваченные функции следующим образом:

add_action( 'woocommerce_order_status_wc-backorder', array( WC(), 'send_transactional_email' ), 10, 1 );


add_filter( 'woocommerce_email_actions', 'filter_woocommerce_email_actions' );
function filter_woocommerce_email_actions( $actions ){
    $actions[] = 'woocommerce_order_status_wc-backorder';
    return $actions;
}

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

Это должно сработать (я не могу проверить это, так как нет кода вашего настраиваемого плагина).


Справочный исходный код: woocommerce_order_status_{$this->status_transition[to]} обработчик действия

person LoicTheAztec    schedule 01.05.2017
comment
Я добавил этот крючок, но при изменении статуса на обратный заказ электронная почта не попадает в клиент - person sarun; 01.05.2017
comment
@sarun Никто не может протестировать ваш код, потому что вы не даете его полностью. Вам необходимо добавить внешнюю ссылку на исходный код вашего плагина ... Также сообщите нам, какую версию WooCommerce вы используете. - person LoicTheAztec; 01.05.2017
comment
github.com/sarun007/custom-email-plugin/tree/master эта ссылка, содержащая мой код плагина и код functions.php - person sarun; 01.05.2017

add_action("woocommerce_order_status_changed", "my_custom_notification");

function my_custom_notification($order_id, $checkout=null) {
   global $woocommerce;
   $order = new WC_Order( $order_id );
   if($order->status === 'backorder' ) {
      // Create a mailer
      $mailer = $woocommerce->mailer();

      $message_body = __( 'Hello world!!!' );

      $message = $mailer->wrap_message(
        // Message head and message body.
        sprintf( __( 'Order %s received' ), $order->get_order_number() ), $message_body );

      // Cliente email, email subject and message.
     $mailer->send( $order->billing_email, sprintf( __( 'Order %s received' ), $order->get_order_number() ), $message );
     }

   }

Попробуй это

person mujuonly    schedule 01.05.2017
comment
как добавить в эту функцию верхний и нижний колонтитулы электронного письма - person sarun; 01.05.2017