我的主题中有以下代码functions.php
用于向产品添加"供应商"字段:
// Add supplier to products
// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields_supplier' );
// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_supplier_save' );
function woo_add_custom_general_fields_supplier() {
global $woocommerce, $post;
// Text Field
woocommerce_wp_text_input(
array(
'id' => 'supplier',
'label' => __( 'Supplier', 'woocommerce' ),
'placeholder' => 'supplier',
'desc_tip' => 'true',
'description' => __( 'Product supplier.', 'woocommerce' )
)
);
}
function woo_add_custom_general_fields_supplier_save( $post_id ){
// Textarea
$woocommerce_supplier = $_POST['supplier'];
if( !empty( $woocommerce_supplier ) )
update_post_meta( $post_id, 'supplier', esc_html( $woocommerce_supplier ) );
}
这一切都很好用。我现在需要将此新的供应商字段添加到管理员订单电子邮件中。我的代码不是很流利,所以我尝试了以下方法,但没有任何成功:
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$fields['supplier'] = array(
'label' => __( 'Supplier' ),
'value' => get_post_meta( $order->id, 'supplier', true ),
);
return $fields;
}
我需要什么代码才能将供应商字段添加到管理员电子邮件中?
非常感谢
一些评论和调整
- 在步骤 1 和 2(创建字段并保存(中,您可以使用
$product_id
。 但是,在步骤 3 中,您使用$order_id
。$order_id
不等于$product_id
- 使用
woocommerce_admin_process_product_object
而不是过时的woocommerce_process_product_meta
钩
子保存 woocommerce_email_order_meta_fields
已替换为woocommerce_checkout_create_order_line_item
所以你得到
// Add supplier to products
// Display Fields
function woo_add_custom_general_fields_supplier() {
// Text Field
woocommerce_wp_text_input( array(
'id' => 'supplier',
'label' => __( 'Supplier', 'woocommerce' ),
'placeholder' => 'supplier',
'desc_tip' => 'true',
'description' => __( 'Product supplier.', 'woocommerce' )
));
}
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields_supplier', 10, 0 );
// Save Fields
function woo_add_custom_general_fields_supplier_save( $product ){
if( isset($_POST['supplier']) ) {
$product->update_meta_data( 'supplier', esc_html( $_POST['supplier'] ) );
}
}
add_action( 'woocommerce_admin_process_product_object', 'woo_add_custom_general_fields_supplier_save', 10, 1 );
// Displaying custom fields in the WooCommerce order and email confirmations
function action_woocommerce_checkout_create_order_line_item($item, $cart_item_key, $values, $order) {
// Get meta
$supplier = $values['data']->get_meta('supplier');
// True
if ( $supplier ) {
$item->update_meta_data( 'supplier', $supplier );
}
}
add_action('woocommerce_checkout_create_order_line_item', 'action_woocommerce_checkout_create_order_line_item', 20, 4);