Area Riservata con WordPress

Come creare un Area Riservata con WordPress senza plugin

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

 

Manuali per sviluppo plugin:

Autore Bartolomeo

Mi chiamo Bartolomeo Alberico, sono un 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 WordPress e SEO.

Condividi questo articolo!

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