Si está familiarizado con HTML, puede agregar «longitud máxima» y «mínimoAtribuye a un campo de entrada para forzar su valor a ser mineros y los caracteres máximos de largo. Todo esto es bueno y fácil, por lo que también podríamos ver lo que sucede en la página de pago de WooCommerce una vez que aplicamos dichos atributos a un campo personalizado determinado.
Alerta de spoiler: longitud máxima trabaja, mientras mínimo no lo hace. Por lo tanto, obligar a un campo de pago dado a tener una longitud mínima es realmente bastante imposible, a menos que validemos los datos publicados (un valor de entrada de campo que no es lo suficientemente largo) una vez que se envía el pago. Eso es un fastidio, y en este artículo también explicaré cómo contactar a WooCommerce para que puedan mejorar una funcionalidad / arreglar un error.
¡Disfrutar!
Php Snippet 1: Establezca el campo de pago «MaxLength»
En el ejemplo a continuación, estoy obligando al campo «Nombre de la compañía» a tener un máximo de 15 caracteres.
Una vez en la página de pago, verá que no puede ingresar físicamente a más de 15 caracteres dentro de ese campo. Puede ver el resultado en la captura de pantalla de arriba.
/** * @snippet Maxlength @ WooCommerce Checkout Field * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 4.5 * @community https://businessbloomer.com/club/ */ add_filter( 'woocommerce_checkout_fields', 'bbloomer_checkout_fields_custom_attributes', 9999 ); function bbloomer_checkout_fields_custom_attributes( $fields ) { $fields['billing']['billing_company']['maxlength'] = 15; return $fields; }
Php Fnippet 2: Establezca el campo de pago «MinLength»
Aquí viene el otro lado de la medalla. No es posible forzar una longitud mínima en un campo de pago. Aquí están todas las cosas que probé (y fallé descaradamente), utilizando el mismo PHP exacto del fragmento 1 arriba.
Este primer intento no funciona en absoluto:
/** * @snippet NOT WORKING: Minlength @ WooCommerce Checkout Field * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 4.5 * @community https://businessbloomer.com/club/ */ add_filter( 'woocommerce_checkout_fields', 'bbloomer_checkout_fields_custom_attributes', 9999 ); function bbloomer_checkout_fields_custom_attributes( $fields ) { $fields['billing']['billing_company']['minlength'] = 15; return $fields; }
Este segundo intento agrega correctamente el atributo «MinLength» a la entrada del campo de la empresa, pero no sucede nada en el final de validación, es decir, puede enviar el pago y no se devolverá ningún error:
/** * @snippet NOT WORKING: Minlength @ WooCommerce Checkout Field * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 4.5 * @community https://businessbloomer.com/club/ */ add_filter( 'woocommerce_checkout_fields', 'bbloomer_checkout_fields_custom_attributes', 9999 ); function bbloomer_checkout_fields_custom_attributes( $fields ) { $fields['billing']['billing_company']['custom_attributes']['minlength'] = 15; return $fields; }
Básicamente, el campo no validará mínimo Incluso si el mínimo El atributo está ahí:
El tercer intento es otra solución dado que mínimo no está funcionando. Traté de agregar un «patrón«Atributo en su lugar, que logra lo mismo (mínimo de 15 caracteres):
/** * @snippet NOT WORKING: Minlength @ WooCommerce Checkout Field * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 4.5 * @community https://businessbloomer.com/club/ */ add_filter( 'woocommerce_checkout_fields', 'bbloomer_checkout_fields_custom_attributes', 9999 ); function bbloomer_checkout_fields_custom_attributes( $fields ) { $fields['billing']['billing_company']['custom_attributes']['pattern'] = '.{15,}'; return $fields; }
Bueno, nada funciona y el pago todavía se presenta a pesar de que hay un error de entrada de campo. Entonces, No importa lo que hagamos, incluso si nos pusimos mínimo El atributo WooCommerce no está validando el valor de entrada del campo de pago. La única opción que tenemos es detener el proceso de pago a menos que una entrada de campo tenga 15 caracteres o más. Lo he logrado de esta manera:
/** * @snippet WORKING: Minlength Validation @ WooCommerce Checkout Field * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 4.5 * @community https://businessbloomer.com/club/ */ add_action( 'woocommerce_checkout_process', 'bbloomer_checkout_fields_custom_validation' ); function bbloomer_checkout_fields_custom_validation() { if ( isset( $_POST['billing_company'] ) && ! empty( $_POST['billing_company'] ) ) { if ( strlen( $_POST['billing_company'] ) < 15 ) { wc_add_notice( 'Company name requires at least 15 characters', 'error' ); } } }
Y esto es lo que sucede una vez que ingreso a un nombre de empresa que es menos de 15 caracteres y envíe el pago:
Esto es genial y funciona, pero si WooCommerce pudiera manejar mínimo En cambio, no habría problemas en absoluto y no tendría la necesidad de encontrar una solución de validación personalizada para detener el pago.
Lástima, porque WooCommerce "lee" longitud máximaasí que no veo por qué no debería hacer lo mismo con mínimo y patrón. Entonces, hoy, les mostraré cómo hacer que WooCommerce sepa que hay una mejora de errores / funcionalidad que vale la pena llamar la atención de los desarrolladores.
Para hacer eso voy a https://github.com/wooCommerce/woocommerce/issues y haga una búsqueda rápida para ver si alguno de los problemas abiertos contiene la palabra "MinLength":
Ahora que sé que no hay un problema duplicado, puedo crear un "nuevo problema" (botón verde), ingresar un título y una buena descripción: https://github.com/wooCommerce/woocommerce/issues/27803
Al hacerlo, he solicitado una mejora y no solo me he quejado de algo que no funciona o, peor, no dijo nada. Es una comunidad de código abierto y tenemos que ayudarnos mutuamente.
Puede seguir a los desarrolladores de WooCommerce abriendo, discutiendo y cerrando este "problema" en el mismo enlace.
Espero que esto ayude a alguien.