在Woocommerce管理订单页面中保存订单商品自定义字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Woocommerce管理订单页面中保存订单商品自定义字段相关的知识,希望对你有一定的参考价值。

我在每个行产品的后台订单中添加了自定义字段:

我的问题是我不知道如何保存这些字段。

你能帮我么?

function cfwc_create_custom_field() {
 $args = array(
'id' => 'custom_text_field_title',
'label' => __( 'Custom Text Field Title', 'cfwc' ),
'class' => 'cfwc-custom-field',
'desc_tip' => true,
'description' => __( 'Enter the title of your custom text field.', 'ctwc' 
 ),
 );
woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_before_order_itemmeta', 'cfwc_create_custom_field' );
答案

要添加和保存自定义字段以在管理订单编辑页面中订购“订单项”,您将使用以下内容:

// Add a custom field
add_action( 'woocommerce_before_order_itemmeta', 'add_order_item_custom_field', 10, 2 );
function add_order_item_custom_field( $item_id, $item ) {
    // Targeting line items type only
    if( $item->get_type() !== 'line_item' ) return;

    woocommerce_wp_text_input( array(
        'id'            => 'cfield_oitem_'.$item_id,
        'label'         => __( 'Custom Text Field Title', 'cfwc' ),
        'description'   => __( 'Enter the title of your custom text field.', 'ctwc' ),
        'desc_tip'      => true,
        'class'         => 'woocommerce',
        'value'         => wc_get_order_item_meta( $item_id, '_custom_field' ),
    ) );
}

// Save the custom field value
add_action('save_post_shop_order', 'save_order_item_custom_field_value');
function save_order_item_custom_field_value( $post_id ){
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
        return $post_id;

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id;

    if ( ! current_user_can( 'edit_shop_order', $post_id ) )
        return $post_id;

    $order = wc_get_order( $post_id );

    // Loop through order items
    foreach ( $order->get_items() as $item_id => $item ) {
        if( isset( $_POST['cfield_oitem_'.$item_id] ) ) {
            wc_update_order_item_meta( $item_id, '_custom_field', sanitize_text_field( $_POST['cfield_oitem_'.$item_id] ) );
        }
    }
}

// Optionally Keep the new meta key/value as hidden in backend
add_filter( 'woocommerce_hidden_order_itemmeta', 'additional_hidden_order_itemmeta', 10, 1 );
function additional_hidden_order_itemmeta( $args ) {
    $args[] = '_custom_field';
    return $args;
}

代码位于活动子主题(或活动主题)的function.php文件中。经过测试和工作。

以上是关于在Woocommerce管理订单页面中保存订单商品自定义字段的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce Admin创建订单并在订单支付上添加运费

WooCommerce:将自定义 Metabox 添加到管理订单页面

在 Woocommerce 管理订单编辑页面中以编程方式添加自定义订单备注

在保存订单并发送 WooCommerce 电子邮件通知之前,将订单 ID 添加到订单项目元数据

在 WooCommerce 管理员订单详细信息页面上的订单项目表中显示产品元数据

如果订单包含来自特定产品类别的商品,则为 WooCommerce 订单号添加前缀