woocommerce_my_account tutorial registro quitar personalizado modificar manager formulario finalizar facturacion editar direccion compra campos agregar php wordpress forms woocommerce form-verification

php - tutorial - Los campos del formulario de registro se restablecen después del envío(wordpress y woocommerce)



quitar direccion de facturacion woocommerce (1)

No conozco WooCommerce, pero creo que los resultados del error se deben a estas líneas:

$company_fields_required = (!empty($_POST[''registration_type'']) && ''company'' === $_POST[''registration_type'']);

y

if (!$company_fields_required) { unset($fields[''billing_company'']); unset($fields[''billing_nip'']); }

Después de enviar su formulario "privado" y la validación falló, sus campos se vuelven a cargar. ¿Podría ser ahora que en la variable $ _POST el registration_type está configurado de alguna manera como ''compañía''? Puede probar esto si solo imprime su $ _POST [''registration_type''] al comienzo de la función. Si ese no es el caso, entonces estoy bastante seguro de que el error ocurre en otra función, porque esto tiene sentido para mí hasta ahora.

EDITAR: Después de echar otro vistazo a su código, creo que ninguna de las funciones publicadas es responsable de la mala conducta. La primera función solo es responsable de verificar si faltan algunos de los valores publicados y decir "hey, he aquí un error". Tiene que haber otra función que sea responsable de los campos que luego se muestran en su HTML. Creo que necesitas encontrar esta función.

Tengo el formulario de registro woocommerce con dos secciones:
- Uno para persona privada,
- el otro por compañía.

En la opción de empresa, hay dos campos adicionales. Puedo cambiar entre privado y compañía por botones de radio y luego veo campos relevantes.

Problema: Cuando llene el formulario (como usuario privado) y cometa un error, vuelva a cargar y muestre dónde está el error (eso está bien).

Pero desafortunadamente, después de volver a cargar, carga el formulario con todos los campos (los que también tienen campos adicionales de la empresa). Entonces necesito hacer clic 2 veces entre privado y compañía para restaurar el comportamiento correcto.

¿Cómo puedo arreglar esto? Quiero decir, después de este error de recarga, para mostrar el formulario como inicialmente.

No estoy seguro de que esto sea código responsable de esto, pero probemos:

add_filter(''woocommerce_registration_errors'', ''rs_registration_form_validation'', 10, 3); function rs_registration_form_validation($reg_errors, $sanitized_user_login, $user_email) { global $woocommerce; $company_fields_required = (!empty($_POST[''registration_type'']) && ''company'' === $_POST[''registration_type'']); $shipp_to_different_address = (!empty($_POST[''register_ship_to_different_address'']) && 1 == $_POST[''register_ship_to_different_address'']); $errors = false; $fields = rs_registration_form_fields(); if ($shipp_to_different_address) { $fields += rs_registration_form_fields_address(); } if (!$company_fields_required) { unset($fields[''billing_company'']); unset($fields[''billing_nip'']); } //Validate required foreach ($fields as $field => $settings) { if (false === isset($settings[''required'']) || true === $settings[''required'']) { if (empty($_POST[$field])) { $errors = true; wc_add_notice(''Pole: <strong>''.$settings[''label''].''</strong> jest wymagane.'', ''error''); } } } if ($errors) { return new WP_Error(''registration-error'', ''Proszę poprawić błędy w formularzu''); } return $reg_errors; } add_action(''woocommerce_created_customer'', ''rs_registration_form_submit''); function rs_registration_form_submit($user_id) { $fields = rs_registration_form_fields(); $fields += rs_registration_form_fields_address(); foreach ($fields as $field => $settings) { if (isset($_POST[$field]) && !empty($_POST[$field])) { update_user_meta($user_id, $field, $_POST[$field]); } } } add_filter(''register_form'', ''rs_registration_form''); function rs_registration_form() { $fields = rs_registration_form_fields(); include ''_rs_registration_form.php''; } add_filter(''register_form_address'', ''rs_registration_form_address''); function rs_registration_form_address() { $fields = rs_registration_form_fields_address(); include ''_rs_registration_form.php''; } add_filter(''woocommerce_edit_address_slugs'', ''rs_fix_address_slugs''); function rs_fix_address_slugs($slugs) { $slugs[''billing''] = ''billing''; $slugs[''shipping''] = ''shipping''; return $slugs; } function rs_rejestracja_url() { return get_permalink(244); } function rs_logowanie_url() { return get_permalink(20); } function rs_show_checkout_progress_bar($step = '''') { include ''_checkout_progress_bar.php''; } function rs_order_form_buttons() { include ''_order_form_buttons.php''; } add_filter(''woocommerce_get_checkout_url'', ''rs_get_checout_url''); function rs_get_checout_url($url) { if (is_user_logged_in()) { $url .= ''#step1''; } return $url; } include ''src/RS_Search.php'';