Date de création : 2024/10/06 22:01
Pour cacher les articles d'une certaine catégorie à tous les utilisateurs sauf Les utilisateurs enregistrés et ceux avec le rôle secret.
Nous pouvons le faire sans plugin par l'ajout d'un petit code dans votre fichier fonction.php
function masquer_articles_cache( $query ) { // Vérifie si on est sur le front-end et que c'est la requête principale if ( !is_admin() && $query->is_main_query() ) { // Si l'utilisateur est connecté if ( is_user_logged_in() ) { $user = wp_get_current_user(); // Vérifie si l'utilisateur fait partie du rôle "Secret" ou s'il a un rôle supérieur à abonné if ( !in_array( 'secret', (array) $user->roles ) && !current_user_can( 'edit_posts' ) ) { // Exclure uniquement la catégorie avec l'ID 2 (cache) $query->set( 'cat', '-ID_DE_LA_CATEGORIE' ); } } else { // Si l'utilisateur n'est pas connecté, exclure la catégorie "Gerbing" $query->set( 'cat', '-ID_DE_LA_CATEGORIE' ); } } } add_action( 'pre_get_posts', 'masquer_articles_gerbing' );
-ID_DE_LA_CATEGORIE est l'ID de la catégorie avec le signe moins devant.
exemple: -2
function masquer_categorie_menu_pour_utilisateurs_non_autorises( $items, $args ) { if ( is_user_logged_in() ) { $user = wp_get_current_user(); // Si l'utilisateur ne fait pas partie du rôle "Secret" et n'a pas un rôle supérieur à abonné if ( !in_array( 'secret', (array) $user->roles ) && !current_user_can( 'edit_posts' ) ) { foreach ( $items as $key => $item ) { if ( $item->object_id == ID_DE_LA_CATEGORIE ) { unset( $items[$key] ); } } } } else { // Si l'utilisateur n'est pas connecté, masquer la catégorie "Secret" foreach ( $items as $key => $item ) { if ( $item->object_id == ID_DE_LA_CATEGORIE ) { unset( $items[$key] ); } } } return $items; } add_filter( 'wp_get_nav_menu_items', 'masquer_categorie_menu_pour_utilisateurs_non_autorises', 10, 2 );
Cette fois ID_DE_LA_CATEGORIE est juste l'idée de la catégorie, on ne remet pas de signe devant
Donc maintenant nous avons caché les articles et la catégorie mais il peut être aussi judicieux de faire disparaître les articles du site Map.
Donc, nous rajoutons encore un petit bout de code.
function exclure_categorie_secret_du_sitemap( $url_list, $post_type ) { // Vérifie si nous sommes sur le sitemap des articles if ( 'post' === $post_type ) { foreach ( $url_list as $key => $url ) { // Récupère les ID des articles $post_id = url_to_postid( $url['loc'] ); // Vérifie si l'article fait partie de la catégorie "Secret" (ID 2) if ( has_category( 2, $post_id ) ) { unset( $url_list[$key] ); // Exclut l'article du sitemap } } } return $url_list; } add_filter( 'wp_sitemaps_posts', 'exclure_categorie_secret_du_sitemap', 10, 2 );
if ( has_category( ID_DE_LA_CATEGORIE, $post_id ) ) {
Bien mettre l'ID_DE_LA_CATEGORIE de la catégorie.
Page dans la catégorie: