Условное пользовательское уведомление о новом заказе Woocommerce по электронной почте для разных получателей

Хорошо, у меня был вопрос от клиента, который не кажется невозможным, но правильно настроить условия для меня проблема. Вот что происходит и что мне нужно. Я действительно хотел бы, чтобы это было функцией возможного.

Магазин имеет иерархию пользователей. Есть 2 суперадминистратора (ID: admin), 5x администраторов (ID: admin2), 15x клиентов банка (ID: банки) и 2x клиента недвижимости (ID: недвижимость). Я уже настроил пользовательских пользователей с идентификаторами. Нет товаров с ценами. Все счета выставляются по электронной почте с order_info. Все оплачивается позже на дому. Так что сайт действительно полагается на электронную почту.

  1. Если клиенты банка 15x размещают новый_заказ, эти новые_заказы должны отправить счет по электронной почте администраторам 5x.
  2. Если клиенты 2x Real Estate размещают новый_заказ, эти новые_заказы должны отправить счет по электронной почте администраторам 5x.
  3. Если 5x администраторы размещают новый_заказ, эти новые_заказы должны отправить счет по электронной почте 2x суперадминистраторам.

Я не лучший с php, и то, что у меня было раньше, было очень неряшливым.

Любая помощь?


person Jody B Roach    schedule 11.01.2018    source источник
comment
Вы можете подключить функцию на месте заказа, которая будет отправлять электронную почту на основе идентификатора пользователя, полученного из заказа.   -  person Khushboo    schedule 11.01.2018


Ответы (2)


Вы можете использовать хук wc следующим образом в functions.php filr

add_action('woocommerce_new_order', 'send_email_to_admin', 1, 1); function send_email_to_admin($order_id) { // используем идентификатор заказа, чтобы найти идентификатор пользователя и отправить электронное письмо }

person Khushboo    schedule 11.01.2018

Использование пользовательской функции, подключенной к woocommerce_thankyou хуку действия, позволит вам создавать условные уведомления по электронной почте на основе ролей пользователей и нескольких настраиваемых получателей.

Вам нужно будет заменить электронную почту администраторов и суперадминистраторов в этой функции.

Вам также нужно будет проверить, что роли пользователей совпадают в 3 операторах if... Идентификатор для недвижимости не может иметь пробела и вместо этого должен быть: 'real_estate'

При этом будут отправляться уведомления по электронной почте для заказов со статусом «приостановлено», «ожидание», «в обработке» или «завершено»...

Как только это пользовательское электронное письмо будет запущено, для заказа будет установлено пользовательское поле '_custom_emails_sent'.

Вот код:

add_action( 'woocommerce_thankyou', 'custom_new_order_email_notifications', 10, 1 );
function custom_new_order_email_notifications( $order_id ){
    // If Custom Emails already sent we exit
    if( get_post_meta( $order_id, '_custom_emails_sent', true ) ) return;

    $targeted_statuses = array( 'wc-on-hold', 'wc-pending', 'wc-processing', 'wc-completed' );
    $order_status = get_post_status( $order_id );

    // Only for the correct order statuses; If not we exit
    if( ! in_array( $order_status, $targeted_statuses ) ) return;

    // HERE (below) replace super admins and admins REAL emails
    $super_admin_emails = array( 
        '[email protected]', '[email protected]' );
    $admin_emails = array(
        '[email protected]', '[email protected]',
        '[email protected]', '[email protected]', '[email protected]' );

    // Get the user of the order
    $user_id = get_post_meta( $order_id, '_customer_user', true );
    $user = get_userdata( $user_id );

    $recipient = '';

    // 1. Bank Customers user role
    if( in_array('banks', $user->roles) ){
        $recipients = implode(',', $admin_emails);
    }

    // 2. Real estate Customers user role
    if( in_array('real_estate', $user->roles) ){
        $recipients = implode(',', $admin_emails);
    }

    // 3. Admins Customers user role
    if( in_array('admin2', $user->roles) ){
        $recipients = implode(',', $admin_emails);
    }

    // Sending new order email notification to the targeted recipients
    if( '' != $recipients ){
        $mailer = WC()->mailer()->get_emails();
        $mailer['WC_Email_New_Order']->recipient = $recipients;
        $mailer['WC_Email_New_Order']->trigger( $order_id ); // sending

        // We set a custom field that will avoid repetitive sends
        update_post_meta( $order_id, '_custom_emails_sent', '1' );
    }
}

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

Проверено и работает

person LoicTheAztec    schedule 11.01.2018