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';
ok. Hier ist ein Code der Registrierungsformularvorlage ... könnten Sie daraus etwas ableiten? http://paste.ofcode.org/rd9Z4VUXjuiEeLBAQnRtxT – Pat
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