Area riservata per utenti registrati in WordPress Multi Blog

Pubblicato il 5 Aprile 2011
Autore:
L'articolo tratta di Wordpress .

Premessa

Qualche tempo fa mi è stato chiesto di creare un’area riservata per utenti registrati in una installazione multi blog di WordPress; gli obiettivi erano i seguenti:

  1. creare un form di registrazione utente dotato della possibilità di inserimento di campi custom da inserire in una sidebar o in una pagina;
  2. modificare la pagina profilo utente eliminando dati non utili quali, ad esempio, i campi google talk, jabber, ecc., aggiungendovi, nel contempo, i campi custom definiti nel punto 1;
  3. creare un form di login al sito dotato delle opzioni “registrati”, “ricorda password”, “esci” e “accedi al tuo profilo”;
  4. creare un sistema di gestione tramite short code che permettesse di inserire porzioni di contenuti all’interno di normali pagine e articoli per i soli utenti registrati.

Le soluzioni

Area riservata WordPress MultiblogInizialmente ho pensato di affidarmi a combinazioni di plugin gratuiti quali ad esempio: Members, Social Access Control, Subscribe2 for Social Privacy, Private Files for Social Privacy e altri).

La quantità di impostazioni da modificare e l’appesantimento dell’installazione di WordPress, tuttavia, mi hanno dissuaso quasi immediatamente.

Poi ho effettuato qualche ricerca su eventuali plugin a pagamento e mi sono imbattuto in questa pagina. Applicazioni sicuramente interessanti che però contengono decine di funzionalità a me non utili e, per quello che ho potuto constatare nei siti dei loro creatori, comunque complicati da configurare.

Entrambe la soluzioni peraltro, per quello che ho potuto constatare, non sono realizzate appositamente per WordPress multi blog e, pertanto, avrei costretto il cliente ad effettuare 27 volte, tanti sono i blog e non è detto che ne vengano creati altri in futuro, ciascuna configurazione.

Pertanto l’unica soluzione praticabile era quella di agire a livello di template, integrare cioè le funzionalità all’interno del tema di WordPress.

Analizziamo pertanto ogni singolo elemento contenuto nella premessa.

Form di registrazione a WordPress dotato di campi custom

Vi sono diversi plugin gratuiti che permettono di creare un form di registrazione utente in WordPress. I due più utilizzati sembrano essere i seguenti: Register Plus Redux e Login With Ajax.

Personalmente non ho utilizzato nessuno dei due, non prendetevela!

Posseggo da qualche tempo una licenza developer di Gravity Forms (lo ritengo il miglior plugin per la gestione di form in circolazione) che contiene l’add-on “user registration”, soluzione adeguata alle mie esigenze. Ho pertanto creato un form e l’ho quindi rielaborato tramite questo componente aggiungendo due campi custom: “azienda” e “funzione in azienda”; ovviamente potete crearne infiniti sulla base della vostre esigenze.

Le immagini che seguono mostrano il form di registrazione ottenuto e le opzioni dell’add-on “User Registration” di Gravity Forms:

Form registrazione utenti di WordPress

Creazione form utenti WordPress con Gravity Forms

Pagina profilo utente di WordPress: aggiunta campi custom e rimozione campi non necessari

Ovviamente l’aggiunta di campi custom non implica automaticamente che il sistema li riconosca e, soprattutto, che li pubblichi nella pagina del profilo utente.

A tale scopo è necessario effettuare una modifica nel file functions.php, presente nella cartella che contiene il tema che state utilizzando:

Aggiungete quindi, in qualsiasi punto di quel file, il seguente codice:

 

  1. // CAMPI PERSONALIZZATI PROFILO UTENTE
  2.  
  3. function my_custom_userfields( $contactmethods ) {
  4. // AGGIUNGI QUÌ I CAMPI PERSONALIZZATI
  5. $contactmethods['azienda']       = 'Azienda';
  6. $contactmethods['funzione']       = 'Funzione aziendale';
  7. // FINE INSERIMENTO CAMPI PERSONALIZZATI
  8.  
  9. return $contactmethods;
  10. }
  11. add_filter('user_contactmethods','my_custom_userfields',10,1);
