custom-checkout-fields.php
· 4.5 KiB · PHP
Raw
// Add a custom checkout fields for QRh, Tipo Cliente & NIF/CIF/NIE/DNI and save them to the database as META data
/**
* Add a 'Tipo cliente' dropdown field to the WooCommerce checkout page with specific options
*/
add_filter('woocommerce_checkout_fields', 'custom_add_tipo_cliente_dropdown');
function custom_add_tipo_cliente_dropdown($fields) {
$fields['billing']['billing_tipo_cliente'] = array(
'type' => 'select',
'label' => __('Tipo cliente', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'options' => array(
'' => __('Elige un tipo de cliente', 'woocommerce'),
'estudiante' => __('Estudiante', 'woocommerce'),
'salon_de_belleza' => __('Salón de belleza', 'woocommerce'),
'esteticista' => __('Esteticista', 'woocommerce'),
'maquillador' => __('Maquillador', 'woocommerce'),
'salon_peluqueria_barberia' => __('Salón Peluquería / Barbería', 'woocommerce'),
'peluquero_barbero_autonomo' => __('Peluquero / Barbero autónomo', 'woocommerce'),
'peluquero_barbero_empleado' => __('Peluquero / Barbero empleado', 'woocommerce'),
),
'priority' => 22,
);
return $fields;
}
/**
* Process and validate the 'Tipo cliente' dropdown field
*/
add_action('woocommerce_checkout_process', 'custom_validate_tipo_cliente_field');
function custom_validate_tipo_cliente_field() {
if (!isset($_POST['billing_tipo_cliente']) || empty($_POST['billing_tipo_cliente'])) {
wc_add_notice(__('Elige un tipo de cliente por favor.', 'woocommerce'), 'error');
}
}
// For a WooCommerce registration form, use the following instead:
// add_action('woocommerce_register_form', 'custom_add_user_type_registration_dropdown');
function custom_save_user_type( $user_id ) {
if ( ! empty( $_POST['user_type'] ) ) {
update_user_meta( $user_id, 'user_type', sanitize_text_field( $_POST['user_type'] ) );
}
}
// For a generic WordPress registration
//add_action( 'user_register', 'custom_save_user_type' );
// For a WooCommerce-specific registration, use the following instead:
add_action( 'woocommerce_created_customer', 'custom_save_user_type' );
/**
* Add a CIF/NIF field to the WooCommerce checkout page
*/
add_filter('woocommerce_checkout_fields', 'custom_add_checkout_fields');
function custom_add_checkout_fields($fields) {
$fields['billing']['billing_nif'] = array(
'label' => __('CIF/NIF/DNI/NIE', 'woocommerce'),
'placeholder' => _x('CIF/NIF/DNI/NIE', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
'priority' => 21, // Adjust the priority to position just after the last name
);
return $fields;
}
/**
* Process and validate the CIF/NIF field
*/
add_action('woocommerce_checkout_process', 'custom_validate_checkout_field_process');
function custom_validate_checkout_field_process() {
if (!$_POST['billing_nif'])
wc_add_notice(__('Please enter your CIF/NIF.'), 'error');
}
/**
* Save the 'Tipo cliente' field with the order and user meta
*/
add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta_tipo_cliente');
function custom_checkout_field_update_order_meta_tipo_cliente($order_id) {
if (!empty($_POST['billing_tipo_cliente'])) {
// Save to order meta
update_post_meta($order_id, '_billing_tipo_cliente', sanitize_text_field($_POST['billing_tipo_cliente']));
// Get the customer user ID
$customer_user_id = get_post_meta($order_id, '_customer_user', true);
if ($customer_user_id) {
// Save to user meta as well
update_user_meta($customer_user_id, 'billing_tipo_cliente', sanitize_text_field($_POST['billing_tipo_cliente']));
}
}
}
add_filter( 'woocommerce_checkout_get_value', 'custom_checkout_field_default_value', 10, 2 );
function custom_checkout_field_default_value( $value, $input ) {
$current_user = wp_get_current_user();
if ( is_user_logged_in() && $input == 'billing_tipo_cliente' ) {
$user_tipo_cliente = get_user_meta( $current_user->ID, 'billing_tipo_cliente', true );
if ( !empty($user_tipo_cliente) ) {
$value = $user_tipo_cliente;
}
}
return $value;
}
| 1 | // Add a custom checkout fields for QRh, Tipo Cliente & NIF/CIF/NIE/DNI and save them to the database as META data |
| 2 | |
| 3 | /** |
| 4 | * Add a 'Tipo cliente' dropdown field to the WooCommerce checkout page with specific options |
| 5 | */ |
| 6 | add_filter('woocommerce_checkout_fields', 'custom_add_tipo_cliente_dropdown'); |
| 7 | function custom_add_tipo_cliente_dropdown($fields) { |
| 8 | $fields['billing']['billing_tipo_cliente'] = array( |
| 9 | 'type' => 'select', |
| 10 | 'label' => __('Tipo cliente', 'woocommerce'), |
| 11 | 'required' => true, |
| 12 | 'class' => array('form-row-wide'), |
| 13 | 'options' => array( |
| 14 | '' => __('Elige un tipo de cliente', 'woocommerce'), |
| 15 | 'estudiante' => __('Estudiante', 'woocommerce'), |
| 16 | 'salon_de_belleza' => __('Salón de belleza', 'woocommerce'), |
| 17 | 'esteticista' => __('Esteticista', 'woocommerce'), |
| 18 | 'maquillador' => __('Maquillador', 'woocommerce'), |
| 19 | 'salon_peluqueria_barberia' => __('Salón Peluquería / Barbería', 'woocommerce'), |
| 20 | 'peluquero_barbero_autonomo' => __('Peluquero / Barbero autónomo', 'woocommerce'), |
| 21 | 'peluquero_barbero_empleado' => __('Peluquero / Barbero empleado', 'woocommerce'), |
| 22 | ), |
| 23 | 'priority' => 22, |
| 24 | ); |
| 25 | |
| 26 | return $fields; |
| 27 | } |
| 28 | |
| 29 | /** |
| 30 | * Process and validate the 'Tipo cliente' dropdown field |
| 31 | */ |
| 32 | add_action('woocommerce_checkout_process', 'custom_validate_tipo_cliente_field'); |
| 33 | function custom_validate_tipo_cliente_field() { |
| 34 | if (!isset($_POST['billing_tipo_cliente']) || empty($_POST['billing_tipo_cliente'])) { |
| 35 | wc_add_notice(__('Elige un tipo de cliente por favor.', 'woocommerce'), 'error'); |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | // For a WooCommerce registration form, use the following instead: |
| 40 | // add_action('woocommerce_register_form', 'custom_add_user_type_registration_dropdown'); |
| 41 | |
| 42 | function custom_save_user_type( $user_id ) { |
| 43 | if ( ! empty( $_POST['user_type'] ) ) { |
| 44 | update_user_meta( $user_id, 'user_type', sanitize_text_field( $_POST['user_type'] ) ); |
| 45 | } |
| 46 | } |
| 47 | // For a generic WordPress registration |
| 48 | //add_action( 'user_register', 'custom_save_user_type' ); |
| 49 | // For a WooCommerce-specific registration, use the following instead: |
| 50 | add_action( 'woocommerce_created_customer', 'custom_save_user_type' ); |
| 51 | |
| 52 | /** |
| 53 | * Add a CIF/NIF field to the WooCommerce checkout page |
| 54 | */ |
| 55 | add_filter('woocommerce_checkout_fields', 'custom_add_checkout_fields'); |
| 56 | function custom_add_checkout_fields($fields) { |
| 57 | $fields['billing']['billing_nif'] = array( |
| 58 | 'label' => __('CIF/NIF/DNI/NIE', 'woocommerce'), |
| 59 | 'placeholder' => _x('CIF/NIF/DNI/NIE', 'placeholder', 'woocommerce'), |
| 60 | 'required' => true, |
| 61 | 'class' => array('form-row-wide'), |
| 62 | 'clear' => true, |
| 63 | 'priority' => 21, // Adjust the priority to position just after the last name |
| 64 | ); |
| 65 | |
| 66 | return $fields; |
| 67 | } |
| 68 | |
| 69 | /** |
| 70 | * Process and validate the CIF/NIF field |
| 71 | */ |
| 72 | add_action('woocommerce_checkout_process', 'custom_validate_checkout_field_process'); |
| 73 | function custom_validate_checkout_field_process() { |
| 74 | if (!$_POST['billing_nif']) |
| 75 | wc_add_notice(__('Please enter your CIF/NIF.'), 'error'); |
| 76 | } |
| 77 | |
| 78 | /** |
| 79 | * Save the 'Tipo cliente' field with the order and user meta |
| 80 | */ |
| 81 | add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta_tipo_cliente'); |
| 82 | function custom_checkout_field_update_order_meta_tipo_cliente($order_id) { |
| 83 | if (!empty($_POST['billing_tipo_cliente'])) { |
| 84 | // Save to order meta |
| 85 | update_post_meta($order_id, '_billing_tipo_cliente', sanitize_text_field($_POST['billing_tipo_cliente'])); |
| 86 | |
| 87 | // Get the customer user ID |
| 88 | $customer_user_id = get_post_meta($order_id, '_customer_user', true); |
| 89 | if ($customer_user_id) { |
| 90 | // Save to user meta as well |
| 91 | update_user_meta($customer_user_id, 'billing_tipo_cliente', sanitize_text_field($_POST['billing_tipo_cliente'])); |
| 92 | } |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | add_filter( 'woocommerce_checkout_get_value', 'custom_checkout_field_default_value', 10, 2 ); |
| 97 | function custom_checkout_field_default_value( $value, $input ) { |
| 98 | $current_user = wp_get_current_user(); |
| 99 | |
| 100 | if ( is_user_logged_in() && $input == 'billing_tipo_cliente' ) { |
| 101 | $user_tipo_cliente = get_user_meta( $current_user->ID, 'billing_tipo_cliente', true ); |
| 102 | if ( !empty($user_tipo_cliente) ) { |
| 103 | $value = $user_tipo_cliente; |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | return $value; |
| 108 | } |
| 109 |