Last active
December 25, 2023 17:33
-
-
Save machelinos/9a7d757b2544927db61e28e6c8a3534b to your computer and use it in GitHub Desktop.
Several ways to customize checkout fields in woocommerce
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Función para cambiar de lugar los campos del checkout de Woocommerce | |
*/ | |
function claserama_rearrange_checkout_fields($fields){ | |
//para mover el orden de los elementos del array, debemos asignar una propiedad de prioridad a cada campo, en nuestro ejemplo le dimos una prioridad menor al email, entonces colocará este campo al principio de nuestra forma | |
$fields['billing']['billing_email']['priority'] = 10; | |
$fields['billing']['billing_first_name']['priority'] = 20; | |
$fields['billing']['billing_last_name']['priority'] = 30; | |
$fields['billing']['billing_company']['priority'] = 40; | |
$fields['billing']['billing_address_1']['priority'] = 50; | |
$fields['billing']['billing_address_2']['priority'] = 60; | |
$fields['billing']['billing_postcode']['priority'] = 70; | |
$fields['billing']['billing_country']['priority'] = 80; | |
$fields['billing']['billing_state']['priority'] = 90; | |
$fields['billing']['billing_phone']['priority'] = 100; | |
//Podemos hacer lo mismo para los campos de envío. En este ejemplo cambiamos el orden de los campos de Nombre y apellido con el apellido primero | |
$fields['shipping']['shipping_first_name']['priority'] = 20; | |
$fields['shipping']['shipping_last_name']['priority'] = 10; | |
$fields['shipping']['shipping_company']['priority'] = 30; | |
$fields['shipping']['shipping_address_1']['priority'] = 40; | |
$fields['shipping']['shipping_address_2']['priority'] = 50; | |
$fields['shipping']['shipping_postcode']['priority'] = 60; | |
$fields['shipping']['shipping_country']['priority'] = 70; | |
$fields['shipping']['shipping_city']['priority'] = 80; | |
$fields['shipping']['shipping_state']['priority'] = 90; | |
return $fields; | |
} | |
add_filter('woocommerce_checkout_fields','claserama_rearrange_checkout_fields'); | |
/** | |
* Función para cambiar las clases de los campos | |
*/ | |
function claserama_change_field_class($fields){ | |
$fields['shipping']['shipping_first_name']['class'][0] = 'form-row-last'; | |
$fields['shipping']['shipping_last_name']['class'][0] = 'form-row-first'; | |
return $fields; | |
} | |
add_filter('woocommerce_checkout_fields','claserama_change_field_class'); | |
/** | |
* Función para remover el campo de "Empresa" del formulario de checkout | |
*/ | |
function claserama_edit_checkout_fields($fields){ | |
unset($fields['billing']['billing_company']); | |
return $fields; | |
} | |
add_filter('woocommerce_checkout_fields','claserama_edit_checkout_fields'); | |
/** | |
* Función para cambiar las etiquetas(labels) y placeholders de los campos que no sean de dirección | |
*/ | |
function claserama_edit_labels_placeholders_checkout($fields){ | |
$fields['order']['order_comments']['label']='Facturación'; | |
$fields['order']['order_comments']['placeholder']='Ingresa tu RFC si deseas obtener una factura'; | |
return $fields; | |
} | |
add_filter('woocommerce_checkout_fields','claserama_edit_labels_placeholders_checkout'); | |
/** | |
* Función para cambiar las etiquetas(labels) y placeholders de los campos de dirección | |
*/ | |
function claserama_edit_address_labels_placeholders_checkout($address_fields){ | |
$address_fields['address_1']['label']='Dirección'; | |
$address_fields['address_1']['placeholder']='Calle, Número y Colonia'; | |
return $address_fields; | |
} | |
add_filter('woocommerce_default_address_fields','claserama_edit_address_labels_placeholders_checkout'); | |
/** | |
* Función para cambiar el tipo de algunos de los campos en el checkout de Woocommerce | |
*/ | |
function claserama_change_field_type_woo($fields){ | |
$fields['billing']['billing_postcode']['type'] = 'tel'; | |
return $fields; | |
} | |
add_filter('woocommerce_checkout_fields','claserama_change_field_type_woo'); | |
/** | |
* Funciones para agregar campos personalizados | |
*Select | |
*/ | |
function claserama_add_select_prefered_contact_method($checkout){ | |
woocommerce_form_field('contactmethod',array( | |
'type' => 'select', //textarea, text,select, radio, checkbox, password | |
'required' => true, //este parámetro no valida, solo agrega un "*" al campo | |
'class' => array('form-row-wide'), // debe ser un array aunque solo tenga un elemento puede ser la clase 'form-row-wide', 'form-row-first', 'form-row-last' | |
'label' => 'Método de contacto preferido', | |
'options' => array( //opciones para un select o un input radio | |
'' => 'Selecciona uno', | |
'email' => 'Por email', // valor => nombre | |
'telefono' => 'Por teléfono' | |
) | |
), $checkout->get_value('contactmethod') | |
); | |
} | |
add_action('woocommerce_after_checkout_billing_form','claserama_add_select_prefered_contact_method'); | |
/** | |
* Funciones para agregar campos personalizados | |
*Checkbox después de los comentarios de la orden | |
*/ | |
function claserama_add_newsletter_optin($checkout){ | |
woocommerce_form_field('subscribe',array( | |
'type' => 'checkbox', | |
'class' => array('form-row-wide'), | |
'label' => ' Suscribirte al Newsletter' | |
), $checkout->get_value('subscribe')); | |
} | |
add_action('woocommerce_after_order_notes','claserama_add_newsletter_optin'); | |
/** | |
* Validar el campo select que agregamos | |
*/ | |
function claserama_validate_select_field(){ | |
//Verificar que el campo haya sido seleccionado, si no mostrar un error | |
if ( empty( $_POST['contactmethod'] ) ) | |
wc_add_notice( 'Por favor selecciona tu método preferido de contacto.', 'error' ); | |
} | |
add_action('woocommerce_checkout_process','claserama_validate_select_field'); | |
/** | |
* Guardar los campos adicionales cuando el usuario termine el proceso de checkout | |
*/ | |
function claserama_save_additional_fields_checkout($order_id){ | |
if( !empty( $_POST['contactmethod'] ) ) | |
update_post_meta( $order_id, 'contactmethod', sanitize_text_field( $_POST['contactmethod'] ) ); | |
if( !empty( $_POST['subscribe'] ) && $_POST['subscribe'] == 1 ) | |
update_post_meta( $order_id, 'subscribe', 1 ); | |
} | |
add_action('woocommerce_checkout_update_order_meta','claserama_save_additional_fields_checkout'); | |
/** | |
* Mostrar los valores de los campos personalizados adicionales en la vista de la orden en el administrador | |
*/ | |
function claserama_show_custom_fields_order($order){ | |
echo '<p><strong>'.__('Método preferido de contacto').':</strong> ' . get_post_meta( $order->id, 'contactmethod', true ) . '</p>'; | |
if(get_post_meta( $order->id, 'subscribe', true )==1){ | |
$suscribir = "Si"; | |
}else{ | |
$suscribir = "No"; | |
} | |
echo '<p><strong>'.__('Suscribirse al Newsletter').':</strong> ' . $suscribir . '</p>'; | |
} | |
add_action('woocommerce_admin_order_data_after_billing_address','claserama_show_custom_fields_order'); | |
/** | |
* Mostrar los valores de los campos personalizados adicionales en la vista de la orden en la página de gracias y en la página de Orden en la página "Mi cuenta" del usuario | |
*/ | |
function claserama_show_custom_fields_thankyou($order_id){ | |
echo '<p><strong>'.__('Método preferido de contacto').':</strong> ' . get_post_meta( $order_id, 'contactmethod', true ) . '</p>'; | |
if(get_post_meta( $order_id, 'subscribe', true )==1){ | |
$suscribir = "Si"; | |
}else{ | |
$suscribir = "No"; | |
} | |
echo '<p><strong>'.__('Suscribirse al Newsletter').':</strong> ' . $suscribir . '</p>'; | |
} | |
add_action('woocommerce_thankyou','claserama_show_custom_fields_thankyou', 20); | |
add_action('woocommerce_view_order','claserama_show_custom_fields_thankyou', 20); | |
/** | |
* Mostrar los valores de los campos personalizados adicionales en los correos electrónicos | |
*/ | |
function claserama_show_custom_fields_emails($order, $sent_to_admin, $order){ | |
if(get_post_meta( $order_id, 'subscribe', true )==1){ | |
$suscribir = "Si"; | |
}else{ | |
$suscribir = "No"; | |
} | |
$fields['contactmethod'] = array( | |
'label' => __('Método de contacto preferido'), | |
'value' => get_post_meta( $order->id, 'contactmethod', true ), | |
); | |
$fields['subscribe'] = array( | |
'label' => __('Suscribirse al newsletter?'), | |
'value' => $suscribir, | |
); | |
return $fields; | |
} | |
add_action('woocommerce_email_order_meta_fields','claserama_show_custom_fields_emails', 10, 3); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment