1
votes

I need to display my custom checkout fields in admin orders page, thank_you and email notifications.

I am using Validate and save additional checkout field for specific payment gateway in Woocommerce answer code to show, validate and save my custom field.

From Woocommerce display custom field data on admin order details I am trying to display my custom field saved inputted value.

This is the code I have so far:

// Display field value on the order edit page
add_action( 'woocommerce_admin_order_data_after_billing_address', 
    'show_Ean_nummer_in_admin', 10, 1 );
    function show_Ean_nummer_in_admin ( $order ){
    // Get "ean" custom field value
    $udfyld_ean = get_post_meta( $order_id, '_udfyld_ean', true );

    // Display "ean" custom field value
    echo '<p>'.__('EAN', 'woocommerce') . $udfyld_ean . '</p>';
} 

// Display field value on the order emails  
add_action( 'woocommerce_email_order_details', 'ean_in_emails' 50, 1 );
function ean_in_emails( $order, $sent_to_admin, $plain_text, $email ){
      // Get "ean" custom field value
    $udfyld_ean = get_post_meta( $order_id, '_udfyld_ean', true );

    // Display "ean" custom field value
    echo '<p>'.__('EAN', 'woocommerce') . $udfyld_ean . '</p>';
}

// Display field value in thank you
add_action( 'woocommerce_thankyou', 'ean_in_thankyou' );
function ean_in_thankyou() {
    // Get "ean" custom field value
    $udfyld_ean = get_post_meta( $order_id, '_udfyld_ean', true );
    // Display "ean" custom field value
    echo '<p>'.__('EAN', 'woocommerce') . $udfyld_ean . '</p>';
}  

But It's not working. The field does get appended to the database, but does not display anywhere:

metakey in database

How can I display the field properly?

2
Welcome to SO. You should explain what do you mean by its not working. Is it giving any error or showing blank value for _udfyld_ean?Vivek Athalye
thanks. It's not showing at all.tiny

2 Answers

1
votes

The following code will display your "Udfyld EAN" custom field value in orders and email notifications:

1) To display that in Woocommerce order admin single pages:

// Display field value on the admin order edit page
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'custom_field_admin_display_order_meta', 10, 1 );
function custom_field_admin_display_order_meta( $order ){
    $business_address = get_post_meta( $order->get_id(), 'Business Address?', true );
    if( $udfyld_ean = $order->get_meta('_udfyld_ean') )
        echo '<p><strong>'.__('Udfyld EAN', 'woocommerce').': </strong> ' . $udfyld_ean . '</p>';
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.

enter image description here

2) To display that on Order received, Order view and email notifications you will use:

add_filter( 'woocommerce_get_order_item_totals', 'add_udfyld_ean_row_to_order_totals', 10, 3 );
function add_udfyld_ean_row_to_order_totals( $total_rows, $order, $tax_display ) {;

    $new_total_rows = [];

    foreach($total_rows as $key => $total ){
        $new_total_rows[$key] = $total;

        if( $order->get_meta('_udfyld_ean') && 'payment_method' === $key ){
            $new_total_rows['udfyld_ean'] = array(
                'label' => __('Udfyld EAN', 'woocommerce'),
                'value' => esc_html( $order->get_meta('_udfyld_ean') ),
            );
        }
    }

    return $new_total_rows;
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.

enter image description here

enter image description here

0
votes

You are using following code to fetch the value of _udfyld_ean :

get_post_meta( $order_id, '_udfyld_ean', true );

But the problem is, you have not defined $order_id anywhere. You will need to pass valid value of order ID to get the expected output.