// CAMPI PERSONALIZZATI PROFILO UTENTE

function my_custom_userfields( $contactmethods ) {
// AGGIUNGI QUÌ I CAMPI PERSONALIZZATI
$contactmethods['azienda']       = 'Azienda';
$contactmethods['funzione']       = 'Funzione aziendale';
// FINE INSERIMENTO CAMPI PERSONALIZZATI

return $contactmethods;
}
add_filter('user_contactmethods','my_custom_userfields',10,1);

 

La funzione permette di visualizzare i campi custom precedentemente creati all’interno della pagina del profilo utente. Ovviamente è necessario avere realizzato un form di registrazione che contenga i campi “azienda” e “funzione” ed eventuali altri che volete inserire in tale pagina.

Contemporaneamente ho deciso di rimuovere tutti gli elementi della pagina del profilo che non ritenevo utili per gli utenti registrati.

I vari jabber, google talk, ecc..

Per effettuare tale operazione è necessario inserire questo codice all’interno del solito functions.php:

 

  1. // RIMOZIONE USER META CHE NON INTERESSANO
  2.  
  3. function remove_unwanted_contactmethod( $contactmethods ) {
  4. unset($contactmethods['aim']);
  5. unset($contactmethods['jabber']);
  6. unset($contactmethods['yim']);
  7. return $contactmethods;
  8. }
  9. add_filter('user_contactmethods','remove_unwanted_contactmethod',10,1);
  10.  
  11. // RIMOZIONE BARRA scelta colore profilo utenti
  12.  
  13. if(is_admin()){   remove_action("admin_color_scheme_picker", "admin_color_scheme_picker");   add_action( 'personal_options', 'ozh_personal_options'); }
// RIMOZIONE USER META CHE NON INTERESSANO

function remove_unwanted_contactmethod( $contactmethods ) {
unset($contactmethods['aim']);
unset($contactmethods['jabber']);
unset($contactmethods['yim']);
return $contactmethods;
}
add_filter('user_contactmethods','remove_unwanted_contactmethod',10,1);

// RIMOZIONE BARRA scelta colore profilo utenti

if(is_admin()){   remove_action("admin_color_scheme_picker", "admin_color_scheme_picker");   add_action( 'personal_options', 'ozh_personal_options'); }

 

