WooCommerce добавляет пользовательский контент электронной почты на основе способа оплаты и способа доставки
Я пытаюсь добавить другой контент в уведомления о выполненных заказах woocommerce по электронной почте на основе комбинаций способов оплаты и способа доставки.
Мой код до сих пор:
// completed order email instructions
function my_completed_order_email_instructions( $order, $sent_to_admin, $plain_text, $email ) {
if (( get_post_meta($order->id, '_payment_method', true) == 'cod' ) && ( get_post_meta($order->id, '_shipping_method', true) == 'local pickup' )){
echo "something1";
}
elseif (( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ( get_post_meta($order->id, '_shipping_method', true) == 'local pickup' )){
echo "something2";
}
else {
echo "something3";
}}
Часть оплаты работает (я получаю правильный контент "что-то 1" для "что-то 3"), но если я добавлю условие &&доставки, я получу "что-то 3" при каждом способе оплаты.
Есть идеи, что не так и как я могу заставить это работать?
Спасибо
4
Author: LoicTheAztec, 2017-07-03
1 answers
Есть несколько мелочей, которые нужно изменить (например, метод оплаты post meta - это массив):
// (Added this missing hook in your code)
add_action( 'woocommerce_email_order_details', 'my_completed_order_email_instructions', 10, 4 );
function my_completed_order_email_instructions( $order, $sent_to_admin, $plain_text, $email ) {
// Only for "Customer Completed Order" email notification
if( 'customer_completed_order' != $email->id ) return;
// Comptibility With WC 3.0+
if ( method_exists( $order, 'get_id' ) ) {
$order_id = $order->get_id();
} else {
$order_id = $order->id;
}
//$order->has_shipping_method('')
$payment_method = get_post_meta($order_id, '_payment_method', true);
$shipping_method_arr = get_post_meta($order_id, '_shipping_method', false); // an array
$method_id = explode( ':', $shipping_method_arr[0][0] );
$method_id = $method_id[0]; // We get the slug type method
if ( 'cod' == $payment_method && 'local_pickup' == $method_id ){
echo "something1";
} elseif ( 'bacs' == $payment_method && 'local_pickup' == $method_id ){
echo "something2";
} else {
echo "something3";
}
}
Код входит в function.php файл вашей активной дочерней темы (или темы) или также в любом файле плагина.
Этот код протестирован и работает с WooCommerce версии 2.6.x и 3+
4
Author: LoicTheAztec, 2017-07-30 14:30:26