Registrierungsformularfelder werden nach dem Absenden zurückgesetzt (wordpress & woocommerce)

Ich habe ein Woocommerce-Registrierungsformular mit zwei Abschnitten:
- Eine für Privatpersonen,
- der andere für Unternehmen.

ei der Option Unternehmen gibt es zwei zusätzliche Felder. Ich kann per Optionsfeld zwischen Privat und Firma wechseln und sehe dann relevante Felder.

Problem: Wenn ich das Formular ausfülle (als privater Benutzer) und einen Fehler mache, lade ich das Formular neu und zeige, wo der Fehler liegt (das ist in Ordnung).

Aber nach dem erneuten Laden wird das Formular leider mit allen Feldern geladen (auch mit zusätzlichen Firmenfeldern). Ich muss also zweimal zwischen Privat und Unternehmen klicken, um das richtige Verhalten wiederherzustellen.

Wie kann ich das beheben? Ich meine, nach diesem Fehler beim Neuladen, das Formular wie ursprünglich anzuzeigen.

Ich bin mir nicht sicher, ob dies der dafür verantwortliche Code ist, aber lass es uns versuchen:

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';

Antworten auf die Frage(2)

Ihre Antwort auf die Frage