Cum să restricționezi o pagină [fără plugin]
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.

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]

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.

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

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

@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

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

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?

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

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