// 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' => __('Geburtsdatum'),
'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' => __('Geburtsdatum', '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' => __('Geburtsdatum', 'woocommerce'),
'description' => __('', 'woocommerce')
);
return $fields;
}
// Check customer age
add_action('woocommerce_checkout_process', 'check_birth_date');
function check_birth_date() {
// Check billing field
if( isset($_POST['billing_birthdate']) && ! empty($_POST['billing_birthdate']) ){
// Get customer age from birthdate
$age = date_diff(date_create($_POST['billing_birthdate']), date_create('now'))->y;
// Checking age and display an error notice avoiding checkout (and emptying cart)
if( $age < 18 ){
wc_add_notice( __( "Du musst mindestens 18 Jahre alt sein, um in unserem Shop bestellen zu können!" ), "error" );
WC()->cart->empty_cart();
}
}
}