Как получить идентификатор заказа в хуке woocommerce_email_headers

Я пытаюсь установить адрес электронной почты, когда есть новый заказ. И я сохранил new email в wp_postmeta.

Как получить $order_id при использовании woocommerce_email_headers?

Мне нужно получить order_id, чтобы использовать его с функцией get_post_meta().

Вот мой код:

function techie_custom_wooemail_headers( $headers, $object) {

    $email = get_post_meta( $order_id, '_approver_email', true );

    // Replace the emails below to your desire email
    $emails = array('[email protected]', $email);


    switch($object) {
        case 'new_order':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;
        case 'customer_processing_order':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;
        case 'customer_completed_order':
        case 'customer_invoice':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;

        default:
    }

    return $headers;
}

add_filter( 'woocommerce_email_headers', 'techie_custom_wooemail_headers', 10, 2);

Как вернуть данные?

Спасибо.


person Capslock10    schedule 28.09.2016    source источник


Ответы (2)


Обновлено: Добавлена ​​совместимость с Woocommerce версии 3+.

Я сделал несколько тестов, пытаясь вывести необработанные данные из объекта $order, но безуспешно. После некоторых других тестов я получил правильный идентификатор заказа. Я использовал приведенный ниже код для своего теста, чтобы быть уверенным. Замените значение $your_email своим адресом электронной почты. Затем вы получите электронное письмо с идентификатором заказа в названии заголовка:

function testing_hook_headers( $headers, $id, $order ) {
    // The order ID | Compatibility with WC version +3
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

    $your_email = '<[email protected]>';
    $headers = "To: Order Num $order_id $your_email";
    return $headers;
}
add_filter( 'woocommerce_email_headers', 'testing_hook_headers', 10, 3);

Итак, вот ваш код:

function techie_custom_wooemail_headers( $headers, $email_id, $order ) {

    // The order ID | Compatibility with WC version +3
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

    $email = get_post_meta( $order_id, '_approver_email', true );

    // Replace the emails below to your desire email
    $emails = array('[email protected]', $email);

    switch( $email_id ) {
        case 'new_order':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;
        case 'customer_processing_order':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;
        case 'customer_completed_order':
        case 'customer_invoice':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;

        default:
    }

    return $headers;
}

add_filter( 'woocommerce_email_headers', 'techie_custom_wooemail_headers', 10, 3);

Я не проверял ваш код, так как он особенный, но у вас есть правильный способ получить идентификатор заказа.

person LoicTheAztec    schedule 28.09.2016

В WooCommerce версии 2.3 и выше изменилось количество параметров, передаваемых в фильтр

function techie_custom_wooemail_headers( $headers, $id, $object) {

    $email = get_post_meta( $order_id, '_approver_email', true );

    // Replace the emails below to your desire email
    $emails = array('[email protected]', $email);


    switch($id) {
        case 'new_order':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;
        case 'customer_processing_order':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;
        case 'customer_completed_order':
        case 'customer_invoice':
            $headers .= 'Bcc: ' . implode(',', $emails) . "\r\n";
            break;

        default:
    }

    return $headers;
}

add_filter( 'woocommerce_email_headers', 'techie_custom_wooemail_headers', 10, 3);

$object - указывает, что это электронное письмо предназначено, например, для клиента, продукта или электронной почты.

попробуйте var_dump($object); exit; внутри обратного вызова фильтра.

person GKS    schedule 28.09.2016
comment
Это значит, что у $object может быть $order_id? - person Capslock10; 28.09.2016