Сообщения Запроса Исключают Всю Категорию


Я использую стандартный цикл 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(); ?>

Что, как я думал, было правильно по деньгам...

Итак, я провел некоторое исследование и обнаружил, что это исключает только категорию, а не категорию и ее подкатегории. Есть ли способ исключить определенную категорию и все ее подкатегории из петля?

Спасибо, Джош

Author: Josh Rodgers, 2012-12-07

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');

Пс. Я не проверял это, но теоретически это должно сработать.

 1
Author: Wyck, 2012-12-07 20:58:37

Это должно помочь вам:

Получите детей родительской категории

Прочитайте все подкатегории родительского элемента, выполните цикл по результату, чтобы получить идентификаторы всех из них, а затем включите все идентификаторы в вызов 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 ) ); 
 0
Author: Steve Claridge, 2017-04-13 12:37:31