Area Riservata con WordPress

Area Riservata con WordPress senza plugin. Ecco come fare.

Area Riservata con WordPress, come crearla? È questa la domanda che è stata posta in un famoso gruppo di utenti WordPress su Facebook, naturalmente la maggior parte delle persone iscritte ha consigliato di installare un plugin che ti permette di settare un’area riservata in WordPress.
Nessuno ti vieta di utilizzarli, ma resta il fatto come già detto in precedenti articoli, di non utilizzare tanti plugin! Il tuo sito non ne trarrà vantaggi.

Area Riservata con WordPress: dove iniziare.

Partiamo dal presupposto che non utilizzeremo nessun plugin e tanto meno ne svilupperemo uno ad hoc, quindi non ci resta che utilizzare i famosi Custom Post Type detto anche CPT. Conosci già questo argomento? Se non hai nemmeno la minima idea di cosa essi siano ti consiglio di leggere il mio articolo sulle loro funzionalità “Cosa sono i Custom Post Type e come usarli
Torniamo a noi, per costruire l’area riservata andremo a creare un CPT che chiameremo, appunto, “Area Riservata” dove andranno inseriti i contenuti che solo gli utenti registrati potranno vedere.

Creare Custom Post Type

Apriamo il file functions.php del nostro tema WordPress, preferibilmente effettua questa operazione nel tema child, ed inseriamo il seguente codice:


add_action('init', 'crea_contenuti');
function crea_contenuti() {
$labels = array(
'name'               => __('Area Riservata'),
'singular_name'      => __('Contenuto'),
'add_new'            => __('Aggiungi Contenuto'),
'add_new_item'       => __('Nuovo Contenuto'),
'edit_item'          => __('Modifica Contenuto'),
'new_item'           => __('Nuovo Contenuto'),
'all_items'          => __('Elenco Contenuti'),
'view_item'          => __('Visualizza Contenuti'),
'search_items'       => __('Cerca Contenuto'),
'not_found'          => __('Contenuto non trovato'),
'not_found_in_trash' => __('Contenuto non trovato nel cestino'),
);
$args = array(
'labels'             => $labels,
'public'             => true,
'rewrite'            => array('slug' => 'contenuti'),
'has_archive'        => true,
'hierarchical'       => false,
'menu_position'      => 5,
'supports'           => array(
'title',
'editor',
'thumbnail'
),
);
register_post_type('area-riservata', $args);
}
Area Riservata con WordPress
Area Riservata con WordPress: creiamo un Custom Post Type
Area Riservata con WordPress
Area Riservata con WordPress: aggiungiamo contenuto al Custom Post Type

Ok, hai creato il CPT, come secondo passaggio rendiamo i contenuti del nostro Custom Post Type privati. Inserisce questa funzione sempre nel file function.php


function force_type_private($post)
{
if ($post['post_type'] != 'area-riservata' || $post['post_status'] == 'trash')
return $post;
$post['post_status'] = 'private';
return $post;
}
add_filter('wp_insert_post_data', 'force_type_private');

Perfetto, ora dobbiamo rendere visibili i contenuti privati agli utenti con il ruolo “sottoscrittore”. Naturalmente, se permetti ai tuoi utenti di registrarsi al tuo blog devi impostare che i nuovi utenti abbiamo il ruolo sottoscrittore.


$subRole = get_role( 'subscriber' );
$subRole->add_cap( 'read_private_posts' );

Ci siamo quasi, non resta che definire un template per la nostra “Area Riservata”. Creiamo un file “areariservata.php” nella cartella del nostro tema. Per crearla devi accedere tramite FTP al tuo hosting.
Nel file andremo a definire un template in cui mostreremo, nel caso siamo loggati un semplice messaggio di benvenuto nel caso contrario un form per la registrazione.


