Cum să restricționezi o pagină [fără plugin]

8 iul. 2012, 20:01:59
Vizualizări: 13.5K
Voturi: 4

Cum să restricționezi o pagină în WordPress. De exemplu: utilizatorul [fără logare] poate vedea doar 5 jocuri din listă. [example.com/game/] iar după ce apasă pe 'vezi mai multe', utilizatorul trebuie să se logheze/înregistreze și abia apoi poate accesa întreaga listă de 100 de jocuri. [example.com/game/]

Știe cineva cum să fac asta fără plugin? Mulțumesc.

3
Comentarii

-1 – Asta e pur și simplu domeniul plugin-urilor.

fuxia fuxia
8 iul. 2012 21:17:47

de ce nu vrei să folosești un plugin?

Sisir Sisir
8 iul. 2012 21:20:18

Am găsit o resursă bună pentru asta: https://www.scratchcode.io/how-to-restrict-pages-or-posts-access-without-login-into-wordpress

Mayank Dudakiya Mayank Dudakiya
20 dec. 2020 12:05:15
Toate răspunsurile la întrebare 3
7

Puteți face acest lucru destul de ușor cu un shortcode. Conectați-vă la init și adăugați shortcode-ul în funcția dumneavoastră hook-uită.

<?php
add_action('init', 'wpse57819_add_shortcode');
/**
 * Adaugă shortcode-ul
 *
 * @uses add_shortcode
 * @return null
 */
function wpse57819_add_shortcode()
{
    add_shortcode('restricted', 'wpse57819_shortcode_cb');
}

Apoi, în funcția dumneavoastră de callback, puteți verifica dacă utilizatorul este autentificat. Dacă da, afișați-le conținutul. Dacă nu, afișați-le un mesaj de autentificare. Puteți face literalmente orice doriți aici: verificați capacitățile utilizatorului pentru a le afișa conținutul (diferite "niveluri de membru"), afișați-le un întreg formular de autentificare. Un exemplu simplu:

<?php
/**
 * Funcția de callback pentru shortcode. Verifică dacă un utilizator este autentificat. Dacă
 * da, afișează conținutul. Dacă nu, afișează un link către formularul de autentificare.
 *
 * @return string
 */
function wpse57819_shortcode_cb($args, $content=null)
{
    // dacă utilizatorul este autentificat, doar afișați-le conținutul. Puteți verifica
    // roluri și capacități aici dacă doriți
    if(is_user_logged_in())
        return $content;

    // Dacă am ajuns aici, utilizatorul nu este autentificat, afișați un mesaj
    $defaults = array(
        // mesaj afișat utilizatorilor neautentificați
        'msg'    => __('Trebuie să vă autentificați pentru a vedea acest conținut.', 'wpse57819'),
        // Link către pagina de autentificare
        'link'   => site_url('wp-login.php'),
        // textul de anchor pentru linkul de autentificare
        'anchor' => __('Autentificare.', '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;
}

Ca un plugin.

Utilizare

Undeva în paginile/postările dumneavoastră:

[restricted]
Conținut doar pentru membri aici
[/restricted]
8 iul. 2012 20:32:34
Comentarii

Puteți adăuga codul de mai sus în fișierul functions.php (fără tag-urile de deschidere <?php). Exemplu de utilizare a fost adăugat la răspuns.

chrisguitarguy chrisguitarguy
9 iul. 2012 15:43:33

Nu este cod php, [restricted] este un shortcode: http://codex.wordpress.org/Shortcode_API

chrisguitarguy chrisguitarguy
9 iul. 2012 16:55:20

@Davis: Scuze, dar nu funcționează în sintaxa mea. [restricted] <a href="sample.com">Sample</a> [/restricted] Ce este greșit? mersi

Juan Lie Juan Lie
9 iul. 2012 17:10:24

Ești autentificat. Probabil de asta apare problema.

chrisguitarguy chrisguitarguy
9 iul. 2012 18:17:02

@Davis: Scuze, dar acest cod poate fi pus în orice fișier php, nu în post. Dar în cazul meu nu a funcționat. <? php code [restricted] php code [/restricted] php code ?> Mulțumesc

Juan Lie Juan Lie
10 iul. 2012 16:41:39

Dacă vrei să faci asta direct într-un fișier php, folosește direct condiționalul is_user_logged_in.

chrisguitarguy chrisguitarguy
10 iul. 2012 17:18:18

Am o pagină cu shortcode-uri. Afișează doar numele shortcode-urilor.. Am făcut astfel [restricted] [my-shortcode] [/restricted]. dar afișează doar "[my-shortcodes]" ca text. nu ca shortcode real. așa că am schimbat în..." return do_shortcode($content);" și acum afișează corect. Procedez corect? Care e diferența?

pulla pulla
1 iul. 2016 13:28:17
Arată celelalte 2 comentarii
0

Poate fi util un shortcode personalizat Vezi acest plugin http://wordpress.org/extend/plugins/restrictedarea Este învechit, dar ar trebui să folosești codul pentru nevoile tale

8 iul. 2012 20:08:45
0

Mai întâi trebuie să adăugați o cutie meta personalizată care vă permite să marcați articolul ca ascuns.

Pentru detalii, vă rugăm să accesați linkul sursă din răspunsul original

Am modificat această funcție pentru a satisface nevoile dumneavoastră

add_action( 'pre_get_posts', 'yourtextdomain_pre_get_posts_hidden', 9999 );
function yourtextdomain_pre_get_posts_hidden( $query )
{

  // Verifică dacă e în frontend și interogarea principală
    if( ! is_admin() && $query->is_main_query() ) 
    {
        if( ! is_user_logged_in() )
        {
            // Pentru articolele pe care vrem să le excludem
            $exclude = array();

            // Localizează articolele noastre marcate ca ascunse
            $hidden = get_posts(array(
              'post_type' => 'post',
              'meta_query' => array(
                array(
                  'key' => 'meta-box-checkbox',
                  'value' => 'true',
                  'compare' => '==',
                ),
              )
            ));

               // Creează un array cu articolele ascunse
            foreach($hidden as $hide)
            {
              $exclude[] = $hide->ID;
            }
            // Exclude articolele ascunse
            $query->set('post__not_in', $exclude);
        }

    }
}
1 oct. 2019 15:49:14