从WordPress循环中排除该类别

时间:2012-03-06 作者:jimilesku

我有这个循环代码,我需要排除一个类别4 从这个循环。关于如何实现这一点,有什么建议吗?

启动循环的代码

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

    <ol class="item_lists">

        <?php
        $end = array(3,6,9,12,15,18,21,24,27,30,33,36,39,42,45);
        $i = 0;

        while (have_posts()) : the_post();
           $i++;
           global $post;
 ?>

4 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

可以使用wp\\u parse\\u args()将参数合并到默认查询中

// Define the default query args
global $wp_query;
$defaults = $wp_query->query_vars;

// Your custom args
$args = array(\'cat\'=>-4);

// merge the default with your custom args
$args = wp_parse_args( $args, $defaults );

// query posts based on merged arguments
query_posts($args);
尽管如此,我认为更优雅的方法是使用pre\\u get\\u posts()操作。这会在进行查询之前修改查询,以便查询不会运行两次。

签出:

http://codex.wordpress.org/Custom_Queries#Category_Exclusion

基于该示例,我将把类别4从索引中排除,并将其放在函数中。php:

add_action(\'pre_get_posts\', \'wpa_44672\' );

function wpa_44672( $wp_query ) {

    //$wp_query is passed by reference.  we don\'t need to return anything. whatever changes made inside this function will automatically effect the global variable

    $excluded = array(4);  //made it an array in case you  need to exclude more than one

    // only exclude on the home page
    if( is_home() ) {
        set_query_var(\'category__not_in\', $excluded);
        //which is merely the more elegant way to write:
        //$wp_query->set(\'category__not_in\', $excluded);
    }
}

SO网友:Brad Dalton

从函数文件

function remove_home_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', \'-4\' );
    }
}
add_action( \'pre_get_posts\', \'remove_home_category\' );
这段代码在实际查询运行之前更改查询,因此在这种情况下,修改循环的最有效的挂钩。

SO网友:Adam Rice

在生产线之前

<?php if(have_posts()): ?>
插入类似的内容

<?php query_posts($query_string . \'&cat=-4\'); ?>
这不包括类别ID为4的类别。如图所示here

SO网友:random_user_name

亚当是对的。此外,要使分页工作正常,您需要有类似的功能:

<?php query_posts(\'post_type=post&paged=\'.$paged.\'&cat=-4\');  ?>

结束

相关推荐

如何从小部件管理面板内的Get_Categories()选择列表中排除类别

我有一个小部件,我需要添加一个类别选择列表。最终用户应该能够选择一个类别,我需要用小部件保存类别ID。我遇到了一个绊脚石,因为我无法使排除数组正常工作。被排除在外的猫仍会出现在下拉列表中。我做错了什么?function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'text\' => \'\', \'hide_title\' =>