在 WooCommerce 管理员编辑订单页面上显示产品字段值

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

在 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>';
    }
}
woocommerce product admin custom-fields orders
1个回答
0
投票

首先,将产品添加到购物车时需要字段值:

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 文件中(或插件中)。已测试并有效

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