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" с каждым методом оплаты.

Есть идеи, что не так и как я могу заставить это работать?

Спасибо

1 ответ

Решение

Есть несколько мелочей, которые нужно изменить (например, метод мета-оплаты - это массив):

// (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+

Другие вопросы по тегам