我的 function.php 中有此代码,我如何在管理邮件订单中显示此字段值?谢谢!
//1.1 Display field in admin
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_custom_fields');
function woocommerce_product_custom_fields(){
global $woocommerce, $post;
echo '<div class="product_custom_field">';
woocommerce_wp_text_input(
array(
'id' => '_custom_product_text_field',
'placeholder' => 'Name',
'label' => __('customtext', 'woocommerce'),
'desc_tip' => 'true'
)
);
echo '</div>';
}
//1.2 Save field
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
function woocommerce_product_custom_fields_save($post_id){
$woocommerce_custom_product_text_field = $_POST['_custom_product_text_field'];
if (!empty($woocommerce_custom_product_text_field))
update_post_meta($post_id, '_custom_product_text_field', esc_attr($woocommerce_custom_product_text_field));
}
更新2 有两个非常相似的替代方案(第一个更好):
要在电子邮件(以及订单中)轻松显示此产品自定义字段值,您可以使用以下代码,一旦下订单,该代码将将此数据保存在订单项目中。
第一个替代代码(使用 WC 3+ 最近的 CRUD 方法的最佳新代码):
// 1.3 Save custom field value in order items metadata (only for WooCommerce versions 3+)
add_action( 'woocommerce_checkout_create_order_line_item', 'add_custom_field_to_order_item_meta', 20, 4 );
function add_custom_field_to_order_item_meta( $item, $cart_item_key, $values, $order ) {
$custom_field_value = get_meta( $item->get_product_id(), '_custom_product_text_field' );
if ( ! empty($custom_field_value) ){
$item->update_meta_data( __('Custom label', 'woocommerce'), $custom_field_value );
}
}
…或…
另一种选择(旧的已更新):
// 1.3 Save custom field value in order items meta data
add_action( 'woocommerce_add_order_item_meta', 'add_custom_field_to_order_item_meta', 20, 3 );
function add_custom_field_to_order_item_meta( $item_id, $values, $cart_item_key ) {
$custom_field_value = get_post_meta( $values['data']->get_id(), '_custom_product_text_field', true );
if ( ! empty($custom_field_value) )
wc_add_order_item_meta( $item_id, __('Custom label', 'woocommerce'), $custom_field_value );
}
代码位于活动子主题(或主题)的 function.php 文件中。已测试且有效。
在订单中,您将得到(两者):
在电子邮件中,您会收到(两者):
这是我现在的代码
//1.1 Display custom field
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_custom_fields');
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
function woocommerce_product_custom_fields(){
global $woocommerce, $post;
echo '<div class="product_custom_field">';
woocommerce_wp_text_input(
array(
'id' => '_custom_product_text_field',
'placeholder' => 'text',
'label' => __('Custom', 'woocommerce'),
'desc_tip' => 'true'
)
);
echo '</div>';
}
// 1.2 Save this field in admin
function woocommerce_product_custom_fields_save($post_id){
$woocommerce_custom_product_text_field = $_POST['_custom_product_text_field'];
if (!empty($woocommerce_custom_product_text_field))
update_post_meta($post_id, '_custom_product_text_field', esc_attr($woocommerce_custom_product_text_field));
}
// 1.3 Save custom field value in order items meta data
add_action( 'woocommerce_add_order_item_meta', 'add_custom_field_to_order_item_meta', 20, 3 );
function add_custom_field_to_order_item_meta( $item_id, $values, $cart_item_key ) {
$custom_field_value = get_post_meta( $values['data']->get_id(), '_custom_product_text_field', true );
if ( ! empty($$custom_field_value) )
wc_add_order_item_meta( $item_id, __('Custom label', 'woocommerce'), $custom_field_value );
}