添加产品标签以通过 WooCommerce 电子邮件通知订购商品

问题描述 投票:0回答:1

在这个论坛的帮助下,我成功地使用以下代码片段将自定义字段添加到 woocommerce 订单电子邮件中:

`/**
* Add a custom field & product tag (in an order) to the emails
*/
add_action('woocommerce_order_item_meta_end', 'email_confirmation_display_order_items', 10, 4);

function email_confirmation_display_order_items($item_id, $item, $order, $plain_text) {

   $product = $item->get_product();

   if ( empty( $product ) ) {
    return false;
   }

   $date = get_field( 'course_dates', $product->get_id() );

   if ( !empty( $date ) ) {
    echo '<div style="font-size:12px;"><br>Course Date(s): '. $date .'</div>';
}

 }

我现在想对此进行改进,并向这些电子邮件添加“产品标签”(我使用产品标签来指定事件的位置)。

在浏览了论坛并玩了一下之后,我想出了以下内容,这显然是不正确的,因为它破坏了网站:

add_action( 'woocommerce_order_item_meta_end', 'email_confirmation_display_product_tag', 10, 4 );
function email_confirmation_display_product_tag($order, $sent_to_admin, $plain_text, $email) {
   $items = $order->get_items();
   foreach ( $items as $item ) { 
    $product_tag = $item['product_tag'];
   }    
   if ( !empty($product_tag ) ) {
    echo '<div style="font-size:12px;">Location: '. $product_tag .'</div>';
}
}

任何帮助我走上正确道路的帮助将不胜感激。

php woocommerce product orders email-notifications
1个回答
0
投票

您的代码中有一些错误,请尝试以下操作:

add_action( 'woocommerce_order_item_meta_end', 'email_confirmation_display_product_tag', 10, 4 );
function email_confirmation_display_product_tag($item_id, $item, $order, $plain_text) {
    // Only on email notifications and "line" items
    if( is_wc_endpoint_url() || ! $item->is_type('line_item') ) return;

    // Get the product tag(s) for this order item
    $term_names[] = wp_get_post_terms( $item->get_product_id(), 'product_tag', array('fields' => 'names') );  

    // Display
    if ( count($term_names ) > 0 ) {
        printf( '<div style="font-size:12px;"><br>%s: %s</div>', __('Location', 'woocommerce'), implode(', ', $term_names) );
    }
}

应该可以。


您应该将两个函数合并为一个,因为它们使用相同的钩子,例如:

add_action( 'woocommerce_order_item_meta_end', 'email_confirmation_display_custom_data', 20, 4 );
function email_confirmation_display_custom_data($item_id, $item, $order, $plain_text) {
    // Only on email notifications and "line" items
    if( is_wc_endpoint_url() || ! $item->is_type('line_item') ) return;

    $product = $item->get_product(); // get the WC_Product object

    // Get the ACF 'course_dates' field value
    if ( $date = get_field( 'course_dates', $product->get_id() ) ) {
        printf( '<div style="font-size:12px;"><br>%s: %s</div>', __('Course Date(s)', 'woocommerce'), $date );
    }

    // Get the product tag(s) for this order item
    $term_names[] = wp_get_post_terms( $item->get_product_id(), 'product_tag', array('fields' => 'names') );  

    // Display
    if ( count($term_names ) > 0 ) {
        printf( '<div style="font-size:12px;"><br>%s: %s</div>', __('Location', 'woocommerce'), implode(', ', $term_names) );
    }
}

请务必先删除其他相关功能。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.