Problem mit email_exists in shortcode

Ich habe ein benutzerdefiniertes Registrierungsformular, das ich per Kurzwahl in eine Seite einfüge. Die Shortcode-function sieht folgendermaßen aus:

function custom_registration_form_shortcode() { $error = FALSE; if (isset($_POST["submit"])) { //Get other $_POST data here $email = is_email($_POST["email"]); if (!$email) { $error = TRUE; $errorMsg = "EMAIL NOT VALID"; } if (email_exists($email)) { $error = TRUE; $errorMsg = "EMAIL EXISTS"; } } if (!$error) { // Creating random password, setting username, wp_create_user, etc. working fine $output = "GOOD"; } // Some other stuff here that does not set $error to TRUE if ($error) { $output = $errorMsg; } return $output; } function jogol_add_shortcodes() { add_shortcode('jogol-registration-form', 'custom_registration_form_shortcode'); } add_action('init', 'jogol_add_shortcodes'); 

Was passiert, ist, dass der Benutzer gut registriert wird, aber es gibt immer noch “EMAIL EXISTS” zurück, als ob wp_create_user ausgeführt wird, bevor email_exists ($ email) oder der Code zweimal beim Senden läuft.

Ich werde verrückt und jede Hilfe / Hinweise werden sehr geschätzt. Vielen Dank!

UPDATE: Hier ist eine abgespeckte Version. Keine validation Nur zu Testzwecken.

 function registration_form_shortcode() { if (isset($_POST["registration_submit"])) { if (email_exists($_POST["email"])) { $output = "EMAIL EXISTS"; } else { $username = $_POST["email"]; $random_password = wp_generate_password(8, false); $status = wp_create_user($username, $random_password, $_POST["email"]); $output = "GOOD"; } } $form = '
'; $output .= $form; return $output; } function add_my_shortcodes() { add_shortcode('registration-form', 'registration_form_shortcode'); } add_action('init', 'add_my_shortcodes');

Was ich getan habe (und bitte, bitte):

  1. Setzen Sie diesen Code in die functions.php meines Themes
  2. Hinzufügen des Shortcodes zu einer Seite über [Registrierungsformular]

Was es tun soll, wenn ich eine gültige Email-Adresse eingib, die noch nicht bei meiner WP-Installation registriert ist und den Send-Button drücke:

  1. Erstellen Sie den Benutzer
  2. Zeigen Sie “GUT” über dem Formular an

Was es tatsächlich macht:

  1. Erstellen Sie den Benutzer
  2. Zeigen Sie “E-MAIL EXISTS” über dem Formular an

Ich habe keine Ahnung. Irgendwelche Ideen?

Solutions Collecting From Web of "Problem mit email_exists in shortcode"

Dies ist eine Basisversion Ihres obigen Codes, die die Registrierungslogik (die in init behandelt wird) von der Formularausgabe trennt, die vom Shortcode ausgeführt wird.

Es wird grundsätzlich funktionieren, aber es fehlt jede Bestätigung, nur um das Konzept zu zeigen.

 $wpse_email_exists = null; function registration_form_shortcode() { global $wpse_email_exists; $output = '
'; echo $wpse_email_exists; return $output; } function manage_my_registration() { global $wpse_email_exists; add_shortcode('registration-form', 'registration_form_shortcode'); if (isset($_POST["registration_submit"])) { if (email_exists($_POST["email"])) { $wpse_email_exists = "EMAIL EXISTS"; } else { $username = $_POST["email"]; $random_password = wp_generate_password(8, false); $status = wp_create_user($username, $random_password, $_POST["email"]); $wpse_email_exists = "GOOD"; } } } add_action('init', 'manage_my_registration');

Wie Sie bereits in The Loop gezeigt haben, besteht das eigentliche Problem mit Ihrem Code aus der ersten Frage darin, dass der Code zweimal ausgeführt wird, wenn andere Plugins den Inhalt erhalten und den Shortcode parsen.

Sie rufen email_exists auch wenn Sie eine ungültige E-Mail-Adresse haben. Versuchen Sie, das if (email_exists($email)) zu einem elseif wie elseif zu elseif :

 $email = is_email($_POST["email"]); if (!$email) { $error = TRUE; $errorMsg = "EMAIL NOT VALID"; } elseif (email_exists($email)) { $error = TRUE; $errorMsg = "EMAIL EXISTS"; }