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 second 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!

8 Commenti

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

Marco Bernaus Rispondi

Ottimo articolo, grazie mille!

Bartolomeo Rispondi

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

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 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

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 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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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

    Articoli in fase di pubblicazione

  • Installare Docker su Raspberry Pi 4. Utilizziamo Portainer (18-Lug-2020)
  • Raspberry Pi Imager. Installazione sistema operativo per Raspberry Pi 4 (25-Lug-2020)
  • Ripristinare dati in Sql Server 2019 da operazioni UPDATE e DELETE errati (01-Ago-2020)
  • SQL Server Activity Monitor in Sql Server 2019. Come utilizzarlo (08-Ago-2020)