2016-11-20 7 views
9

Ich versuche das folgende zu erreichen und ich weiß nicht, wo ich anfangen soll.Wordpress zwei Schritt Registrierungsformular

Ich versuche, ein Anmeldeformular mit zwei Schritten zu erstellen.

Erster Schritt: hat 2 Eingabefelder (Name, E-Mail) und wenn der Benutzer sendet, wird eine E-Mail mit einem Link zu Schritt zwei gesendet.

Schritt zwei: ein Benutzer gibt den Link ein, der an seine E-Mail gesendet wird, gibt eine Seite mit einem zweiten Formular ein. das hat einen Wert der E-Mail und des Namens, den er verwendet hat, + 2 andere Felder (Benutzername, Passwort), in denen er Zugang zu bestimmten Seiten hat.

Ich konnte nicht finden, wo ich anfangen soll und keine Plugins erfüllen die folgenden.

Grüße,

Mostafa.

+0

Bitte werfen Sie einen Blick auf meine Antwort http://stackoverflow.com/a/40959220/1960558. es ist wirklich lang, aber ich hoffe, dass Sie den Code auf gist leicht verstehen können: https://gist.github.com/avastamin/b49481968fd5f984c1e9bd51f91779b4 –

Antwort

1

Ich denke, jetzt können Sie dieses Contact form 7 Multi-Step Form Plugin versuchen hier unten:

Contact Form 7 Multi-Step Forms

Versuchen Demo here

Später Sie kennen lernen können, wie solche Anmeldeformular zu entwickeln, indem Ihr Talent

+0