La prima porzione di codice elimina gli user meta che non interessano, poi ho preferito anche rimuovere le opzioni di scelta colore (sempre presenti nella pagina del profilo utente). È possibile anche rimuovere la barra di amministrazione (per intenderci quella presente dalla versione 3.2 di WordPress anche nel front end.) aggiungendo quest’altro codice all’interno dello stesso file:

 

  1. add_filter( 'show_admin_bar', '__return_false' );
  2. add_action( 'admin_print_scripts-profile.php', 'hide_admin_bar_prefs' );
  3. function hide_admin_bar_prefs() { ?>
  4. < style type="text/css">
  5.     .show-admin-bar { display: none; }
add_filter( 'show_admin_bar', '__return_false' );
add_action( 'admin_print_scripts-profile.php', 'hide_admin_bar_prefs' );
function hide_admin_bar_prefs() { ?>
< style type="text/css">
    .show-admin-bar { display: none; }

 

La prima riga elimina la funzionalità, le successive la stampa di tali opzioni all’interno della pagina del profilo utente. Di seguito la pagina profilo modificata.

Creazione di un form di login in WordPress

Per la creazione di un form di accesso all’area registrata del sito ho combinato porzioni di codice individuato in vari blog che trattano dell’argomento. Ovviamente è necessario modificare titoli e i tag di formattazione in base alle proprie esigenze. Tramite di esso sarà possibile pertanto effettuare il login rimanendo nella home page del sito (o ad altra pagina modificando il campo hidden “redirect to”) e accedere alla propria pagina profilo, nonché alla pagina registrazione, recuperare la password e, infine, uscire dall’area riservata.

 

Form registrazione a WordPress

Non essebdi riuscito, in nessuno modo, a stampare il codice ho dovuto inserirlo all’interno di una immagine, di seguito il file txt che permette di visualizzarlo.

Il codice ovviamente può essere inserito in qualsiasi punto del vostro template, ad esempio in una sidebar. Tale operazione può essere effettuata manualmente o tramite un widget. In quest’ultimo caso fate attenzione, dovrete dotarvi di un plugin che permetta di gestire php al suo interno (ad esempio Samsarin PHP Widget). Aggiungo che con WordPress 3.0 è stata resa disponibile una funzione specifica per il login degli utenti, nella fattispecie wp_login_form. Modificherò il codice quanto prima. Le immagini che seguono mostrano il form di accesso al sito e il menu utente.

 

Creazione di sezioni riservate ad utenti registrati tramite short code

Veniamo, infine, alla creazione del codice necessario a creare contenuti riservati agli utenti registrati. Vogliamo definire uno short code (un comando tra parentesi quadrate) che possa essere inserito in qualsiasi pagina o articolo. La sintassi, da applicare direttamente nell’editor di WordPress in una pagino o articolo potrebbe essere la seguente:

contenuti della pagina

[registrato]

contenuti per utenti registrati

[/registrato]

Chiunque vedrà la stringa “contenuti della pagina” (o qualsivoglia altro contenuto), solo gli utenti registrati e che hanno effettuato login potranno visualizzare la stringa “contenuti per utenti registrati” (ovviamente in luogo di questa potete inserire qualsiasi tipo di contenuto: testo, immagini, link, collegamenti a file da scaricare, ecc.) Ad ottenere tale scopo ci può aiutare Justin Tadlock, uno tra sviluppatori di WordPress che più ammiro;  è sufficiente infatti aggiungere tale codice in functions.php ed il gioco è fatto.

 

  1. // AGGIUNTA CODICE UTENTE REGISTRATO
  2.  
  3. add_shortcode( 'registrato', 'member_check_shortcode' );
  4.  
  5. function member_check_shortcode( $atts, $content = null ) {
  6.      if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
  7.         return do_shortcode($content);
  8. return 'non sei registrato';
  9. }
// AGGIUNTA CODICE UTENTE REGISTRATO

add_shortcode( 'registrato', 'member_check_shortcode' );

function member_check_shortcode( $atts, $content = null ) {
	 if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
		return do_shortcode($content);
return 'non sei registrato';
}

 

L’ultima riga evidentemente contiene il messaggio che verrà visualizzato agli utenti non registrati e può essere comodamente modificata come lo può essere, ovviamente, il termine “registrato”.

L’articolo da cui ho tratto il codice presenta altre funzioni correlate a questa: ad esempio come mostrare particolari contenuti ai soli utenti NON registrati.

Devo aggiungere che ho dovuto effettuare una piccola modifica al codice originale, nella fattispecie la riga:

return do_shortcode($content);

sostituisce l’originale:

return $content;

Lo scopo è quello di permettere l’inserimento di short code all’interno di [registrato] [/registrato] (per approfondimenti rimando al Codex), utile nel caso in cui, ad esempio, si voglia mostrare un form o una galleria immagini realizzata con Nextgen o altro.

Infine se come me non vi accontentate della email che WordPress spedisce ad ogni nuovo utente consiglio l’utilizzo di New User Email Setup o similari. Purtroppo il codice relativo a tale funzionalità è contenuto nella cartella “include”  di WordPress, pertanto ogni modifica manuale dovrebbe essere rifatta ad ogni aggiornamento del sistema. Creare una funzione apposita in functions.php non garantirebbe comunque il risultato sperato in quanto le funzioni dichiarate in quel file verrebbero comunque eseguite prima del codice contenuto nella cartella include.

Pertanto un plugin di quel tipo sembra essere l’unica soluzione utile ai nostri scopi.

Conclusione

Mi auguro di essere stato sufficientemente chiaro, tenete presente che io e php non andiamo molto d’accordo! Realizzare un’area per utenti registrati in questo modo mi sembra sufficientemente semplice, certo, con un plugin realizzato su misura si potrebbe ottenere lo stesso risultato in pochi istanti (questo articolo, peraltro, potrebbe rappresentare la base per realizzarne uno).

Sembra, inoltre, possibile dotare il sistema di ulteriori funzionalità: ho immaginato, per esempio, la possibilità di dotare il vostro sito di più aree per utenti registrati. Pensiamo a classi di utenti: gold, silver, bronze, ciascuno in grado di visualizzare contenuti specifici. Si può ottenere tale risultato creando classi di utenti tramite Role Manager e utilizzando il codice proposto nell’articolo di Justin Tadlock presentato in precedenza.

Diversi utenti mi hanno segnalato difficoltà con la copia del codice, purtroppo non ho trovato un plugin che mantenesse una formattazione adeguata, ecco allora un FILE TXT contenente tutto il codice necessario ad implementare le funzioni elencate nell’articolo. Il codice funziona perfettamente in un sito da me realizzato, dovete ovviamente modificare alcune sue parti come, ad esempio, quella relativa ai campi custom.

13 commenti all'articolo “Area riservata per utenti registrati in WordPress Multi Blog”

  1. 9 Maggio 2011 alle 09:11

    Ciao!

    Io devo ancora provare a mettere in pratica questa guida gli ho solo dato una letta veloce ma se posso permettermi SEI UN GENIO!!!

    Era proprio quello di cui avevo bisogno!!

    Io non sono un gran programmatore diciamo che me la cavo…

    Cmq complimenti ancora!!

    • 9 Maggio 2011 alle 19:43

      Esagerato, tieni presente che ho perso più tempo a trovare un plugin decente per stampare codice che a scrivere l’articolo. Fai attenzione ai

  2. 20 Giugno 2011 alle 10:29

    ciao, mi spieghi meglio dove devo mettere sti codici che non ho capito?! grazie

  3. 20 Giugno 2011 alle 12:37

    se inserisco i comandi nel file functions e poi lo carico mi da errore. non so proprio come fare…

    • 20 Giugno 2011 alle 13:42

      Controlla la sintassi php, il plugin che ho usato per copiare il codice a volte trasforma

  4. 20 Giugno 2011 alle 13:45

    mi lasci un tuo contatto msn, almeno ne parliamo li?

    • 20 Giugno 2011 alle 19:42

      Mi spiace non uso msn, puoi scrivere qui di preciso che operazione hai effettuato e che risultato hai ottenuto?

  5. 23 Giugno 2011 alle 11:37

    @Gennaro alla fine dell’articolo ho aggiunto un file txt contenente tutto il codice php descritto nell’articolo che funziona perfettamente in un mio sito. Prova a copiarlo nel tuo template, file functions.php adeguando la porzione relativa ai campi custom. Assicurati che WordPress sia aggiornato, altro non posso fare.

  6. 11 Dicembre 2011 alle 17:28

    ciao
    grazie per la guida utilissima e ben fatta
    funziona tutto benissimo ma non mi rimuove i campi come la scelta colore o gli user meta, non riesco a capire il perchè se mi puoi dare un aiuto.
    ti ringrazio e complimenti ancora
    giova

    • 11 Dicembre 2011 alle 17:44

      Spiegami meglio, purtroppo è da un po’ che ho scritto l’articolo… :)

  7. 19 Dicembre 2011 alle 17:49

    scusa non ho capito dove precisamente devo mettere il codice della guida “Creazione di sezioni riservate ad utenti registrati tramite short code” mi puoi aiutare per favore :(

Scrivi il tuo commento