自定义帖子类型类别显示

时间:2017-10-04 作者:Randomer11

我一直在看这个老主题。然后,我创建了一个名为taxonomy template file and post types的模板文件。查询时仅显示所选类别中的帖子。这是我的模板的顶部:

    $args=array ( 

            \'post_type\'=> array( \'events\' ),
            \'tax_query\' => array(  \'taxonomy\' => \'tax-cat\' ), 
            \'post_status\' => array( \'future\' ), 
            \'pagination\' => true, 
            \'paged\' => $paged,
            \'orderby\' => \'post_date\',
            \'order\' => \'ASC\', ); 
    $temp = $wp_query; 

    $wp_query = null; 
    $wp_query = new WP_Query(); 
    $wp_query->query( $args ); 
这是我从现有页面模板中提取的,但上面似乎显示了自定义帖子类型中的所有帖子,而不仅仅是类别中的帖子。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

问题不在于您从未在查询中指定哪个事件cat,而是您正在执行一个查询。

如果要更改主查询的内容,请更改查询,不要添加第二个查询。我们通过pre_get_posts 过滤器:

此挂钩在创建查询变量对象之后,但在实际查询运行之前调用。

pre\\u get\\u posts操作允许开发人员通过引用访问$query对象(对$query所做的任何更改都直接对原始对象进行-无需返回值)。

例如:

function my_home_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', \'123\' );
    }
}
add_action( \'pre_get_posts\', \'my_home_category\' );
在您的情况下,您希望使用过滤器:

仅当它是主查询时,且仅当它是存档且该存档用于事件类别时,才能将post状态设置为futurepublishDESC 到ASC由于当前请求的术语etc已设置,您需要进行类似以下检查:

function randomer11_fix_eventcat_archive( \\WP_Query $q ) {
    if ( $q->is_main_query() && $q->is_archive() && $q->is_tax( \'eventcat\' ) ) {
        $q->set( ... ); // set your options
    }
}
add_action( \'pre_get_posts\', \'randomer11_fix_eventcat_archive\' );
你可以打电话set 现在,在模板中,您可以根据需要多次删除查询,并使用正常的post循环。分页将在没有任何黑客攻击的情况下正常工作,页面加载速度将大大加快

结束

相关推荐