Crearea unui formular de înregistrare utilizator în WordPress

16 iul. 2014, 17:43:41
Vizualizări: 14.6K
Voturi: 0

Am o pagină cu un formular numită Test Form care conține următorul formular:

<div id="container">
<form action="wp-content/themes/max-magazine/TestForm.php" method="post" name="myForm">
Utilizator <input type="text"  name="uname" />
Email  <input id="email" type="text" name="uemail" />
Parolă  <input type="password"  name="upass" />
<input type="submit" value="Trimite" /></form>
</div>

Și în backend am un fișier PHP numit TestForm.php

<?php 
function create_account(){
$user = 'AccountID';
$pass = 'AccountPassword';
$email = 'email@domain.com';
if ( !username_exists( $user )  && !email_exists( $email ) ) {
    $user_id = wp_create_user( $user, $pass, $email );
    $user = new WP_User( $user_id );
    $user->set_role( 'contributor' );
} 
}
add_action('init','create_account');
?>

Când această funcție este definită în fișierul functions.php, funcționează corect și creează utilizatorul, dar aceeași funcție în TestForm.php nu funcționează. Vă rog să mă ajutați.

De asemenea, voi prelua datele din formular astfel:

<?php
$user = $_POST['uname'];
$pass = $_POST['upass'];
$email = $_POST['uemail'];
?>
0
Toate răspunsurile la întrebare 1
11

Trimiteți datele din formular direct către fișierul TestForm.php, care este un script PHP independent de logica WordPress. Puteți seta atributul action al formularului la o valoare goală, astfel încât datele formularului să fie trimise către aceeași pagină care conține formularul, care face parte din WordPress:

<div id="container">
    <form method="post" name="myForm">
        Utilizator <input type="text"  name="uname" />
        Email  <input id="email" type="text" name="uemail" />
        Parolă  <input type="password"  name="upass" />
        <input type="submit" value="Trimite" />
    </form>
</div>

În acest caz, datele formularului sunt trimise către o pagină WordPress, iar add_action('init','create_account'); este declanșat dacă îl adăugați în fișierul functions.php, de exemplu astfel:

add_action('init','create_account');
function create_account(){
    //Aici poate fi necesară validarea datelor
    $user = ( isset($_POST['uname']) ? $_POST['uname'] : '' );
    $pass = ( isset($_POST['upass']) ? $_POST['upass'] : '' );
    $email = ( isset($_POST['uemail']) ? $_POST['uemail'] : '' );

    if ( !username_exists( $user )  && !email_exists( $email ) ) {
       $user_id = wp_create_user( $user, $pass, $email );
       if( !is_wp_error($user_id) ) {
           //utilizatorul a fost creat
           $user = new WP_User( $user_id );
           $user->set_role( 'contributor' );
           //Redirecționare
           wp_redirect( 'URL_unde_doriți_să_redirecționați' );
           exit;
       } else {
           //$user_id este un obiect WP_Error. Gestionați eroarea
       }
    }

}

P.S.: Vă sugerez să utilizați un markup modern HTML5 pentru formulare și tipuri de input.

16 iul. 2014 18:45:54
Comentarii

Deci nu pot să creez pagina TestForm.php?

Gaurav Gaurav
16 iul. 2014 18:57:49

Atunci problema este cum să obțin valorile utilizatorului, email-ului și parolei în functions.php din formularul myForm?

Gaurav Gaurav
16 iul. 2014 18:58:40

Ai acces la $_POST în interiorul funcției create_account(), așa că poți obține valorile așa cum faci în orice alt formular PHP. Și poți crea TestForm.php dar va trebui să încarci motorul WordPress în acel fișier, ceea ce cred cu adevărat că nu dorești.

cybmeta cybmeta
16 iul. 2014 19:07:33

Și unde definesc această funcție? În functions.php? Sau în TestForm.php?

Gaurav Gaurav
16 iul. 2014 19:09:09

În functions.php

cybmeta cybmeta
16 iul. 2014 19:10:11

Deci înseamnă că ar trebui să o fac în functions.php? Atunci cum va ști formularul că trebuie să răspundă către care fișier PHP? Și dacă trebuie să redirecționez către o altă pagină după înregistrarea reușită?

Gaurav Gaurav
16 iul. 2014 19:11:11

Cum să redirecționez către altă pagină după succes?

Gaurav Gaurav
16 iul. 2014 19:11:43

Folosește wp_redirect. Cred că confunzi URL-ul cu locația scriptului PHP.

cybmeta cybmeta
16 iul. 2014 19:13:14

Te rog să-mi spui unde să pun acel wp_redirect?

Gaurav Gaurav
16 iul. 2014 19:24:40

Puneți wp_redirect acolo unde doriți să fie executat, evident. De exemplu, dacă doriți să fie executat după un wp_create_user cu succes, puneți-l după verificarea dacă wp_create_user a creat corect un utilizator. Consultați răspunsul editat. Cred că întrebarea ta despre "Crearea unui formular de înregistrare WordPress" este deja răspunsă, întrebări mai specifice ar trebui puse în întrebări noi, de exemplu, cum să folosești wp_redirect? Altfel, putem avea o discuție fără sfârșit aici.

cybmeta cybmeta
16 iul. 2014 19:31:52

Aș sugera să adăugați câteva verificări isset() la datele $_POST. Altfel, s-ar putea să vedeți avertismente PHP.

helgatheviking helgatheviking
16 iul. 2014 19:56:15
Arată celelalte 6 comentarii