自定义WP_QUERY打破了税则关联的查看权限帖子的默认行为!

时间:2012-04-11 作者:mathiregister

我有一个自定义分类法,用于自定义帖子类型,就像类别一样。

我在我的taxonomy-event_type.php 到目前为止的模板…

if ( have_posts() ) : while ( have_posts() ) : the_post(); 
这意味着模板只显示与该帖子所在的当前术语(类别)相关的帖子。以此类推url/event_type/workshops 只有在后端设置为“Workshop”的所有帖子才会出现。

现在,我已经将该标准循环更改为自定义循环,在该循环中,我传递了一些参数,以便我可以根据元值(事件日期)对帖子进行排序

$args = array(
    "post_type" => "wr_event",
    "meta_key" => "_wr_event_date",
    "orderby" => "meta_value_num",
    "order" => "ASC"
    //"terms" => 
    );

    $wr_events = new WP_Query( $args );

    if ( $wr_events->have_posts() ) : while ( $wr_events->have_posts() ) : $wr_events->the_post();
这很好用。唯一的事。它打破了我目前正在查看的术语(类别)的标准行为。

因此,在查看时使用此自定义循环url/event_type/workshopsurl/event_type/lectures 始终显示相同的帖子!如何再次仅查看与当前术语“研讨会”或“讲座”相关的帖子?

谢谢你的帮助!

编辑:

如果我这样做…

$current_cat = get_query_var( \'event_type\' );
echo $current_cat;

$args = array( …
The$current_cat 持有我目前所处的正确术语(类别)。唯一的问题是循环中的帖子总是相同的。如何按此术语筛选?

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

第二个查询执行一个全新的查询,并且没有术语集。

此外,“重做”查询的效率也不高。相反,钩住pre_get_posts 并在此处更改顺序:

function change_order_for_events( $query ) {
    //Check if currenty query is the \'main query\' and event type taxonomy being viewed 
    if ( $query->is_main_query() && is_tax(\'event_type\')) {
        $query->set( \'meta_key\', \'_wr_event_date\' );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'order\', \'ASC\' );
    }
}
add_action( \'pre_get_posts\', \'change_order_for_events\' );
用于bonus points 您可能希望检查“orderby”和“order”参数是否未设置-这样,按日期排序将成为事件类型分类页面上事件的默认值,但如果需要,可以重写。

全部的conditionals are available 给你。

结束