Come limitare l'accesso a una pagina [senza plugin]

8 lug 2012, 20:01:59
Visualizzazioni: 13.5K
Voti: 4

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

3
Commenti

-1 – Questo è puramente territorio dei plugin.

fuxia fuxia
8 lug 2012 21:17:47

perché non vuoi usare un plugin?

Sisir Sisir
8 lug 2012 21:20:18

Trovata una buona risorsa per farlo: https://www.scratchcode.io/how-to-restrict-pages-or-posts-access-without-login-into-wordpress

Mayank Dudakiya Mayank Dudakiya
20 dic 2020 12:05:15
Tutte le risposte alla domanda 3
7

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]
8 lug 2012 20:32:34
Commenti

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

chrisguitarguy chrisguitarguy
9 lug 2012 15:43:33

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

chrisguitarguy chrisguitarguy
9 lug 2012 16:55:20

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

Juan Lie Juan Lie
9 lug 2012 17:10:24

Sei loggato. Probabilmente è questo il problema.

chrisguitarguy chrisguitarguy
9 lug 2012 18:17:02

@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

Juan Lie Juan Lie
10 lug 2012 16:41:39

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

chrisguitarguy chrisguitarguy
10 lug 2012 17:18:18

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?

pulla pulla
1 lug 2016 13:28:17
Mostra i restanti 2 commenti
0

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

8 lug 2012 20:08:45
0

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);
        }

    }
}
1 ott 2019 15:49:14