Home CMS Creare un Area Riservata con WordPress senza Plug-in

Creare un Area Riservata con WordPress senza Plug-in

267
0

Grazie a questo tutorial, possiamo:

  • Inseriti contenuti visibili a tutti gli aventi accesso
  • Inseriti contenuti assegnati a un singolo utente

Questa area riservata non utilizzermo plugin, passiamo quindi al codice da applicare al nostro sito wordpress.

Iniziamo creando un post dedico chiamato area riservata, mettendo aggiungi post e visualizza il listato di post, lo inseriremo nel nostro file Functions.php.

 

//creo il post type per l’area riservata
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','comments'),
    );

   register_post_type('area-riservata', $args);
}

A seguire inseriamo una serie di instruzioni che servono per il funzionamento del sistema:

  • rendo i post del custom post type privati.
  • rendo i post privati visibili ai sottoscrittori.
  • rimuoviamo la parola privato dal titolo del post.
  • nascondiamo la barra di wordpress.

 

//rendo il post type privato di default
function force_type_private($post)
{
   if ($post['post_type'] == 'area-riservata') {
        if ($post['post_status'] == 'publish') {
	        $post['post_status'] = 'private';
        } 
    }
    return $post;
}
add_filter('wp_insert_post_data', 'force_type_private');

//rendo il post privato visibile al ruolo sottoscrittore
$subRole = get_role( 'subscriber' );
$subRole->add_cap( 'read_private_posts' );

// rimuovo privato dal titolo
function clean_title($titolo) {
	$titolo = esc_attr($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');

//nascondo la barra di wordpress tranne che all' admin
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');
}

Castonizziamo dei select, naturalmente le inseriamo nel meta post. Questo select metabox sara’ scritto cosi:

// creo il metabox per il post type area riservata

function users_meta_init(){
  add_meta_box("users-meta", "User Select", "users", "area-riservata", "normal", "high");
}
add_action("admin_init", "users_meta_init");

// lista degli utenti

function users(){
  global $post;
  $custom = get_post_custom($post->ID);
  $users = isset($custom["users"][0]);
	$user_args  = array(
		// cerco solo gli utenti di tipo sottoscrittore
		'role' => 'Subscriber',
		'orderby' => 'display_name'
	);

	// creo la WP_User_Query object
	$wp_user_query = new WP_User_Query($user_args);
	// richiamo i risultati
	$subscribers = $wp_user_query->get_results();
	// controllo i risultati
	if (!empty($subscribers))
	{
	    // l'attributo di name è la chiave del customfield
	    echo "<select name='users'>";
	    	echo '<option value="all">Tutti</option>';
	    // loop che mostra tutti i sottoscrittori
	    foreach ($subscribers as $subscriber){
	        // richiamo i dati dei sottoscrittori
	        $subscriber_info = get_userdata($subscriber->ID);
	        $subscriber_id = get_post_meta($post->ID, 'users', true);
	        if($subscriber_id == $subscriber_info->ID) { 
	        	$subscriber_selected = 'selected="selected"'; 
	        } else { 
	        	$subscriber_selected = ”;
	        }

	        echo '<option value='.$subscriber_info->ID.' '.$subscriber_selected.'>'.$subscriber_info->display_name.'</option>';
	    }
	    echo "</select>";
	} else {
	    echo 'No authors found';
	}
}

// salvo l'impostazione della lista
add_action('save_post', 'save_userlist');
function save_userlist(){
  global $post;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
	    return $post->ID;
	}
   update_post_meta($post->ID, "users", $_POST["users"]);
}

Grazie al codice appena creato, guarda su, possiamo seleziona se tutti utenti registrati possono vedere il post o solo uno degli utenti che sono nel listato del select.

Creamo la pagina area riservata lato front end, quindi un template aposito, con tutte le restrizioni che abbiamo fatto tramite file funzione del sito. Quindi il richiamo dell’utente che puo’ entrare solo dopo login, il fintro se il post e’ visualizzato per tutti o non.
Di seguito pagina finale del template.

<?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 //info dell'utente loggato
			  global $current_user;
			  get_currentuserinfo();
			  $my_user = $current_user->user_login ;
			  $my_user_level = $current_user->user_level ;
			  $my_user_id = $current_user->ID;
			  echo 'Benvenuto, '. $my_user;

	    ?>

		<hr />

		<?php //se l'utente è l'admin mostro tutti i contenuti, altrimenti mostro quelli dell'utente associato al post
			  if($my_user_level == 10) {
				  //loop con tutti i contenuti
				  $wpquery = new WP_Query(array(
				        'post_type'	=> 'area-riservata',
				  ));
			  } else {
			      //loop con i contenuti del relativo utente + quelli contrassegnati come all
				  $wpquery = new WP_Query(array(
						'post_type'	=> 'area-riservata',
						'meta_query' => array(
							'relation' => 'OR',
								 array(
						            'key' => 'users',
						            'value' => $my_user_id,
						            'compare' => '='
						         ),
						         array(
						            'key' => 'users',
						            'value' => 'all',
						            'compare' => '='
						         )
							 )
						)
					);
			  }

		?>

		<?php if ( $wpquery -> have_posts() ) : while ( $wpquery -> have_posts() ) : $wpquery -> the_post(); ?>
			<?php //richiamo le info dell'utente associato al post
				  $user_selected = get_post_meta($post->ID, 'users', TRUE);
				  $user_info = get_userdata($user_selected);
			?>

		    <div class="post">
			    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
			    <?php the_content('Leggi…');?>
			    <?php if($user_selected == 'all') { ?>
			    	<small><i><?php  echo 'Contenuto per Tutti'; ?></i></small>
			    <?php } else  { ?>
			    	<small><i><?php  echo 'Contenuto per l\'utente: ' . $user_info->user_login . "\n";	 ?></i></small>
			    <?php } ?>
			</div>
			<hr />

		<?php endwhile; else: ?>

			<div class="post">
				<h3>Spicenti, non ci sono contenuti…</h3>
		    </div>
		<?php endif; ?>
		<a href="<?php echo wp_logout_url( home_url() ); ?>" title="Logout">Logout</a>	
	<?php } else { ?>
		Area Riservata
			<h2>Login</h2>
			<?php wp_login_form(); ?>
	<?php } ?>
</div>
<?php get_footer(); ?>
Previous articleEventi onmousedown
Next articleIncrementare upload_max_filesize nel tuo WordPress

LEAVE A REPLY

Please enter your comment!
Please enter your name here