<?php
/*
Template Name: Area Riservata
*/
?>
<?php get_header(); ?>
<?php //se l'utente è loggato mostra messaggio di benvenuto e post
if ( is_user_logged_in() ) {?>
<?php global $current_user; get_currentuserinfo(); echo 'Benvenuto, '. $current_user->user_login ; ?>
<hr />
<?php //loop custom post type privati
$wpquery = new WP_Query(array(
'post_type'      => 'area-riservata',
));
while ($wpquery->have_posts()): $wpquery->the_post();
?>
<div class="post">
<h2><?php the_title(); ?></h2>
<?php the_content('Leggi...');?>
</div>
<hr />
<?php endwhile; ?>
<?php } else { ?>
Area Riservata
<?php if (!(current_user_can('level_0'))){ ?>
<h2>Login</h2>
<form action="<?php echo get_option('home'); ?>/wp-login.php" method="post">
<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="20" />
<input type="password" name="pwd" id="pwd" size="20" />
<input type="submit" name="submit" value="Send" class="button" />
<p>
<label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me</label>
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
</p>
</form>
<a href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
<?php } else { ?>
<h2>Logout</h2>
<a href="<?php echo wp_logout_url(urlencode($_SERVER['REQUEST_URI'])); ?>">logout</a><br />
<a href="http://XXX/wp-admin/">admin</a>
<?php }?>
<?php } ?>
<?php get_footer(); ?>
Area Riservata con WordPress
Area Riservata con WordPress: effettua accesso

Una volta inserito questo codice, occorre effettuare questo passaggio,andiamo a creare una nuova pagina che chiameremo in questo caso ” Area Riservata”e nel pannello Attributi Pagina sceglieremo il template “Area Riservata”.

Inseriamo la nuova pagina nel tuo menù di WordPress, in modo che sia visibile, successivamente entriamo nel CPT e aggiungiamo un nuovo contenuto.

Nella Home del tuo sito se sei loggato vedrai il contenuto privato come nell’immagine sottostante, se non sei loggato ti comparirà la maschera per effettuare il login(vedi img sinistra).

Naturalmente la maschera del login potrai personalizzarla aggiungendo un’pò di codice CSS, cosa che io al momento non ho fatto.

Area Riservata con WordPress
Area Riservata con WordPress: visuale front-end con login effettuato

Di default i contenuti privati, nel titolo dell’articolo hanno la dicitura privato, quindi non credo che piaccia la scritta e dovremo rimuoverla inserendo questo codice all’interno del file function.php


// Rimuovo Privato dal titolo
function clean_title($titolo) {
$titolo = attribute_escape($titolo);
$cerca = array(
'#Privato:#'
);
$sostituisci = array(
'-' // Sostituiamo la voce "Privato" con
);
$titolo = preg_replace($cerca, $sostituisci, $titolo);
return $titolo;
}
add_filter('the_title', 'clean_title');

ed infine, per essere precisi, togliamo la barra di WordPress agli utenti che si registrano esccludendo l’utente amministratore.


if (!current_user_can('manage_options')) {
add_filter('show_admin_bar', '__return_false');
}
if (!current_user_can('edit_posts')) {
add_filter('show_admin_bar', '__return_false');
}

Dato che abbiamo utilizzato i Custom Post Type per creare un Area Riservata con WordPress per i contenuti riservati, potremmo arricchire il CPT con Categorie e Metabox. Ma non temere a breve ti mostrerò come fare!
Stay tuned!

Autore Bartolomeo

Consulente tecnico con la passione per il web e la tecnologia e tutto quello che le ronza intorno.
Nel tempo libero scrivo articoli per il mio blog su argomenti vari, in particolare su configurazione Windows, Linux e WordPress.

Condividi questo articolo!

14 Commenti

Alex Rispondi

Chiedo venia. Ero io che sbagliavo, il codice funziona correttamente. L’unica cosa che ti chiedo (sarebbe il TOP per me), uso il Divi Theme, è forse possibile creare il template con esso? Ti sarei enormemente grato se mi dessi qualche dritta in merito.
Grazie ancora (a prescindere).

Bartolomeo Rispondi

