Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

113
Visualizações
Compruebe si WooCommerce address_field_1 contiene el número de casa antes de procesar el pedido

A veces, en WooCommerce, se requiere que el cliente complete el nombre de la calle y el número de la casa en un solo campo.

En este caso, queremos validar el campo de pago billing_address_1 de WooCommerce para comprobar si contiene números antes de procesar el pedido. Hemos probado una serie de métodos para hacer esto, pero sin suerte.

Este método estándar de WooCommerce no funciona:

 add_action('woocommerce_checkout_process', 'custom_checkout_field_check'); function custom_checkout_field_check() { // Check if set, if its not set add an error. if ( $_POST['billing_address_1'] && strpbrk($_POST['billing_address_1'], '1234567890') ) wc_add_notice( __( 'Het adresveld moet minimaal een huisnummer bevatten' ), 'error' ); }

Estos devuelven bool (falso) en la página de pago:

 var_dump($_POST['billing_address_1'] == true); var_dump($_POST['billing_address_2'] == true); var_dump($_POST['billing_postcode'] == true); var_dump($_POST['billing_email'] == true);

Esta solución de front-end no funciona.

 document.querySelector("#place_order").addEventListener("click", validateAddressField); function validateAddressField () { console.log('Okay dan!'); }

¿Qué más puedo intentar para garantizar que la validación se lleve a cabo antes de que se procese el pedido?

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

 // Check if address field contains house number otherwise provide error message add_action( 'woocommerce_after_checkout_validation', 'validate_checkout', 10, 2); function validate_checkout( $data, $errors ){ if ( ! preg_match('/[0-9]/', $data[ 'billing_address_1' ] ) ){ $errors->add( 'address', 'Sorry, but the address you provided does not contain a house number.' ); } }
about 4 years ago · Santiago Trujillo Relatório

0

Esto no funciona correctamente en su código: strpbrk($_POST['billing_address_1'], '1234567890') .
La función de PHP preg_match() es más apropiada aquí.

Así que hice algunos pequeños cambios en tu código para que funcione como esperas:

 add_action('woocommerce_checkout_process', 'address_field_validation', 10, 0); function address_field_validation() { // The field value to check $post_value = $_POST['billing_address_1']; // If there is no number in this field value, stops the checkout process // and displays an error message. if ( $post_value && ! preg_match( '/[0-9]+/', $post_value ) ) { // The error message throw new Exception( sprintf( __( 'Het adresveld moet minimaal een huisnummer bevatten', 'woocommerce' ) ) ); } }

Este código está probado y funciona en las versiones 2.6.x y 3.0+ de WooCommerce…

*Este código va en el archivo function.php de su tema (o tema) secundario activo o también en cualquier archivo de complemento.


Referencia: WC_Checkout - código fuente de process_checkout()

about 4 years ago · Santiago Trujillo Relatório

0

Puedes intentar usar el gancho: - woocommerce_after_checkout_validation

Consulte cómo usar este enlace y código de muestra aquí

Déjame saber si necesitas algo más...

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda