Marko I.
Marko I.

Reputation: 562

How to display custom product field on WooCommerce checkout page?

I'm trying to display custom product field checkout_name on the checkout page but I can't seem to figure out how. I'm following checkout hooks visual guide from here.

add_action( 'woocommerce_checkout_before_customer_details', 'custom_before_checkout_form', 10 );
function custom_before_checkout_form( $cart_data ){
    $meta_key = 'checkout_name';

    $product_id = $cart_item['product_id'];

    $meta_value = get_post_meta( $product_id, $meta_key, true );

    if( !empty( $cart_data ) )
        $custom_items = $cart_data;

    if( !empty($meta_value) ) {
        $custom_items[] = array(
            'key'       => __('Store Name', 'woocommerce'),
            'value'     => $meta_value,
            'display'   => $meta_value,
        );
    }
    return $custom_items;
}

Upvotes: 1

Views: 669

Answers (1)

LoicTheAztec
LoicTheAztec

Reputation: 253784

Custom checkout fields need to be inside the checkout form. If not the field values are not posted on submission.

There is also some errors in your code. Try the following instead using a hook located inside the checkout form, just before billing fields (assuming that the custom product field checkout_name exist).

add_action( 'woocommerce_checkout_before_customer_details', 'custom_before_checkout_form' ); 
function custom_before_checkout_form(){
    // Loop though cart items 
    foreach ( WC()->cart->get_cart() as $item ) { 
        // Get the WC_Product Object 
        $product = $item['data'];

        echo '<div align="center">' . $product->get_meta( 'checkout_name' ) . '</div><br>'; 
    }
}

Code goes in functions.php file of your active child theme (or active theme). It should better work.

Upvotes: 1

Related Questions