phpwordpresswoocommerceordersemail-notifications

Display custom payment field in Woocommerce Admin, Orders and emails


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?


Solution

  • 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 ){
        if( $ean_value = $order->get_meta('_udfyld_ean') )
            printf('<p><strong>%s:</strong> %s</p>', esc_html__('Udfyld EAN', 'woocommerce'), $ean_value);
    }
    

    Code goes in functions.php file of your child theme (or in a custom plugin).

    You will get:

    enter image description here


    1. 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' => esc_html__('Udfyld EAN', 'woocommerce'),
                    'value' => esc_html( $order->get_meta('_udfyld_ean') ),
                );
            }
        }
    
        return $new_total_rows;
    }
    

    Code goes in functions.php file of your child theme (or in a custom plugin).

    You will get:

    enter image description here

    enter image description here