Как отправить электронное письмо с пользовательским контентом для пользовательского статуса заказа в WooCommerce - PullRequest
0 голосов
/ 22 мая 2019

Я использую WooCommerce для своего сайта.Мне нужно добавить пользовательский статус заказа и отправить пользовательский контент по электронной почте для пользовательского статуса. Я использовал следующий код и создал свой собственный статус заказа под названием «Отправлено», но моя главная проблема заключается в том, что когда я изменяю статус заказа на «Отправлено», электронное письмо отправляется сЗавершенный заказ контента.как я могу иметь свой собственный контент в статусе заказа?

function register_brethren_order_statuses(){
    register_post_status( 'wc-shipped', array(
        'label' => 'Shipped',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop( 'shipped <span class="count">(%s)</span>', 'Shipped <span class="count">(%s)</span>' )) );
} 

add_action( 'init', 'register_brethren_order_statuses' );


// Add Status to WooCommerce Status List
function add_brethren_order_statuses( $order_statuses ){
    $new_order_statuses = array();
    // Add New Status After Processing
    foreach ( $order_statuses as $key => $status ){
        $new_order_statuses[ $key ] = $status;
        if ( 'wc-processing' === $key ){
            $new_order_statuses['wc-shipped'] = 'Shipped';
        }
    }
    return $new_order_statuses;
}


add_filter( 'wc_order_statuses','add_brethren_order_statuses' );

add_action('woocommerce_order_status_shipped','bbloomer_status_custom_notification', 20, 2 );

function bbloomer_status_custom_notification( $order_id, $order ) {
    $heading = 'Shipped';
    $subject = 'Shipped';
    // Get WooCommerce email objects
    $mailer = WC()->mailer()->get_emails();

    $mailer['WC_Email_Customer_Completed_Order']->heading = $heading;
    $mailer['WC_Email_Customer_Completed_Order']->settings['heading'] = $heading;
    $mailer['WC_Email_Customer_Completed_Order']->subject = $subject;
    $mailer['WC_Email_Customer_Completed_Order']->settings['subject'] = $subject;

    // Send the email with custom heading & subject
    if (  $order->get_status() == "shipped" ) {
        $mailer['WC_Email_Customer_Completed_Order']->trigger( $order_id );
    }
}

add_action( 'woocommerce_email_before_order_table', 
'bbloomer_add_content_specific_email', 20, 4 );
function bbloomer_add_content_specific_email( $order, $sent_to_admin, 
$plain_text, $email ) {
    if (  $order->get_status() == "shipped" ) {
        echo '<h2 class="email-upsell-title">Shipped order</h2>Hi your order is shipping by post<p class="email-upsell-p"></p>';
    }
}

1 Ответ

0 голосов
/ 22 мая 2019

По этому вопросу кажется, что Customer Completed Order электронная почта выполняется.Таким образом, существует два способа добавления собственного пользовательского содержимого.

1) Переопределив шаблон электронной почты завершенного заказа клиента из плагина WooCommerce в папку темы и выполнив необходимые изменения в соответствии с требованием.

2) Использование хуков, связанных с форматированием таблицы электронной почты.Ниже приведен фрагмент кода, в котором перед телом таблицы будет добавлено содержимое шаблона электронной почты с идентификатором customer_completed_order и статусом shipped

<?php
add_action( 'woocommerce_email_before_order_table', 'bbloomer_add_content_specific_email', 20, 4 );

function bbloomer_add_content_specific_email( $order, $sent_to_admin, $plain_text, $email ) {
   if ( $email->id == 'customer_completed_order' && $order->get_status() == "shipped") { /*As customer completed order is getting executed and need to modify for the specific email*/
      echo '<h2 class="email-upsell-title">Lorem Ipsum sit Amet</p>';
   }
}
?>

Возможные идентификаторы шаблона электронной почты, которые можно проверить с помощью

<?php
if ( $email->id == 'cancelled_order' ) {}
if ( $email->id == 'customer_completed_order' ) {}
if ( $email->id == 'customer_invoice' ) {}
if ( $email->id == 'customer_new_account' ) {}
if ( $email->id == 'customer_note' ) {}
if ( $email->id == 'customer_on_hold_order' ) {}
if ( $email->id == 'customer_refunded_order' ) {}
if ( $email->id == 'customer_reset_password' ) {}
if ( $email->id == 'failed_order' ) {}
if ( $email->id == 'new_order' ) {}
?>

Надеюсь, вы сможете поиграть с этим материалом и добиться успеха наверняка.

...