web-dev-qa-db-fra.com

Exclure les publications d'une catégorie, mais elles ne sont pas partie de plusieurs catégories

Je cherche à exclure une catégorie dans Wordpress. Je fais référence à la page Wordpress Codex sur wp_query, mais le problème est le suivant:

  1. Je veux exclure les messages de la catégorie 1,
  2. mais si un message est dans la catégorie 1 et la catégorie 2 (ou toute autre catégorie autre que 1), je souhaite tout de même qu'il s'affiche.

Je ne souhaite donc que les publications exclues si elles sont exclusivement dans la catégorie 1.

3
Anthony

Cela peut être fait en obtenant un tableau d'identifiants de catégories que vous voulez montrer. Nous pouvons utiliser get_terms () pour cela:

$taxonomy = array(
    'category'
);
$args = array(
    'exclude' => array('111'),//id of the category term you want to exclude  
    'fields' => 'ids'
);
$ct_ids = get_terms( $taxonomy, $args );

Vous pouvez maintenant l'utiliser pour créer votre requête secondaire avec WP_Query à l'aide du paramètre de catégorie category__in comme ceci:

$args = array(
    'category__in' => $ct_ids
);
$scnd_query = new WP_Query( $args );

Si vous voulez par exemple faire cela uniquement pour votre page d’accueil, qu’une requête secondaire personnalisée n’est pas nécessaire, vous pouvez y parvenir en vous connectant à la pre_get_posts action comme celle-ci:

function show_all_but_category_xyz( $query ) {
    if ( !is_admin() && $query->is_home() && $query->is_main_query() ) {
        $query->set( 'category__in', $ct_ids );
    }
}
add_action( 'pre_get_posts', 'show_all_but_category_xyz' );
1
Nicolai