Как получить идентификатор заказа в хуке 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('eee@hotmail.com', $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);
Как мне вернуть данные?
Благодарю.
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 = '<name@email.com>';
$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('eee@hotmail.com', $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);
Я не проверял ваш код, как он есть, но у вас есть правильный способ получить идентификатор заказа.
В версии 2.3 WooCommerce и выше они изменили количество параметров, передаваемых фильтру
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('eee@hotmail.com', $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;
обратный вызов внутри фильтра.