Come limitare l'accesso a una pagina [senza plugin]
Come limitare l'accesso a una pagina in WordPress. Ad esempio: un utente [senza login] può vedere solo 5 giochi dalla lista. [example.com/game/] e dopo aver cliccato su 'visualizza altri', l'utente deve effettuare il login/registrarsi per poter accedere all'intera lista di 100 giochi. [example.com/game/]
Qualcuno sa come farlo senza usare plugin? grazie

Puoi farlo facilmente con uno shortcode. Aggiungi l'hook a init
e inserisci lo shortcode nella tua funzione collegata.
<?php
add_action('init', 'wpse57819_add_shortcode');
/**
* Aggiunge lo shortcode
*
* @uses add_shortcode
* @return null
*/
function wpse57819_add_shortcode()
{
add_shortcode('restricted', 'wpse57819_shortcode_cb');
}
Poi nella tua funzione di callback, puoi verificare se l'utente è loggato. Se lo è, mostra loro il contenuto. Altrimenti, mostra un messaggio di login. Puoi fare letteralmente qualsiasi cosa qui: verificare le capacità dell'utente per mostrare loro il contenuto (diversi "livelli di membership"), mostrare un intero modulo di login. Un esempio semplice:
<?php
/**
* Funzione di callback per lo shortcode. Verifica se un utente è loggato. Se lo
* è, mostra il contenuto. Altrimenti, mostra un link al modulo di login.
*
* @return string
*/
function wpse57819_shortcode_cb($args, $content=null)
{
// se l'utente è loggato mostra semplicemente il contenuto. Potresti verificare
// ruoli e capacità qui se lo desideri
if(is_user_logged_in())
return $content;
// Se siamo qui, l'utente non è loggato, mostra un messaggio
$defaults = array(
// messaggio mostrato agli utenti non loggati
'msg' => __('Devi effettuare il login per vedere questo contenuto.', 'wpse57819'),
// Link alla pagina di login
'link' => site_url('wp-login.php'),
// testo dell'ancora per il link di login
'anchor' => __('Accedi.', 'wpse57819')
);
$args = wp_parse_args($args, $defaults);
$msg = sprintf(
'<aside class="login-warning">%s <a href="%s">%s</a></aside>',
esc_html($args['msg']),
esc_url($args['link']),
esc_html($args['anchor'])
);
return $msg;
}
Come plugin.
Utilizzo
Da qualche parte nelle tue pagine/articoli:
[restricted]
Contenuto riservato ai membri qui
[/restricted]

Puoi inserire il codice sopra nel tuo file functions.php (escludendo i tag di apertura <?php
). È stato aggiunto un esempio di utilizzo alla risposta.

Non è in codice php, [restricted]
è uno shortcode: http://codex.wordpress.org/Shortcode_API

@Davis: Scusa, ma non funziona nella mia sintassi. [restricted] <a href="sample.com">Sample</a> [/restricted] Cosa c'è che non va? grazie

@Davis: Scusa, ma questo codice potrebbe essere inserito in qualsiasi file php non in un post. Ma nel mio caso non ha funzionato
<?
php code
[restricted]
php code
[/restricted]
php code
?>
Grazie

Se vuoi farlo direttamente in un file php usa semplicemente direttamente il condizionale is_user_logged_in
.

Ho una pagina con degli shortcode. Mostra solo i nomi degli shortcode... Ho fatto così [restricted] [my-shortcode] [/restricted]. ma mostra solo "[my-shortcodes]" come testo. Non lo shortcode reale. Quindi l'ho modificato in..." return do_shortcode($content);" e ora viene visualizzato correttamente. Sto facendo la cosa giusta? Qual è la differenza?

Potrebbe essere utile un shortcode personalizzato Dai un'occhiata a questo plugin http://wordpress.org/extend/plugins/restrictedarea È obsoleto ma puoi usare il codice per il tuo scopo

Per prima cosa è necessario aggiungere un meta box personalizzato che ti permetta di contrassegnare il post come nascosto.
Per i dettagli, clicca sulla risposta originale questo link alla fonte
Ho modificato questa funzione per soddisfare le tue esigenze
add_action( 'pre_get_posts', 'yourtextdomain_pre_get_posts_hidden', 9999 );
function yourtextdomain_pre_get_posts_hidden( $query )
{
// Controlla se è il frontend e la query principale
if( ! is_admin() && $query->is_main_query() )
{
if( ! is_user_logged_in() )
{
// Per i post che vogliamo escludere
$exclude = array();
// Localizza i nostri post contrassegnati come nascosti
$hidden = get_posts(array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'meta-box-checkbox',
'value' => 'true',
'compare' => '==',
),
)
));
// Crea un array di post nascosti
foreach($hidden as $hide)
{
$exclude[] = $hide->ID;
}
// Esclude i post nascosti
$query->set('post__not_in', $exclude);
}
}
}
