在 WooCommerce 中,我添加了一个产品自定义字段(产品注释),并且它成功显示在单个产品页面的“添加到购物车”按钮下。
如何在管理订单页面上显示该自定义字段值?
这是我的字段代码:
add_action('woocommerce_after_add_to_cart_button', 'custom_product_note', 5 );
function custom_product_note() {
global $product;
if ( $product->is_type( 'variable' ) ) {
echo '<br><div style="margin-top:20px;">';
woocommerce_form_field('product_note', array(
'type' => 'textarea',
'class' => array( 'my-field-class form-row-wide') ,
'label' => __('Product Note - You can add up to 15 characters.') ,
'maxlength' => ('15'),
'placeholder' => __('Add a product note, please.') ,
'required' => true,
) , '');
echo '</div>';
}
}
首先,将产品添加到购物车时需要字段值:
add_filter( 'woocommerce_add_cart_item_data', 'save_product_note_as_cart_item_data', 10 );
function save_product_note_as_cart_item_data( $cart_item_data ) {
if ( isset($_POST['product_note']) ) {
$cart_item_data['product_note'] = esc_attr($_POST['product_note']);
$cart_item_data['unique_key'] = md5( microtime().rand() );
// Display a message notice (optional)
wc_add_notice( __("The product note has been saved successfully", "woocommerce"));
}
return $cart_item_data;
}
然后您需要将此自定义产品注释保存在订单数据中(特别是在订单项中作为自定义元数据):
add_action( 'woocommerce_checkout_create_order_line_item', 'save_and_display_on_admin_edit_order', 10, 4 );
function save_and_display_on_admin_edit_order( $item, $item_key, $values, $order ) {
if ( isset($values['product_note']) ) {
$item->add_meta_data( '_product_note', $values['product_note'] );
}
}
// Add readable "meta key" label name replacement
add_filter('woocommerce_order_item_display_meta_key', 'filter_wc_order_item_display_meta_key', 10, 3 );
function filter_wc_order_item_display_meta_key( $display_key, $meta, $item ) {
if( is_admin() && $item->get_type() === 'line_item' && $meta->key === '_product_note' ) {
$display_key = __('Note', 'woocommerce');
}
return $display_key;
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效