Woocommerce email display text instead of raw checkbox value

I have successfully setup some custom fields on checkout and it all works fine.
I have a checkbox as one of the fields. ‘my_gift_wrap_checkbox’
I managed to write code to display text in the orders page (‘yes please!’ or ‘No thank you’) instead of a simple blank or ‘1’
I can’t figure out how to achieve the same in the email code.
My code is

 * Add the field to order emails
add_filter('woocommerce_email_order_meta_keys', 'my_woocommerce_email_order_meta_keys');

function my_woocommerce_email_order_meta_keys( $keys ) {
	$keys['Gift wrap?'] = 'my_gift_wrap_checkbox';
	$keys['Gift wrap instructions'] = 'my_gift_wrap_field';
	return $keys;

Right now if it is checked I get ‘Gift wrap?: 1’
I want ‘Gift wrap?: Yes please!’
If not checked it shows ‘Gift wrap?:’
I want ‘Gift wrap: No thank you.’

I don’t know woocommerce, it seems to me that the function you included there is building an array ($keys[]) which contains a list of fields to include the values of. What you need to look for is the bit of code that actually does something with those values. Can you show the bit of code that calls that function, and then look for the code that works with the array it returns?

I received a reply elsewhere, dropped the whole keys thing. It works perfectly. Code below.
add_action( “woocommerce_email_after_order_table”, “my_woocommerce_email_after_order_table”, 10, 1);

function my_woocommerce_email_after_order_table( $order ) {
$my_gift_wrap_checkbox = get_post_meta( $order->id, “my_gift_wrap_checkbox”, true );
$gift_wrap = $my_gift_wrap_checkbox ? ‘Yes please!’ : ‘No thank you.’;

echo '<p><strong>Gift wrap?: </strong>' . $gift_wrap . '</p>';

if ( $my_gift_wrap_checkbox ) {
    echo '<p><strong>Gift wrap instructions: </strong>' . get_post_meta( $order->id, "my_gift_wrap_field", true ) . '</p>';


This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.