¿Cómo editar los campos del formulario de pago de WooCommerce?
Cuando configuramos una tienda online en Woocommerce, uno de los mayores quebraderos de cabeza es cómo configurar algunas de sus partes.
El plugin en sí mismo permite poca flexibilidad, y la lluvia de extensiones disponibles desde el propio software son de pago…
Así que si lo que deseamos es personalizar el formulario que aparece cuando alguien finaliza una compra, tenemos 3 opciones:
- Pasar por caja
- Buscar un plugin alternativo gratuíto
- DIY, que por sus siglas en inglés significa, hazlo tú mismo.
En este miniartículo de Loopeando.com nos vamos a centrar en los dos últimos puntos. Así que, como acostumbramos a decir: Pasa, disfruta, aprende y comparte.
Resumen de contenidos
Plugin: La eterna solución
Como siempre, la vía rápida para no calentarnos la cabeza es un plugin.
En esta ocasión os recomendamos Woo Checkout Field Editor Pro, una sencilla extensión que se integra en el menú de Woocommerce y permite crear campos nuevos, activar/desactivar los ya existentes, cambiarlos de orden, etc…
Con código
WooCommerce cuenta con dos tipos de formulario para el checkout:
- Formulario de facturación (Billing)
- Formulario de envío (Shipping)
Que pueden contener o no los mismos campos.
Estos formularios son, en la práctica, filtros que llamamos desde el functions.php y a los que agregamos en un array los campos a mostrar y sus propiedades.
Así pues, el primer paso sería abrir el functions.php de nuestro tema activo, que habitualmente está en la siguiente ruta: http://www.nuestro_dominio.tld/wp-content/themes/nombre_del_tema/functions.php
Tras ello podemos escoger entre agregar campos al formulario de facturación:
$address_fields = apply_filters('woocommerce_billing_fields', $address_fields);
O al de envío:
$address_fields = apply_filters('woocommerce_shipping_fields', $address_fields);
Añadiendo los elementos deseados a la clase checkout_fields:
$this->checkout_fields['billing'] = $woocommerce->countries->get_address_fields( $this->get_value('billing_country'), 'billing_' ); $this->checkout_fields['shipping'] = $woocommerce->countries->get_address_fields( $this->get_value('shipping_country'), 'shipping_' ); $this->checkout_fields['account'] = array( 'account_username' => array( 'type' => 'text', 'label' => __('Account username', 'woocommerce'), 'placeholder' => _x('Username', 'placeholder', 'woocommerce') ), 'account_password' => array( 'type' => 'password', 'label' => __('Account password', 'woocommerce'), 'placeholder' => _x('Password', 'placeholder', 'woocommerce'), 'class' => array('form-row-first') ), 'account_password-2' => array( 'type' => 'password', 'label' => __('Account password', 'woocommerce'), 'placeholder' => _x('Password', 'placeholder', 'woocommerce'), 'class' => array('form-row-last'), 'label_class' => array('hidden') ) ); $this->checkout_fields['order'] = array( 'order_comments' => array( 'type' => 'textarea', 'class' => array('notes'), 'label' => __('Order Notes', 'woocommerce'), 'placeholder' => _x('Notes about your order, e.g. special notes for delivery.', 'placeholder', 'woocommerce') ) );
Y al finalizar, pasamos la matriz por el filtro que indicábamos:
$this->checkout_fields = apply_filters('woocommerce_checkout_fields', $this->checkout_fields);
Naturalmente también podremos cambiar las propiedades de los campos ya existentes. Por ejemplo, vamos a cambiar el placeholder (texto que aparece dentro de un campo justo antes de que escribamos en él) y el label (nombre público del campo) de order_comments:
// Hook in add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); // Our hooked in function - $fields is passed via the filter! function custom_override_checkout_fields( $fields ) { $fields['order']['order_comments']['placeholder'] = 'Escribe aquí tus comentarios para el mensajero'; $fields['order']['order_comments']['label'] = 'Detalles'; return $fields; }
Y si lo que deseamos es borrar un campo, aplicamos unset:
// Hook in add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); // Our hooked in function - $fields is passed via the filter! function custom_override_checkout_fields( $fields ) { unset($fields['order']['order_comments']); return $fields; }
Si deseas ver otros ejemplos así como los datos que pasa por defecto WooCommerce a cada uno de los dos formularios, te recomendamos leerlo en la documentación oficial.
¿Has conseguido solucionar tu problema? ¡Cuéntanoslo!
Hola! yo lo que estoy buscando es cómo modificar la aparieriencia de los datos a rellenar cuando se ha realizado una compra: nombre, apellidos. dirección,,, poder hacer una caja con colores en los campos y no que se vea ahora tan extendido y poco atractivo. gracias de antemano
Hola Elena. Bienvenida!
En principio es algo que puedes solucionar con CSS. Utilizando las clases y selectores puedes editar el ancho de los campos, su color, fuente, tamaño, posición…
Este CSS puedes añadirlo directamente en el campo que habilitan casi todos los temas de wordpress, y que puedes encontrar en Apariencia –> Personalizar
Hola Cristian, excelente post. Me ayudó a orientarme en la solución que necesito. Tengo una tienda online y no puedo modificar los campos del checkout. Tengo la plantilla Bridge y WooCommerce, pero me aparece un placeholder que no he podido quitar con plugins, al igual que algunos campos. Me podrías ayudar y cuánto saldría el costo de modificar esos campos. Te dejo la web. Saludos https://parfumsdparfums.cl/finalizar-compra/
Buenos días Rodrigo,
Muchas gracias por tus amables palabras. Te facilitamos un presupuesto vía email.
Feliz Navidad!
Hola Cristian. tengo una duda, como puedo hacer para que los datos ingresados se junten con los que te da por default es decir que tengo 2 campos por default “Nombre” y “Apellido Paterno”, y me gustaria añadir “Apellido Materno” pero al efectuar el pago solo me muestra “Nombre” y “Apellido Paterno” juntos en la misma linea, ¿Como puedo hacer para que me muestre “Nombre”,”Apellido Paterno” y “Apellido Materno” sobre la misma linea?
Buenas tardes David,
Cuando añadas el campo nuevo al array, puedes agregar un nombre de clase nuevo:
‘account_username’ => array(
‘type’ => ‘text’,
‘label’ => __(‘Account username’, ‘woocommerce’),
‘placeholder’ => _x(‘Username’, ‘placeholder’, ‘woocommerce’),
‘class’ => array(‘tu_clase_nueva’)
),
Ahí puedes especificar por CSS que se mantenga en la misma línea que el campo anterior, siempre y cuando quepa en esa línea. Por ejemplo:
.tu_clase_nueva{
float:left;
}
Si no cupiese puesto que los campos “nombre” y “apellido paterno” tuviesen un CSS que les indicase una anchura del 50%, tendrás que modificarla para que ocupen un 33% y añadir al estilo del nuevo campo algo como:
.tu_clase_nueva{
float:left;
width: 33%;
}
Espero haberte ayudado! Feliz Navidad y mejor fin de año!
Hola.
Muchas gracias por el tutorial, me sirvio de mucha ayuda.
Me pregunto si hay alguna forma de mostrar el formulario para editar las direcciones de facturación y envío en cualquier parte de nuestra plantilla. He leído por ahí que no son plantillas como tal de wordpress (archivos php, vamos) sino que son endpoints y no sé de que forma mostrar esos formularios donde yo quiera (si es que es posible).
Saludos.
Hola, muchas gracias por la informacion pero necesito ayuda.
Compre un plugin para reservar asientos y que se complementa con woocommerce, el tema es que cuando terminas de hacer la reserva y llega el correo al cliente y al administrador este llega sin los datos importantes que son el numero de asiento y la fecha, solo llega el nombre del evento.
Advance Seat Reservation Management for WooCommerce ese es el plugin, me he contactado con el creado y me dice que me contacte con woocommerce, que ellos son del problema, por otro lado woocommerce me dice que los creadores tienen el problema que me contacte con ellos, por ende quedo en medio y sin solucion.
He revisado el codigo sin obtener mucho, no se como hacerlo para que llegue esa informacion.
Me podrias orientar mas menos como hacerlo.
Muchas gracias.
Amylia Gil costa
Matthew Michael D’Agati functions as the founder of Renewables Worldwide, an Solar Company in Massachusetts.
A couple of decades ago, venturing into an adventurous journey, Matt D’Agati ventured into the world of alternative energy, additionally within a days began effectively marketing megawatts of power, mainly throughout the commercial sector, working with developers of solar farms and local businesses in the “architecture” of a undertakings.
Continuous media contained in the industry, inspired Matthew to register a inter city startup 2 period of time backwards, and within no time, he assumed the role of their CSO, in charge of all function and service formation, in addition to being advertised select few title.
To tactical joint ventures and sheer operate mentality, Matthew D’Agati boosted that business from a modest beforehand-year proceeds to over a 205% rise in arrant income by annum two. Based on that foundation, Renewables Worldwide’s (RW), an seasoned-owned business, was structured with the goal of offering you alternative vigor cures for a smarter and more supportable future.
Even more specifically, recognizing there is a niche in the promote and an improved approach to gain final results, RW is one of a handful of businesses in the states to target on shoppers exchange, concentrating in both industrial and household solar run ranch off-take. A sight is to create a revenues facilities on a local, regional, national level, offering various inexhaustible electricity items within the of RW.
This enthusiasm in each sustainable industry continues on to stimulate and drive Matt in proceeding his journey to work with providers that publish the exact same of offering alternative energy treatments for a extra renewable potential. Matthew includes their in commercial from a business program at Hesser College.
Exploring sun-powered energy universe insights from Matt D’Agati.
Hola,
Soy Edouard Thyssen, consultor financiero en Sofisa Finance SA y parte de una familia con cinco generaciones dedicadas a los negocios. Me especializo en apoyar empresas que quieren levantar fondos para crecer o consideran vender para maximizar su valor.
Con Sofisa Finance SA, puedo ofrecerle acceso a financiamiento competitivo y un acompañamiento estratégico para una venta exitosa. Trabajamos con una red de socios financieros y compradores de confianza para brindarle soluciones a la medida de sus necesidades.
Si le interesa conversar sobre cómo podemos ayudar a cumplir sus objetivos, no dude en responder a este mensaje o contactarme directamente en thyssen@sofisafinancesa.com.
Gracias por su atención,
Edouard Thyssen
Consultor financiero
Sofisa Finance SA