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
, and 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
if it is checked or not.
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’s checked, I get
Gift wrap?: 1
- I want
Gift wrap?: Yes please!
- I want
- If it’s not checked, it shows
Gift wrap?:
- I want
Gift wrap?: No thank you.
- I want
1 Answer
Try this instead:
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>';
}
}