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.
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);
}
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:
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.
) );
?>
Ajoutez les catégories au menu via l’administration.
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.
}
?>