在这个论坛的帮助下,我成功地使用以下代码片段将自定义字段添加到 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>';
}
}
任何帮助我走上正确道路的帮助将不胜感激。
您的代码中有一些错误,请尝试以下操作:
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) );
}
}
请务必先删除其他相关功能。应该可以。