Creare un modulo di registrazione utente in WordPress

16 lug 2014, 17:43:41
Visualizzazioni: 14.6K
Voti: 0

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'];
?>
0
Tutte le risposte alla domanda 1
11

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

16 lug 2014 18:45:54
Commenti

Quindi non posso creare la pagina TestForm.php?

Gaurav Gaurav
16 lug 2014 18:57:49

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

Gaurav Gaurav
16 lug 2014 18:58:40

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.

cybmeta cybmeta
16 lug 2014 19:07:33

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

Gaurav Gaurav
16 lug 2014 19:09:09

In functions.php

cybmeta cybmeta
16 lug 2014 19:10:11

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?

Gaurav Gaurav
16 lug 2014 19:11:11

Allora come reindirizzare a un'altra pagina in caso di successo?

Gaurav Gaurav
16 lug 2014 19:11:43

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

cybmeta cybmeta
16 lug 2014 19:13:14

Per favore puoi dirmi dove mettere quel wp_redirect?

Gaurav Gaurav
16 lug 2014 19:24:40

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.

cybmeta cybmeta
16 lug 2014 19:31:52

Suggerirei di aggiungere alcuni controlli isset() ai dati $_POST. Altrimenti potresti vedere degli avvisi PHP.

helgatheviking helgatheviking
16 lug 2014 19:56:15
Mostra i restanti 6 commenti