修改循环但保留原始查询,我做错了什么?

时间:2012-04-17 作者:any_h

我有一个自定义的帖子类型,其中有分类法cities 还有一个术语berlin. 存档可在以下位置查看example.com/cities/berlin 通常从archive.php 样板

现在,我想根据自定义字段订购,start_date 在本例中,但仍保留原始查询。所以当我导航到example.com/cities/newyork 循环仍将按预期工作。

这就是我所拥有的,但我只得到<p>Not Found</p> 最后

请帮忙。

谢谢:)

<?php
global $query_string; //to keep the original query around
$args = array(
  \'orderby\'  => \'meta_value_num\',
  \'meta_key\' => \'start_date\',
  \'order\'    => \'DESC\'
);
$posts = query_posts($query_string . $args);
if (have_posts()) : while (have_posts()) : the_post(); 
?>

do stuff

<?php endwhile; else : ?>
    <p>Not Found</p>
<?php endif; ?>

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

不能像这样将数组连接到query\\u字符串上。看见Digging Into WordPress\'s post about looping 以获取正确的格式。或者,您可以使用array_merge() 就像在query_posts Codex page.

考虑使用wp_reset_query() 在你的循环之后。有时你也会看到人们保存原作$query_string 要创建新变量,请修改$query_string, 然后重置$query_string 在循环之后,如下所示:

global $query_string;
$old_query = $query_string
// Modify your query, loop through it
$query_string = $old_query;

SO网友:helgatheviking

老问题,但它在头版,所以我有责任发帖说"Don\'t ever use query_posts()" 要在不破坏原始查询的情况下修改查询,应使用pre_get_posts

function wpa_49346_pre_get_posts( $query ){
    if( is_tax() ){
        set_query_var( \'meta_key\', \'start_date\' );
        set_query_var( \'orderby\', \'meta_value_num\' );
        set_query_var( \'order\', \'DESC\' );
    }
}
add_action( \'pre_get_posts\', \'wpa_49346_pre_get_posts\' );

结束

相关推荐

simply loop through posts

我知道这是一个真正的新手问题,但我似乎无法从帖子中获得循环。它所做的只是从页面本身中提取。我制作了一个模板并添加了循环。<?php if( have_posts() ) { while( have_posts() ) { the_post(); ?> <h2><?php the_title(); ?></h2> <?php } } ?>