Besoin d'aide avec une tâche wordpress
Je veux que TOUS les posts des sous-catégories soient exclus.
Exemple:
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' );
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) );
}
}
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
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.