I try to add a birthdate field in the Woocommerce Checkout form, then save it as a user meta. I can display it with the code below but i can’t save it in order to see it in the user profile page.
add_filter( 'woocommerce_billing_fields', 'add_birth_date_billing_field', 20, 1 ); function add_birth_date_billing_field($billing_fields) { $billing_fields['billing_birth_date'] = array( 'type' => 'date', 'label' => __('Birth date'), 'class' => array('form-row-wide'), 'priority' => 25, 'required' => true, 'clear' => true, ); return $billing_fields; } add_action( 'woocommerce_checkout_update_customer', 'save_checkout_account_birthday_field', 10, 2 ); function save_checkout_account_birthday_field( $customer, $data ){ if ( isset($_POST['billing_birth_date']) && ! empty($_POST['billing_birth_date']) ) { $customer->update_meta_data( 'billing_birth_date', sanitize_text_field($_POST['billing_birth_date']) ); } }
Advertisement
Answer
Here is the complete code that will display billing birthdate in checkout, in My account Addresses, In admin Orders pages and in WordPress user dashboard:
// Display Billing birthdate field to checkout and My account addresses add_filter( 'woocommerce_billing_fields', 'display_birthdate_billing_field', 20, 1 ); function display_birthdate_billing_field($billing_fields) { $billing_fields['billing_birthdate'] = array( 'type' => 'date', 'label' => __('Birthdate'), 'class' => array('form-row-wide'), 'priority' => 25, 'required' => true, 'clear' => true, ); return $billing_fields; } // Save Billing birthdate field value as user meta data add_action( 'woocommerce_checkout_update_customer', 'save_account_billing_birthdate_field', 10, 2 ); function save_account_billing_birthdate_field( $customer, $data ){ if ( isset($_POST['billing_birthdate']) && ! empty($_POST['billing_birthdate']) ) { $customer->update_meta_data( 'billing_birthdate', sanitize_text_field($_POST['billing_birthdate']) ); } } // Admin orders Billing birthdate editable field and display add_filter('woocommerce_admin_billing_fields', 'admin_order_billing_birthdate_editable_field'); function admin_order_billing_birthdate_editable_field( $fields ) { $fields['birthdate'] = array( 'label' => __('Birthdate', 'woocommerce') ); return $fields; } // WordPress User: Add Billing birthdate editable field add_filter('woocommerce_customer_meta_fields', 'wordpress_user_account_billing_birthdate_field'); function wordpress_user_account_billing_birthdate_field( $fields ) { $fields['billing']['fields']['billing_birthdate'] = array( 'label' => __('Birthdate', 'woocommerce'), 'description' => __('', 'woocommerce') ); return $fields; }
Code goes in functions.php file of the active child theme (or active theme). Tested and works.