Creare un modulo di registrazione utente in WordPress
Ho una pagina con un form chiamato "Test Form" con questo codice:
<div id="container">
<form action="wp-content/themes/max-magazine/TestForm.php" method="post" name="myForm">
Utente <input type="text" name="uname" />
Email <input id="email" type="text" name="uemail" />
Password <input type="password" name="upass" />
<input type="submit" value="Invia" /></form>
</div>
E nel backend ho un file PHP chiamato TestForm.php
<?php
function crea_account(){
$user = 'IDAccount';
$pass = 'PasswordAccount';
$email = 'email@dominio.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','crea_account');
?>
Se questa funzione è definita in functions.php funziona correttamente e crea l'utente, ma la stessa funzione in TestForm.php non funziona. Per favore aiutami.
Inoltre, prenderò i dati dal form in questo modo:
<?php
$user = $_POST['uname'];
$pass = $_POST['upass'];
$email = $_POST['uemail'];
?>
Stai inviando i dati dal modulo direttamente al file TestForm.php
, che è uno script PHP esterno alla logica di WordPress. È uno script indipendente. Potresti impostare l'attributo action
del modulo a una stringa vuota, in questo modo i dati del modulo vengono inviati alla stessa pagina che contiene il modulo, che fa parte di WordPress:
<div id="container">
<form method="post" name="myForm">
Utente <input type="text" name="uname" />
Email <input id="email" type="text" name="uemail" />
Password <input type="password" name="upass" />
<input type="submit" value="Invia" />
</form>
</div>
In questo caso, i dati del modulo vengono inviati a una pagina WordPress e add_action('init','create_account');
viene attivato se lo aggiungi al file functions.php
, ad esempio così:
add_action('init','create_account');
function create_account(){
//Potresti aver bisogno di una validazione dei dati qui
$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) ) {
//l'utente è stato creato
$user = new WP_User( $user_id );
$user->set_role( 'contributor' );
//Reindirizzamento
wp_redirect( 'URL_di_destinazione' );
exit;
} else {
//$user_id è un oggetto WP_Error. Gestisci l'errore
}
}
}
P.S.: Ti suggerisco di utilizzare un markup modulo HTML5 moderno e tipi di input appropriati

Allora il problema è come ottenere i valori di user, email e password in functions.php dal form myForm?

Hai accesso a $_POST
all'interno della funzione create_account()
, quindi puoi ottenere i valori come faresti con qualsiasi altro form in PHP. E puoi creare TestForm.php
ma dovrai caricare il motore di Wordpress in quel file, cosa che penso davvero tu non voglia fare.

E dove sto definendo questa funzione? È in functions.php? O in TestForm.php?

Quindi intendi che dovrei farlo in functions.php? Ma allora come farà il form a sapere a quale file PHP deve rispondere? E cosa succede se ho bisogno di reindirizzarlo a un'altra pagina in caso di registrazione avvenuta con successo?

Usa wp_redirect
. Penso che tu stia confondendo l'URL con la posizione dello script PHP.

Posiziona wp_redirect
dove vuoi che venga eseguito, ovviamente. Ad esempio, se vuoi che venga eseguito dopo un wp_create_user
avvenuto con successo, inseriscilo dopo aver verificato che wp_create_user
abbia creato correttamente un utente. Vedi risposta modificata. Penso che la tua domanda su "Creare un form di registrazione utente in WordPress" sia già stata risposta, domande più specifiche dovrebbero essere poste in nuove domande, ad esempio, come usare wp_redirect
? Altrimenti possiamo avere una discussione infinita qui.
