web-dev-qa-db-fra.com

Exclure TOUS les messages de sous-catégories

Besoin d'aide avec une tâche wordpress

Je veux que TOUS les posts des sous-catégories soient exclus.

Exemple:

  • Gâteau
    • Tarte
      • Pomme
      • Poire
      • Banane

Si je poste un article dans Banana, je ne veux pas qu'il apparaisse dans Pie ou Cake. Je veux juste que les posts postés dans banana soient affichés dans banana, pas dans les premières catégories.

Comment puis-je faire ceci?

J'ai trouvé un code pour qu'il mette dans functions.php mais il fait l'affaire avec la première catégorie, mais pas avec la seconde.

function fb_filter_child_cats($query) {
$cat = get_term_by('name', $query->query_vars['category_name'], 'category');
$child_cats = (array) get_term_children( &$cat->term_id, 'category' );
// also possible
// $child_cats = (array) get_term_children( get_cat_id($query->query_vars['category_name']), 'category' );
if ( !$query->is_admin )
$query->set( 'category__not_in', array_merge($child_cats) );
return $query;
}
add_filter( 'pre_get_posts', 'fb_filter_child_cats' );
2
Mwild

Ne changez pas votre modèle et veuillez ne pas utiliser query_posts.

Ajoutez ceci à votre function.php:

add_action('pre_get_posts', 'filter_out_children');

function filter_out_children( $query ) {
  if ( is_main_query() && is_category() && ! is_admin() ) {
     $qo = $query->get_queried_object();
     $tax_query = array(
       'taxonomy' => 'category',
       'field' => 'id',
       'terms' => $qo->term_id,
       'include_children' => false
     );
     $query->set( 'tax_query', array($tax_query) );
  }
}
2
gmazzap

Le moyen le plus simple consiste à utiliser un modèle de catégorie.

http://codex.wordpress.org/Category_Templates

En gros, vous voulez avoir une page category.php, puis changer

<?php while ( have_posts() ) : the_post(); ?>

pour ça

<?php while (have_posts()) : the_post(); if (in_category($cat)) { ?>

et

<?php endwhile; ?>

à

<?php } endwhile; ?>

Voir http://motioncity.com.ar/2008/wordpress-tip-how-to-exclude-children-categories-on-a-template/ pour plus de détails

1
Rohit Pande

Je ne peux pas le tester maintenant, mais vous pouvez essayer avec ce code:

$current_cat = intval( get_query_var('cat') );
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
   'category__and' => array($current_cat),
   'paged' => $paged,
   'caller_get_posts'=> 1
);
query_posts($args);

?>

<?php if (have_posts()) : ?>

   Your content - here!

wp_reset_query();

Vous devez éditer le fichier de modèle dans lequel vous souhaitez afficher les publications et mettre ce code.

0
Dido Kotsev