Сообщения Запроса Исключают Всю Категорию
Я использую стандартный цикл wordpress, который выглядит так:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; else: ?>
<h2>We're sorry...there is no content.</h2>
<?php endif; ?>
Затем я хотел исключить определенную категорию из своего запроса, поэтому мой код стал:
<?php
$parent = get_cat_ID("Sports");
query_posts("cat=-".$parent);
?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; else: ?>
<h2>We're sorry...there is no content.</h2>
<?php endif; ?>
<?php wp_reset_query(); ?>
Что, как я думал, было правильно по деньгам...
Итак, я провел некоторое исследование и обнаружил, что это исключает только категорию, а не категорию и ее подкатегории. Есть ли способ исключить определенную категорию и все ее подкатегории из петля?
Спасибо, Джош
2 answers
Я рекомендую вам использовать фильтр pre_get_posts
или канаву query_posts
и использовать WP Query
.
Таким образом, вы можете легко использовать параметр category__not_in (array)
и не испортить другие циклы.
function exclude_category($query) {
// this requires term id instead of term name so change "20" to the "sport" id
// this assumes "sports" is in a category and not a custom taxonomy
$child_cats = (array) get_term_children('20', 'category');
//only effect main home page query
if ( $query->is_home() && $query->is_main_query() ) {
$query->set('category__not_in',array_merge(array('20'), $child_cats));
return $query;
}
}
add_filter('pre_get_posts', 'exclude_category');
Пс. Я не проверял это, но теоретически это должно сработать.
Это должно помочь вам:
Получите детей родительской категории
Прочитайте все подкатегории родительского элемента, выполните цикл по результату, чтобы получить идентификаторы всех из них, а затем включите все идентификаторы в вызов query_posts().
Например (не проверено):
$parent = get_cat_ID("Sports");
$kids = get_categories( array( 'parent' => $parent ) );
$a = array( $parent );
foreach ( $kids as $kid )
{
$a[] = $kid->ID;
}
query_posts( "cat=-" . implode( ",", $a ) );