Customize order item meta only for WooCommerce admin email notifications

生来就可爱ヽ(ⅴ<●) 提交于 2020-05-23 10:18:26

问题


I need to add custom taxonomy to admin new order emails but not to customer emails. My current code displays my custom taxonomy for each item in the order but it is showing up in both admin and customer emails, which I don't want.

Looking thru email-order-items.php I don't see a way to utilize $sent_to_admin in the hook that I am using. Am I missing something?

How do I add my custom taxonomy only to admin emails using just hooks and filters?

add_action( 'woocommerce_order_item_meta_end', 'custom_woocommerce_order_item_meta_end', 10, 3 );

function custom_woocommerce_order_item_meta_end( $item_id, $item, $order ) {
     $product = $item->get_product();

     $locations = get_the_terms( $product->get_id(), 'my_custom_taxonomy' );
     echo '<br/>';
     echo '<div style="margin-top: 20px;">';
     foreach( $locations as $location ) {
          echo 'Location:  <b>' . $location->name . '</b>';
          echo '<br/>';
     }
     echo '</div>
}

回答1:


This can be done using $GLOBAL variable. I have revisited a bit your code too. Try this:

// Setting the "sent_to_admin" as a global variable
add_action('woocommerce_email_before_order_table', 'email_order_id_as_a_global', 1, 4);
function email_order_id_as_a_global($order, $sent_to_admin, $plain_text, $email){
    $GLOBALS['email_data'] = array(
        'sent_to_admin' => $sent_to_admin, // <== HERE we set "$sent_to_admin" value
        'email_id' => $email->id, // The email ID (to target specific email notification)
    );
}

// Conditionally customizing footer email text
add_action( 'woocommerce_order_item_meta_end', 'custom_email_order_item_meta_end', 10, 3 );
function custom_email_order_item_meta_end( $item_id, $item, $order ){

    // Getting the custom 'email_data' global variable
    $refNameGlobalsVar = $GLOBALS;
    $email_data = $refNameGlobalsVar['email_data'];

    // Only for admin email notifications
    if( ! ( is_array( $email_data ) && $email_data['sent_to_admin'] ) ) return;

    ## -------------------------- Your Code below -------------------------- ##

    $taxonomy = 'my_custom_taxonomy'; // <= Your custom taxonomy

    echo '<br/><div style="margin-top: 20px;">';
    foreach( get_the_terms( $item->get_product_id(), $taxonomy ) as $term )
        echo 'Location:  <b>' . $term->name . '</b><br/>';
    echo '</div>';
}

Code goes in function.php file of the active child theme (or active theme).

Tested and works.



来源:https://stackoverflow.com/questions/48334927/customize-order-item-meta-only-for-woocommerce-admin-email-notifications

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!