Ciao Alex,
ok abbiamo la conferma che il codice gira anche con l’ultima versione di WP.
Cosa intendi con è possibile creare un template con esso?
Il codice che vedi è da integrare ad un tema che hai scelto.

Un Saluto

Alex Rispondi

Ciao. Innanzitutto grazie. Sul web c’è un sacco di roba ma solo riferita a plugin che vorrei evitare. Il codice cui sopra risale a qualche anno fa. La domanda è: funziona ancora con wordpress ora giunto alla versione 5.9? Ciedo poiché l’ho inserito nel function.php del tema child, ma segnala diversi errori. E’ forse cambiato qualcosa? A me non serve chissà cosa, ma è fondamentale che solo utenti registrati al sito possano avere accesso a contenuti che deono essere riservati.
Grazie anticipatamente.
P.S. sapresti indicarmi risorse dove capire come mettere in stand by utenti che si registrano al sito finché non li autorizzo? Mi sta bene il “chiunque può registrarsi”, ma vorrei poi essere io a dire ok, ti accetto. Altrimenti avere un area riservata non ha molto senso se poi chi si iscrive è chiunque.
Grazie ancora.

Bartolomeo Rispondi

Ciao Alex,
non ho assoluta certezza che non vi siano errori sull’ultima versione di WordPress ma in linea di massimo dovrebbe funzionare tutto, nel caso di eventuali errori possiamo correggerli.
Per quanto riguarda la gestione utenti, quindi gestire la registrazione utenti, presumo che debba utilizzare un plugin apposito in quanto su WP l’impostazione di default è Chiunque può registrarsi.

Un Saluto

Bartolomeo Rispondi

Buongiorno Giulio,
la pagina negozio a cui fai riferimento è quella di WooCommerce o l’hai creata manualmente?
Saluti

Giulio Rispondi

Ciao volevo farti i complimenti per l’articolo , molto chiaro , avrei una domanda : e se volessi mettere come riservata la “pagina negozio” ? perchè vedo che il template “area riservata” funziona con tutti tranne che con la pagina negozio , a me servirebbe proprio quello , grazie in anticipo !

Bartolomeo Rispondi

Ciao Giovanni,
che permessi hai impostato per l’utente? Se hai seguito tutti i passaggi, noterai che impostiamo per l’utente sottoscrittore la possibilità di vedere gli articoli privati nel CPT.
Saluti

Giancarlo Rispondi

Ciao!
Ho un problema… non riesco a visualizzare i contenuti della pagina che ho messo in modalità riservata. Quindi dopo il login vedo solo il logo (che non ho nascosto) e il footer. Mi sai dire il motivo e come risolvere? Ti ringrazio

Bartolomeo Rispondi

Ciao Francesco,
ti riferisci ad aggiungere categorie e metabox nell’area riservata? Al momento non ho pubblicato nulla in merito sul blog ma si può fare tranquillamente partendo come riferimento dal codice che è presente nell’articolo.
Appena ho un’pò di tempo libero provo a pubblicare un post con la tua richiesta.
Saluti

Francesco Pinnola Rispondi

Salve, ottimo articolo, ma soprattutto ottimo blog complimenti, è da poco che uso WordPress, ho implementato il tuo script in un esempio locale e funziona egregiamente, mi chiedevo se hai già pubblicato qualcosa su come aggiungere Categorie e Metabox. Grazie

Bartolomeo Rispondi

Ciao,
mi fa piacere di averti aiutato, se hai bisogno di altre informazioni puoi scrivermi nei commenti.

Marco Bernaus Rispondi

Ottimo articolo, grazie mille!

Valerio Rispondi

Ciao, ottimo articolo.
Avrei la necessità di raggruppare tutti i contenuti creando una lista su un widget.
Di base wordpress mostra gli “ultimi articoli”, vorrei avere un widget con gli “ultimi contenuti”.
Come posso precedere?
Grazie

Lascia un commento

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

Ho letto la policy privacy e accetto il trattamento dei miei dati personali in conformità al D.Lgs. 196/2003