Mary X Nabors
Mary X Nabors

Reputation: 139

WooCommerce custom order itemmeta display my account view order page

I created a custom field for the ecommerce admin order item meta. Everything is fine.

I would like to display the Custom Fields MetaValue on My Account's Order Details page. But nothing is being displayed. Based on Save Order item custom field in Woocommerce Admin order pages answer code, this is my attempt

function add_order_item_custom_field( $item_id, $item ) {
woocommerce_wp_text_input( array(
    'id'            => 'v_number'.$item_id,
    'label'         => __( 'V Number : ', 'ctxt' ),
    'description'   => __( 'Enter the title of your custom text field.', 'ctxt' ),
    'desc_tip'      => true,
    'class'         => 'v_number_class',
    'value'         => wc_get_order_item_meta( $item_id, '_v_number' ),
) );
} 
add_action( 'woocommerce_before_order_itemmeta', 'add_order_item_custom_field', 10, 2 );

// Save the custom field value
function save_order_item_custom_field_value( $post_id, $post ){
$order = wc_get_order( $post_id );
foreach ( $order->get_items() as $item_id => $item ) {
    if( isset( $_POST['v_number'.$item_id] ) ) {
        $item->update_meta_data( '_v_number', sanitize_text_field( $_POST['v_number'.$item_id] ) );
        $item->save();
    }
}
$order->save();
}
add_action('save_post', 'save_order_item_custom_field_value' );

enter image description here

// Display meta my account view order page
 printf ( 
'<p><a>V Number :  <strong>' . $order->get_meta('_v_number') . '</strong></a></p>'
); 

enter image description here

Upvotes: 0

Views: 2018

Answers (1)

Joy Kumar Bera
Joy Kumar Bera

Reputation: 344

it should print your custom order meta value.

add_action( 'woocommerce_view_order', 'print_custom_order_meta' );
function print_custom_order_meta( $order_id ){
    $order = wc_get_order($order_id);

    foreach( $order->get_items() as $item ) {
        echo 'V Number for '. $item->get_name() .' - ' . $item->get_meta( '_v_number', true ) . '<br>';
    }
}

edit

for need to show metavalue after each product item you need to hook with a different action like this.

add_action('woocommerce_order_item_meta_end', 'show_order_meta', 11, 3);
function show_order_meta( $item_id, $item, $order ) {
    echo '<br>V Number for '. $item->get_name() .' - ' . $item->get_meta( '_v_number', true ) . '<br>';
}

Upvotes: 2

Related Questions