Crearea unui formular de înregistrare utilizator în WordPress
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'];
?>
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.

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

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.

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

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ă?

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

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.
