Чтобы добавить и сохранить настраиваемое поле для заказа «позиций» на страницах редактирования заказа администратора, вы будете использовать что-то вроде:
// 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 вашей активной дочерней темы (илиактивная тема).Проверено и работает.