Wordpress:排除类别

时间:2015-09-17 10:00:30

标签: wordpress categories

我想从我的主页中排除某个类别,但我的代码无效:

<?php if( $category_items_query->have_posts() ): ?>
    <div class="row columns-layout content-grid">
    <?php if( $layout === 'two' ): ?>

        <!-- EXCLUDE CATEGORY 17 -->
        <?php query_posts($query_string . '&cat=-17'); ?>

        <?php while( $category_items_query->have_posts() ): $category_items_query->the_post(); ?>

            <div class="col-lg-6 col-md-6 recent-item two-columns post-box">
                <?php get_template_part( 'parts/home-content', 'columns' ); ?>
            </div><!-- .two-columns -->
        <?php endwhile; ?>

    <?php endif; ?>
    </div><!-- .row -->

<?php endif; ?>

请帮帮我。 谢谢 吉

2 个答案:

答案 0 :(得分:1)

请不要使用query_posts因为它是无效的并重新运行sql查询并且还会搞砸你的分页..

而是使用pre_get_posts,例如

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-17' );
    }
}
add_action( 'pre_get_posts', 'exclude_category' );

答案 1 :(得分:0)

首先,你必须像下面那样定义全局变量,然后你可以尝试你的代码。

     global $query_string;
     query_posts($query_string . '&cat=-17');

还有另一种方法可以尝试: 在function.php中:

    function exclude_category( $wp_query ) {
       $excluded = array( '-1' );
       $wp_query->set('category__not_in', $excluded);
       set_query_var( 'category__not_in', $excluded );
    }
    add_action( 'pre_get_posts', 'demo_exclude_category' );

在您的代码中(您可以按照自己的方式使用):

class Exclude_Cat_Plugin {

public function __construct() {
   add_action( 'pre_get_posts', array( $this,'exclude_first_category_posts') );
}

public function exclude_first_category_posts( $wp_query ) {

        if ( ! is_search() && ! is_archive() ) {
            $excluded = array( '-1' );
            $wp_query->set( 'category__not_in', $excluded );
            set_query_var( 'category__not_in', $excluded );
        }

  }

}

我希望它对你有所帮助。