WordPress: mostrare contenuti solo agli utenti registrati (e loggati)

Premessa

Stai realizzando un sito web con WordPress e vorresti mostrare l’avanzamento dei lavori al tuo cliente, il quale però vive in un’altra città e non può sedersi al tuo fianco per esaminare il lavoro svolto. Per aggirare il problema potresti adottare diverse soluzioni, ciascuna con qualche inconveniente:

  • potresti inviare al cliente degli screenshot delle pagine realizzate, ma così facendo non potrà apprezzare tutte le animazioni wow.js che hai inserito e neppure tutte le css transitions che ti sono costate tanta fatica.
  • potresti sviluppare il sito in locale (magari su una virtual machine a cui hai assegnato tramite file hosts lo stesso nome dominio che avrà il sito definitivo) e fare l’upload sul sito reale per il tempo necessario a che il tuo cliente lo esamini, per poi cancellare tutto; ma perderesti prezioso tempo in attività a zero valore aggiunto, quali export ed import del DB WordPress.
  • potresti sviluppare il sito direttamente online, ad esempio su un sottodominio del tuo sito web, ma sai già che al momento di passare al dominio definitivo potresti avere degli inconvenienti, come il dover modificare manualmente i link salvati all’interno del database WordPress.
  • potresti allora sviluppare il sito direttamente online, sul dominio definitivo, ma così facendo qualche visitatore potrebbe “imbattersi” sul sito ancora incompleto. A meno che tu non possa selezionare i visitatori che possono vedere il sito durante lo sviluppo, e mostrare invece a tutti gli altri una pagina di cortesia.
    Ma questa cosa si può fare con WordPress? Certo che sì.

Mostrare i contenuti del sito solo agli utenti registrati

Affinché WordPress presenti a tutti i visitatori del sito una pagina di cortesia, e ne presenti invece i reali contenuti solo ai visitatori registrati, si deve procedere in questo modo:

  1. Registrare gli utenti a cui si vogliono mostrare le pagine del sito, magari con un ruolo che non permetta modifiche alla sua struttura, come il ruolo di Autore. Per maggiori informazioni su come svolgere questa attività vedere il seguente tutorial online:
  2. Fornire al cliente le credenziali e le istruzioni per loggarsi al sito (quando sarà il momento).
  3. Predisporre e pubblicare la pagina di cortesia come una normale pagina di WordPress.
  4. Annotarsi l’ID della pagina di cortesia.
    Quando si è in modifica di un elemento (post o pagina) di WordPress, nella barra degli indirizzi ne è indicato l’ID, Ad esempio:

    nomesito/wp-admin/post.php?post=nnn&action=edit

    (dove nnn rappresenta l’ID dell’elemento)

  5. Creare un tema "figlio" (tradotto: "child").
    La guida ufficiale di WordPress per gli sviluppatori (il “Codex”) contiene una pagina in lingua italiana che descrive come creare un tema child . Al termine di questa procedura nella cartella principale del tema child saranno disponibili i file functions.php e style.css.
  6. Modificare il file functions.php del tema child, inserendo queste righe di codice (dove “nnn” rappresenta l’ID della pagina di cortesia annotato al punto 3):
    function myCourtesyPage() {
      $idCourtesyPage = nnn; 
      if (! is_user_logged_in() ) {
        if ( get_the_ID() <> $idCourtesyPage ) {
          wp_safe_redirect(get_permalink($idCourtesyPage)); 
          die();
        }
      }
    }        
    add_action( 'template_redirect', 'myCourtesyPage' );

A questo punto, un visitatore che ha effettuato il login potrà vedere le pagine del sito, mentre chi non è loggato potrà vedere solo la pagina di cortesia.

Quando il sito sarà definitivo, per renderlo visibile a tutti sarà sufficiente commentare l’ultima riga:

//    add_action( 'template_redirect', 'myCourtesyPage' );

Commento al codice inserito in functions.php

Ecco una breve descrizione (completa di link alla guida per gli sviluppatori di WordPress) per le diverse funzioni utilizzate nel codice inserito nel file functions.php:

  • La funzione is_user_logged_in() determina se il visitatore è loggato. E’ la funzione che permette di discriminare gli utenti che possono accedere al sito rispetto a quelli che possono vedere solo la pagina di cortesia.
  • La funzione get_the_ID() restituisce l’ID della pagina che si sta per visualizzare. Viene utilizzata per evitare che un utente che sta per accedere alla pagina di cortesia venga continuamente reindirizzato alla stessa pagina.
  • La funzione wp_safe_redirect() effettua il reindirizzamento all’URL passato come parametro.
  • La funzione get_permalink() restituisce l’URL della pagina web corrispondente all’ID passato come parametro.
  • La funzione die() termina la elaborazione della pagina corrente (la funzione wp_safe_redirect() non lo fa automaticamente).
  • La funzione add_action() permette di eseguire la funzione myCourtesyPage() nel momento in cui WordPress gestisce l’evento ‘template_redirect’ (ovvero quando viene determinato il template di pagina da utilizzare).

Metodo alternativo

Un metodo alternativo al precedente e che permette maggior libertà nella costruzione della pagina di cortesia, può essere il seguente:

    1. Creare una pagina senza contenuti (l’importante è ottenere l’ID).
    2. Creare nella cartella principale del tema child un file page-nnn.php (dove nnn corrisponde all’ID della pagina creata al punto precedente) ed inserire in questo file il contenuto da visualizzare.
      WordPress utilizzerà questo template per visualizzare la pagina di cortesia.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.