Ich möchte so etwas entwickeln, ich brauche nur den Ansatz (: Danke für das Plugin, das sich in schauen wird it. –

1

Versuchen Sie this Plugin für Ihren Zweck .

3

Hier ist eine kurze Beschreibung der Schritte, die Sie ergreifen können.

Stellen Sie sicher, dass der Benutzer eindeutig ist, und speichern Sie die Anmeldeinformationen für die Bestätigung.

if(!email_exists($email)){ 

    /* 
     Store credentials in a custom table 
     with a unique identifier, 
     hashed password and email. 

     Email user with the confirmation link ex. 
     site.com/confirmation/<unique-identifier> 
    */ 

} 

In der confirmation Seite erstellen Sie den Benutzer einfach durch:

// Confirm <unique-identifier> 

// Create user 
$user_id = wp_create_user($email, $password, $email); 

// Set user role 
$user = new WP_User($user_id); 
$user->set_role('contributor'); // or a custom role 
+0

Danke für die Köpfe, würde ich gerne weitere Erklärung bitte. –

+0

@MostafaMohsen, detaillierte Erklärung zu meiner Antwort: http://StackOverflow.com/A/40959220/1960558 –

1
  1. Versuchen o ein eigenes Plugin erstellen und 2 Shortcodes erstellen.

  2. Erstellen Sie 2 Seiten und fügen Sie die 2 Shortcodes ein.

  3. Im ersten shortcode den Code für ein Formular schreiben, damit der Benutzer seine E-Mail-Adresse und seinen Namen eingeben kann.

  4. Geben Sie dann die Details (Name und E-Mail-Adresse) in die Datenbank mit wp_insert_user ein und senden Sie dann eine E-Mail an die E-Mail-Adresse, um einen Link zur zweiten Seite zu erstellen und die verschlüsselte Benutzer-ID in den Link einzufügen.

  5. Wenn der Benutzer auf den Link klickt, wird er auf die zweite Seite umgeleitet, wo der Name und die E-Mail-Adresse automatisch mit Select Query gefüllt werden.

  6. Fügen Sie alle weiteren Details auf dieser Seite ein.

6

SCHRITT 1

Zuerst sollten Sie zwei separate Vorlagen erstellen (eine für jeden Schritt). In der ersten Vorlage sollten Sie ein Formular erstellen, das Benutzer E-Mail an die zweite Seite senden wird. Der Link sollte GET Attribute haben, damit Sie seine E-Mail-Adresse und seinen Vornamen erhalten können. Hier ist ein Beispiel (beachten Sie, dass es verbessert werden kann):

<?php 
/* 
** Template Name: Step 1 
*/ 

get_header(); 

if (!empty($_POST['firstname']) && !empty($_POST['email'])) { 
    $link = 'http://my-site/step-2'; 
    $link = add_query_arg(
     array(
      'firstname' => $_POST['firstname'], 
      'email'  => $_POST['email'], 
     ), 
     $link 
    ); 

    $subject = 'New user registration'; 
    $message = 'Please click on the following link to complete your registration: ' . $link; 
    $headers = array('Content-Type: text/html; charset=UTF-8'); 

    $result = wp_mail($_POST['email'], $subject, $message, $headers); 

    if ($result) { 
     $message = 'Please check your email address to complete the registration'; 
    } else { 
     $message = 'Something went wrong. Please contact the administrator'; 
    } 

    echo $message; 
} else { 
?> 
    <form method="POST" action=""> 
     <input type="text" name="firstname" placeholder="First Name"> 
     <input type="email" name="email" placeholder="Email address"> 
     <input type="submit" value="Submit"> 
    </form> 
<?php 
} 
get_footer(); 

Wir erstellen eine einfache Prüfung, ob das Formular abgeschickt wird und alle Felder ausgefüllt sind. Wenn ja, können wir eine E-Mail senden 2. Schritt


SCHRITT 2

Wir werden eine eigene Vorlage erstellen, in dem wir die Daten aus ersten füllen $_GET verwenden, und wir werden zwei hinzufügen neue Felder (Benutzername und Passwort), die leer sind.

<?php 
/* 
** Template Name: Step 2 
*/ 

get_header(); 

if (!empty($_POST['firstname']) && !empty($_POST['email']) && !empty($_POST['password'])) { 
    $user_id = username_exists($_POST['username']); 

    if (!$user_id and email_exists($_POST['email']) == false) { 

     $user_id = wp_create_user($_POST['username'], $_POST['password'], $_POST['email']); 

     if ($user_id) { 
      update_user_meta($user_id, 'first_name', $_POST['firstname']); 
      $message = 'User has been created'; 
     } 
    } else { 
     $message = 'User already exists!'; 
    } 

    echo $message; 
} else { 
?> 
    <form method="POST" action=""> 
     <input type="text" name="firstname" value="<?php echo (!empty($_GET['firstname'])) ? $_GET['firstname'] : '' ; ?>" placeholder="First Name"> 
     <input type="email" name="email" value="<?php echo (!empty($_GET['email'])) ? $_GET['email'] : '' ; ?>" placeholder="Email Address"> 
     <input type="text" name="username" placeholder="Username"> 
     <input type="password" name="password" placeholder="Password"> 
     <input type="submit" value="Submit"> 
    </form> 
<?php 
} 
get_footer(); 

Wenn das zweite Formular abgeschickt wird, und alles ist in Ordnung, wir den Benutzer erstellen können. Sobald erstellt, können wir den Vornamen aktualisieren.

Sie können meinen Code unbegrenzt ändern, aber dies ist die Basis. Zum Beispiel können wir die Felder erforderlich machen, können wir die Stärke von Passwörtern überprüfen, die Namenslänge usw.

-1

Ich ziehe Shortcode zu verwenden. Hier ist der Schritt. Kompletter Code:

  1. Erstellen Sie eine Seite (Anmeldung). Zum Beispiel [request_form action="/thanks"]

Hinweis: innen thanks_func Sie müssen Benutzer korrekte URL $confirmation_body_text = "/signup/?hid='.$hash.'";

  1. erstellen thanks Seite und fügen Sie diese Kurzwahlnummer:

    [thanks] Thank you page [/thanks]

  2. Neue Tabelle in Benutzerdatenbank erstellen:

    CREATE TABLE wp_new_user ( id int(11) NOT NULL, Name varchar(40) NOT NULL, E-Mail varchar(80) NOT NULL, Benutzername varchar(30) DEFAULT NULL, Passwort varchar(30) DEFAULT NULL, Hash varchar(40) DEFAULT NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Im ersten Schritt E-Mail wird mit Link wie signup?hid=1679091c5a880faf6fb5e6087eb1b2dc

So in der 2. Schritt geschickt werden wir wird den vorhandenen Benutzerdatensatz von diesem eindeutigen E-Mail-Hash abrufen und name undvorab ausfüllenFelder.

  1. Im zweiten Schritt aktualisieren wir nur den vorhandenen Benutzerdatensatz.

    Funktion request_form_func ($ atts, $ content = null) { Extrakt (shortcode_atts (array ( 'id' => false, 'class' => false, 'title' => false, ‚Untertitel '=> false, ' aktion '=> "/ danke", ' key '=> false, ' button_text '=> "Senden" ), $ atts));

    if($class) { $class = ' ' . $class; } 
    else { $class = ''; } 
    
    if(empty($_GET)){ 
        $next_step = false; 
        $db_name = ''; 
        $db_email = ''; 
    } 
    if(isset($_GET['hid'])){ 
        $email_hash = trim($_GET['hid']); 
    
        $table = "wp_new_user"; 
        $project_data = new wpdb('root','root','wordpress','localhost'); // Testserver 
        $rows = $project_data->get_results($project_data->prepare(
         " 
          SELECT id,name, email, hash FROM " . $table . " 
          WHERE hash = %d 
         ", 
         $email_hash 
        )); 
    
        $db_hash = $rows[0]->hash; 
        if($db_hash == $email_hash) { 
         $field_id = $rows[0]->id; 
         $db_name = $rows[0]->name; 
         $db_email = $rows[0]->email; 
         $next_step = true; 
        } 
    } 
    
    $out = ''; 
    
    if($id) { $id = '-'.$id; } 
    
    $out .= '<div class="request_form'.$class.'">'; 
    $out .= '<div class="form-wrap">'; 
    if($title) { 
        $out .= '<span class="title">' . $title . '</span>'; 
    } 
    $out .= '<form id="step-form" class="cf" method="post" action="'.$action.'">'; 
    $out .= '<div class="field-wrap"><label for="fullname'.$id.'"><span class="desc">Name</span>'; 
    $out .= '<input type="text" id="fullname'.$id.'" name="fullname" data-required="true" placeholder="Jon Doe" value="'.$db_name.'"></label></div>'; 
    
    $out .= '<div class="field-wrap"><label for="email'.$id.'"><span class="desc">E-Mail</span>'; 
    $out .= '<input type="email" id="email'.$id.'" name="email" data-required="true" placeholder="[email protected]" value="'.$db_email.'"></label></div>'; 
    
    if($next_step){ 
        $out .= '<div class="field-wrap"><label for="username'.$id.'"><span class="desc">Username</span>'; 
        $out .= '<input type="text" id="username'.$id.'" name="username" data-required="true" placeholder="username"></label></div>'; 
    
        $out .= '<div class="field-wrap"><label for="password'.$id.'"><span class="desc">Password</span>'; 
        $out .= '<input type="password" id="password'.$id.'" name="password" data-required="true" placeholder="password"></label></div>'; 
    

    $ out. = ''; } $ out. = '';

    $out .= wp_nonce_field('step_form', 'step_form_nonce'.$id, true, false); 
    $out .= '</form>'; 
    $out .= '</div>'; 
    $out .= '</div>'; 
    return $out; 
    

    } add_shortcode ('request_form', 'request_form_func');

  2. Dann erstelle ich danke shortcode thanks, die Ihre Formulardaten kümmern wird. Grundsätzlich müssen Sie im ersten Schritt Ihre Daten speichern. Außerdem müssen Sie eine eindeutige ID generieren, die Sie per E-Mail versenden und in der Datenbank speichern können. Der Link wird wie folgt aussehen: 'anmelden? Hid = 1679091c5a880faf6fb5e6087eb1b2dc'

    funktion thank_func ($ atts, $ content = null) { $ out = '';

    if(!empty($_POST) || wp_verify_nonce($_POST['step_form_nonce'],'step_form')){ 
    } 
    else { 
        $out .= '<div class="content-area">'; 
        $out .= '<h2 class="h1 page-title">Something went wrong</h2>'; 
        $out .= '<p class="block">Please Re-Submit your form again</p>'; 
        $out .= '</div>'; 
    
        return $out; 
    } 
    
    if(isset($_POST['fullname'])){ $fullname = trim($_POST['fullname']); } 
    if(isset($_POST['email'])){ $email = trim($_POST['email']); } 
    
    if(isset($_POST['username'])){ $username = trim($_POST['username']); } 
    if(isset($_POST['password'])){ $password = trim($_POST['password']); } 
    if(isset($_POST['hash'])){ $db_hash = trim($_POST['hash']); } 
    $hash = md5(rand(0,1000)); // Generate random 32 character hash and assign it to a local variable. 
    
    $header .= "MIME-Version: 1.0\n"; 
    $header .= "Content-Type: text/html; charset=utf-8\n"; 
    $header .= "From:" . "[email protected]"; 
    
    $confirmation_text = "Thanks for Submitting your first form"; 
    $confirmation_body_text = "/registration/?hid='.$hash.'"; 
    
    $subject = "Please click the link below"; 
    $message = "Name: $fullname\n"; 
    $message .= "Email Address: $email\n"; 
    $message .= "Click the link: $confirmation_body_text\n"; 
    
    if (!empty($username) && !empty($password) && !empty($field_id)){ 
        update_custom_user($username, $password, $$db_hash); 
    } else if (create_custom_user($fullname, $email, $hash) && wp_mail($email, $subject, $message, $header)){ 
    
    } 
    
    $out .= '<div class="content-area">'; 
    $content = do_shortcode($content); 
    $out .= $content; 
    $out .= '</div>'; 
    
    return $out; 
    

    }

    add_shortcode ('dank', 'thanks_func');

Ich schrieb auch 2 Funktion create_custom_user und update_custom_user die Daten Daten aus dem ersten Schritt sparen und username und password 2. Schritt aktualisieren.

function create_custom_user($fullname, $email, $hash){ 
    global $wpdb; 
    $table_name = $wpdb->prefix . "new_user"; 

    $cur_date = new DateTime(); 
    $cur_date->setTimezone(new DateTimeZone('Europe/Berlin')); 
    $cur_date = $cur_date->format('d.m.Y').', '.$cur_date->format('G:i'); 


    $wpdb->insert($table_name, array(
     'name' => $fullname, 
     'email' => $email, 
     'hash' => $hash, 
     'created_at' => $cur_date 

    )); 

    return true; 
} 


function update_custom_user($username, $password, $field_id){ 
    global $wpdb; 
    $table_name = $wpdb->prefix . "new_user"; 

    $cur_date = new DateTime(); 
    $cur_date->setTimezone(new DateTimeZone('Europe/Berlin')); 
    $cur_date = $cur_date->format('d.m.Y').', '.$cur_date->format('G:i'); 


    $wpdb->update($table_name, array(
     'username' => $username, 
     'password' => $password, 
     'updated_at' => $cur_date 
    ), 
     array(
      "id" => $field_id 
     )); 

    return true; 
} 
Verwandte Themen