Di recente mi è capitato di dovere creare automaticamente delle pagine personali per ogni utente appena registrato in un sito creato in WordPress.
La nuova pagina creata avrà come titolo l’username del nuovo utente appena registrato! Funzione molto utile se si vuole utilizzare il plugin S2Member e le Custom Capabilities per la creazione di aree private.
Prima di continuare a leggere vi invito a leggere il codex ufficiale di WordPress al seguente indirizzo: Function Reference/wp insert post
La funzione che utilizzeremo è <?php wp_insert_post( $post, $wp_error ); ?> appositamente modificata per il nostro scopo. Quello che dovrete fare è semplicemente copiare ed incollare il seguente script nel file functions.php contentuo all’interno del vostro tema.
// Crea nuova pagina utente al momento della registrazione
[php]
function karibusana_create_page($user_id){
$the_user = get_userdata($user_id);
$new_user_name = $the_user->user_login;
$my_post = array();
$my_post[‘post_title’] = $new_user_name;
$my_post[‘post_type’] = ‘page’;
$my_post[‘comment_status’] = ‘closed’;
$my_post[‘post_content’] = ‘Benvenuto! stiamo impostando la tua pagina personale, questa sarà disponibile a breve’;
$my_post[‘post_status’] = ‘publish’;
wp_insert_post($my_post);
}
add_action(‘user_register’, ‘karibusana_create_page’);
[/php]
Vi ricordo che è possibile anche creare dei nuovi post e non solo delle pagine, per fare questo basta cambiare la variabile $my_post[‘post_type’] = ‘page’; in $my_post[‘post_type’] = ‘post’;
Ho recentemente ricevuto delle richieste su come personalizzare ulteriormente questa funzione ad esempio su come indirizzare gli utenti alla loro pagina perosnale subito dopo aver eseguito il login o su come creare un pulsante nel menù che rimandi alla pagina privata di ogni singolo utente, per questo ho deciso di aggiornare questo articolo e di seguito trovate le due funzioni da inserire nel file functions.php del vostro tema.
// Funzione per re-indirizzare automaticamente gli utenti dopo il login
[php]
function karibusana_login_redirect( $redirect_to, $url, $user ) {
global $user;
get_currentuserinfo();
if(isset( $user->roles) && is_array($user->roles)) {
//controllo se amministratore
if(in_array("administrator", $user->roles)){
// indirizzo amministratore su dashboard
$redirect_to = admin_url();
}else {
// indirizzo utente alla sua pagina
$redirect_to = home_url( ‘/’ . $user->user_login );
}
}
return $redirect_to;
}
add_filter(‘login_redirect’, ‘karibusana_login_redirect’, 10, 3);
[/php]
// Funzione per creare pulsante nel menu
[php]
function karibusana_menu_button($items){
// Controllo se l’utente è connesso per mostrare il pulsante solo agli utenti connessi
if(is_user_logged_in()){
// Ottengo i dati dell’utente
global $current_user;
get_currentuserinfo();
// Creo variabile per indirizzare l’utente a www.miosito.it/nomeutente
$url = home_url( ‘/’ . $current_user->user_login . ‘/’ );
// Titolo dle pulsante
$title = ‘Pagina Utente’;
// Aggiungo il pulsante al menu
$items .= ‘<li><a href="’ . $url . ‘">’ . $title . ‘</a></li>’;
}
return $items;
}
add_filter( ‘wp_nav_menu_items’, ‘karibusana_menu_button’ );
[/php]
Ti serve aiuto per personalizzare il tuo sito WordPress? Non esitare a contattarmi
LUCA LEONE dice
Buon pomeriggio. Ho trovato la funzione interessantissima, solo che io avrei la necessità di creare un mini sito per ogni utente Quindi diciamo 4 o 5 pagine al massimo dove l’utente può caricare delle foto o scrivere i testi delle pagine e basta in spazi da me stabiliti. Si può fare con s2Members?
Vincenzo dice
Ciao Luca, dipende da cosa vuoi esattamente realizare se ti servono dei mini siti potresti utilzzare WordPress multisite in questo modo ogni utente avrebbe un suo sottodominio. Inoltre non ho capito se le pagine dei singoli utenti devono essere pubbliche (cioè visibili a tutti i visitatori del sito) oppure se private (i plugin come s2Members ti permettono di gestire aree private). In linea di massima potresti assegnare gli utenti al ruolo di editor e poi tramite codice assegnare a questi utenti le specifiche pagine o posts sui quali possono apportare le modfiche. In ogni caso ti servono delle funzioni personalizzate, purtroppo non sono a conoscenza di nessun plugin che ti offra tutto questo già pronto per essere utilizzato.
LUCA LEONE dice
In realtà mi servirebbe un qualcosa come Dokan il plugin dei multivendor, dove ogni venditore gestisce il proprio negozio non passando però dal backend di WP Ovviamente lì le pagine per ogni nuovo negozio sono già definite (e questo mi sta bene) ma sono appunto rivolte all’acquisto, a me non interessa acquistare ma soltanto poter caricare una gallery o scrivere un testo di una pagina direttamente dal frontend. Altrimenti vedo di adattare Dokan. WP Customer Area lo conoscete?
Vincenzo dice
Si conosco WP Customer Area e qui trovi anche un mio tutorial Area riservata su WordPress con WP Customer Area però non ho capito bene se le pagine degli utenti devono essere private (cioè visibili solo agli utenti) oppure pubbliche.
LUCA LEONE dice
Dovrebbero essere private.
LUCA LEONE dice
Alla fine ho utilizzato la tua funzione e il plug in Members per assegnare un ruolo specifico al nuovo utente che ora può leggere e modificare pagine private che gli appartengono e ho risolto.
Ogni nuovo utente che si iscrive ha quindi una pagina privata che può modificare solo lui dall’area di amministrazione.
Ho modificato la tua funzione inserendo questa stringa
$my_post[‘post_status’] = ‘private’;
subito sotto a $my_post[‘post_status’] = ‘publish’;
Solo che devo dare a mano l’autore della pagina dopo che questa è stata creata. In generale potrebbe anche andare bene, ma se volessi automatizzare anche questo step? Ho pensato di inserire questo comando nella tua funzione.
$my_post[‘post_author’] = $user_id;
Sarebbe corretto???
Vincenzo dice
Ciao Luca, si dovrebbe funzionare 😉
SALVATORE dice
Salve, ho creato un sito web artistico , avrei bisogno di un plugin che mi crei al momento della registrazione di un socio dell’associazione una o due pagina web visibile ma a tutti modificabile dall’utente che si registra o dall’amministratore. Mi potrebbe aiutare ?
Davide dice
Ciao, ho trovato solo ora questo articolo interessantissimo.
Io avrei bisogno di potere creare 100 pagine nuove per ogni utente registrato (l’indirizzo deve essere: indirizzodelsito/nomeutente/1 poi 2 poi 3 fino a 100)
Esiste un sistema che me lo faccia in automatico?
Grazie
Davide
Vincenzo dice
Ciao Davide, un modo potrebbe essere quello di inserire la funzione dentro un ciclo for che si ripeta 100 volte. Se posso chiederti, perché vuoi creare 100 pagine diverse per ogni utente? Magari ci sono altre soluzioni per quello che vuoi fare?
Davide dice
Ho bisogno di avere 100 pagine per ogni nominativo, ma non si devono iscrivere, li devo inserire io e dargli a disposizione 100 pagine. Con il tuo sistema lse li inserisco io, non funziona, come posso fare? Grazie mille.
Davide
Vincenzo dice
Potresti provare con edit_user_created_user invece di user_register però devi modificare la funzione passando i parametri necessari altrimenti non funziona.
Ganpaolo dice
Ciao Vincenzo .. Molto utile ed interessante il tuo articolo. Mi chiedevo se con alcune modifiche al codice era possibile far creare in automatico (alla registrazione di un utente) una pagina visibile a tutti con link personalizzabili e possibilità di aggiornamento di questa pagina dalla dashboard utente. Sto utilizzando già il plugin eMember per l’area riservata.
Come potrei risolvere fare?
Vincenzo dice
Ciao Giampaolo, non riesco a capire bene cosa vorresti fare. Se ti serve una pagina che sia uguale per tutti non avrebbe senso crearla di nuovo ogni volta che un utente si registra. Forse ha più senso creare una pagina ed impostare la visualizzazione del contenuto solo per utenti appartenenti ad uno specifico gruppo o con particolari permessi.
Gianpaolo dice
Ciao Vincenzo… Grazie per la tua risposta. Si, infatti non è molto chiaro.
Si la pagina è uguale per tutti ma ad esempio, il link per i social, non sono uguali per tutti, l’immagine del profilo, ed eventualmente neanche i link per affiliazione esterni. Sono interessato a personalizzare, dall’area riservata utente, questi dati, in modo che ognuno di loro possano inserire i propri dati. Spero sia più comprensibile… Grazie
Vincenzo dice
Ciao Gianpaolo purtroppo non credo che sia facile creare un processo automatizzato che ti permetta di inserire dei link specifici per ogni singolo utente, per quanto riguarda l’immagine del profilo, se non sbagli utilizzi eMember, io non ho mai utilizzato questo plugin però facxendo una ricerca onliine ho trovato questo post che potrebbe fare al caso tuo https://www.tipsandtricks-hq.com/forum/topic/emember-profile-picture
Valter dice
Ciao Vincenzo,
mi sono appena iscritto alla tua newsletter, avevo bisogno di un aiuto ho appena letto il tuo articolo su “Crea automaticamente pagine per nuovo utente”.
Nel mio caso essendo una scuola ho utenti diversi alcuni per materia d’insegnamento, mi servirebbe che quando quelli di un certo corso si loggano vadano direttamente nella loro pagina privata e non in altre.
Potresti aiutarmi?
Grazie
Valter
Vincenzo dice
Ciao Valter benvenuto nella newsletter di Karibusana. Con il sistema descritto nell’articolo è possibile creare delle pagine per singoli utenti, ogni utente potrà solo accedere alla sua pagina. Forse a te serve una pagina che sia visibile a per un certo gruppo di utenti? In questo caso forse il plugin Groups protrebbe fare al caso tuo. Per una consulenza più dettagliata non esitare a contattarmi per email
Emanuele Fedrici dice
…purtroppo funziona solamente per impostare la Login Welcome Page all’interno del plugin s2Member, io ho bisogno di mettere un url del tipo: http://www.miosito.it/nomeutenteconnesso/ all’interno del menu… e in questo caso purtroppo le sintassi di tipo %%current_user_login%% non funzionano…
non riesco a trovare una soluzione 🙁
Vincenzo dice
Ciao Emanuele ti ho inviato la soluzione al tuo indirizzo email. Spero di esserti stato d’aiuto. A presto 😉
Emanuele Fedrici dice
Grazie funziona!
Ho impostato la pagina come privata e edita dall’utente che si sta registrando,
Mi è rimasto un dubbio:
Come posso creare un link che vada poi alla pagina personale dell’utente connesso?
Ovviamente deve variare in base all’utente connesso…
Vincenzo dice
Ottimo, puoi provare a seguire questa guida https://s2member.com/kb-article/customizing-your-login-welcome-page/ per indirizzare gli utenti alla loro pagina dopo il login. Non ho avuto il tempo di testarlo ma dovrebbe funzionare.
Emanuele Fedrici dice
Domanda: se volessi settate come privato il post e come autore l’utente che si sta registrando?
Vincenzo dice
Ciao Emanuele la risposta alla tua domanda è nell’articolo, controlla il codice per ulteriori modifiche e personalizzazioni
giovanni dice
Ciao Vincenzo,
mi collego a questo post per chiederti un consiglio: devo creare un sito per un ordine professionale (con wordpress, logicamente).
Sono alla ricerca di un plugin – anche a pagamento – con il quale, quando un utente si iscrive, venga creata automaticamente la propria pagina personale (logicamente visibile solo a lui e all’amministratore) e nella quale l’amministratore potrà inserire dei contenuti esclusivi solo per quell’utente (ad esempio degli attestati personali in pdf).
Ne sto provando molti, ma o sono incompleti o creano solo il form di registrazione/login personalizzato o non creano queste pagine personali.
Sapresti indicarmi qualche plugin?
Quelli che ho provato sono:
WP Members
Register Plus Redux
Sideways8 private pages
Customer Area
S2member (che sto provando ora ma è alquanto “ostico”…)
Vincenzo Vecchio dice
Ciao Giovanni ti consiglio di utilizzare s2member, ti permette di creare pagine e aree personali per ciascun utente, puoi seguire la guida che ho linkato nell’articolo. Se ti serve aiuto posso svilppare un semplice plugin a pagamento, magari scrivimi una email per ulteriori dettagli 😉