2016-04-18 17 views
0

I WooCommerce Anmeldeformular mit zwei Abschnitten haben:
- Einer für Privatperson,
- der andere für Unternehmen.
Anmeldeformular Felder einreichen zurückgesetzt, nachdem (Wordpress & WooCommerce)

In der Firmenoption gibt es zwei zusätzliche Felder. Ich kann per Radio-Buttons zwischen Privat und Firma wechseln und dann sehe ich relevante Felder.

Problem: Wenn ich das Formular (als privater Benutzer) ausfüllen und einen Fehler machen, Formular neu laden und zeigen, wo der Fehler ist (das ist in Ordnung).

Aber leider lädt nach dem Reload das Formular mit allen Feldern (auch mit zusätzlichen Firmenfeldern). Also muss ich zweimal zwischen Privat und Firma klicken, um das richtige Verhalten wiederherzustellen.

Wie kann ich das beheben? Ich meine nach diesem Fehler neu zu laden, um das Formular wie anfangs anzuzeigen.

ich nicht sicher sein, dass dieser Code dafür verantwortlich ist, aber wir 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'; 

Antwort

0

Ich weiß nicht, WooCommerce, aber ich denke, die Fehler auf, weil diese Zeilen:

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

und

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

Nachdem Sie Ihre "private" Form und die Validierung fehlgeschlagen vorgelegt, Ihre Felder ein wieder geladen. Könnte es nun sein, dass in Ihrer $ _POST-Variable der registration_type irgendwie auf 'company' gesetzt ist? Sie können dies testen, wenn Sie am Anfang der Funktion nur Ihre $ _POST ['registration_type'] drucken. Wenn das nicht der Fall ist, dann bin ich mir ziemlich sicher, dass der Fehler in einer anderen Funktion passiert, denn das macht für mich bisher Sinn.

EDIT: Nachdem ich einen anderen Blick auf Ihren Code, denke ich, keine der veröffentlichten Funktionen ist verantwortlich für das Fehlverhalten. Die erste Funktion ist nur dafür zuständig, zu überprüfen, ob einige der geposteten Werte fehlen und zu sagen "hey, hier ist ein Fehler". Es muss eine andere Funktion geben, die für die Felder verantwortlich ist, die später in Ihrem HTML angezeigt werden. Ich denke, du musst diese Funktion finden.

+0

ok. Hier ist ein Code der Registrierungsformularvorlage ... könnten Sie daraus etwas ableiten? http://paste.ofcode.org/rd9Z4VUXjuiEeLBAQnRtxT – Pat

+0

Ja, ich denke ich kann. Ihre benutzerdefinierten Felder werden wahrscheinlich nach dem Benutzernamen, dem Passwort usw. angezeigt. Dies bedeutet, dass sie entweder mit dem Hook woocommerce_register_form oder register_form eingefügt werden. Die Funktion, die erstellt und daher für Ihre benutzerdefinierten Felder verantwortlich ist, muss einen dieser 2 Hooks verwenden. Finden Sie jetzt die richtige Funktion? – Tim

Verwandte Themen