web-dev-qa-db-fra.com

Restreindre l'accès et l'affichage pour les catégories

Est-il possible de choisir des catégories spécifiques qui ne seront affichées que pour les membres connectés?

J'ai essayé de trouver un plugin ou une solution PHP qui le fasse, mais je n'ai rien trouvé qui soit toujours pertinent.

2
user838437

Oui :).

Ce qui suit s'appliquera à toutes les requêtes pour les publications sur le front-end , y compris les "boucles secondaires" (par exemple, les listes de publications sur le côté), mais cela n'aura pas d'effet. types de messages personnalisés. Donc, ce n'est peut-être pas exactement ce que vous recherchez, mais le principe est le même:

add_action('pre_get_posts','wpse72569_maybe_filter_out_category');

function wpse72569_maybe_filter_out_category( $query ){

     //Don't touch the admin
     if( is_admin() )
         return;

     //Leave logged in users alone
     if( is_user_logged_in() )
         return;

     //Only effect 'post' queries
     $post_types = $query->get('post_type');
     if( !empty($post_types) && 'post' != $post_types )
         return;

     //Get current tax query
     $tax_query = $query->get('tax_query');

     //Return only posts which are not in category with ID 1
     $tax_query[] = array(
        'taxonomy' => 'category',
        'field' => 'id',
        'terms' => array( 1 ),
        'operator' => 'NOT IN'
          );

     //If this is 'OR', then our tax query above might be ignored.
     $tax_query['relation'] = 'AND';

     $query->set('tax_query',$tax_query);

}
0
Stephen Harris

Vous pouvez essayer ceci si vous cherchez à utiliser une structure de type boucle:

<?php
  if ( is_user_logged_in() ) {

     //Only displays if the user is logged in.

     query_posts('cat=1'); // Replace the category number with the correct category number you want to display
      while (have_posts()) : the_post();
      the_content();
     endwhile;

 } else {

     // Everyone else that is not logged in

     query_posts('cat=2'); // Replace the category number with the correct category number you want to display
       while (have_posts()) : the_post();
       the_content();
    endwhile;

}
?> 

Si vous souhaitez simplement afficher des liens vers les pages de catégorie, par exemple un menu, vous pouvez le faire:

  1. Utilisez la fonction de menu de navigation WP. Enregistrez le menu dans votre functions.php dans votre dossier de thèmes. Vous pouvez le faire en ajoutant ceci au fichier:

    <?php
    
      register_nav_menus( array(
         'primary' => __( 'Primary Navigation', 'your_theme_name' ), // Your main navigation. Replace "your_theme_name" with the theme you are using.
         'logged_in_user' => __( 'Logged In User', 'your_theme_name' ), // Remember replace "your_theme_name" with the theme you are using.
    
    ) );
    ?>
    
  2. Ajoutez les catégories au menu via l’administration.

  3. Appelez ça dans votre thème. Ceci est similaire à ce que nous avons fait ci-dessus, mais le listera simplement comme un menu et non comme un post.

    <?php
       if ( is_user_logged_in() ) {
    
        //Only displays if the user is logged in.
    
         wp_nav_menu( array( 'container' => false, 'menu_id' => 'nav', 'theme_location' => 'logged_in_user' ) );
    
       } else {
    
      // Everyone else that is not logged in
     // You can display anything you want to none logged in users or just leave it blank to display nothing.
    
      }
     ?> 
    
0
Nicole