讨论WP_Query()的文档明确指出这应该有效:
$query = new WP_Query( 'category_name=tools,wordpress' );
但是,如果我使用WP_Query的类方法->get_posts():
$query->get_posts();
我只收到tools
的帖子(总共8个帖子)。
但是,如果我这样做:
while($query->have->posts()) { ... }
我可以按预期遍历所有帖子(总共12个帖子)。
这是设计,设计缺陷还是错误?
[编辑]以下是我使用的实际代码:
// query
$query = 'category_name=tools,wordpress&orderby=date&order=asc&posts_per_page=-1';
$wpq = new WP_Query($query);
// loop-style version - shows all 12 posts
while($wpq->have_posts())
{
$post = $wpq->next_post();
echo "<p>{$post->post_title}</p>";
}
// get_posts()-style version, only shows 8 posts from tools
$posts = $wpq->get_posts();
foreach($posts as $post)
{
echo "<p>{$post->post_title}</p>";
}
谢谢,
戴夫
答案 0 :(得分:4)
好的,我查看了独立函数get_posts()
中的代码,它提供了答案。
与大多数事情一样,WordPress完全不一致!
您必须使用WP_Query->query();
而不是WP_Query->get_posts();
// query
$query = 'category_name=tools,wordpress&orderby=date&order=desc&posts_per_page=-1';
$wpq = new WP_Query();
// new query() syntax has functionality of loop-style version but behaves like get_posts()
$posts = $wpq->query($query);
foreach($posts as $post)
{
echo "<p>{$post->post_title}</p>";
}
// debug
printr($wpq);
令人遗憾的是WordPress API如此糟糕。
[编辑]刚刚查看->query()
内部,并在内部使用->get_posts()
。这些简单的调用不应该都有不同的行为。
答案 1 :(得分:1)
嗯,你正在混合一些东西:
get_posts() - 检索符合条件的最新帖子或帖子列表。
你可以通过将争论传递给它来使用get_posts(),它会改变你的主查询(不推荐)
WP_Query - WordPress查询类。
这允许您在wp数据库中创建新查询。
get_posts()它是WP_Query类的方法
检查上面的链接,他们有关于如何按多个类别获取帖子的示例。还请查看Sandeep Kumar的回答。
也可以使用您的示例:
// The Query
$query = new WP_Query( 'category_name=staff,news' );
// The Loop ! there is no get_posts()!
if ( $query->have_posts() ) {
while ( $query->have_posts() ) { ... }
}
使用get_posts()的一个例子是:
$args = array('category' => '1,2' ); //where 1 and 2 are the posts categories id's
$myposts = get_posts( $args );
foreach ( $myposts as $post ) {
setup_postdata( $post );
...
}
wp_reset_postdata();
另请查看pre_get_posts()文档,了解您是否无法使用此文档,因为它在到达数据库之前更改了查询,如果您可以使用它,它将为您节省数据库之旅每页加载。
答案 2 :(得分:0)
显示多个类别的帖子
使用类别ID显示包含这些类别的帖子:
$query = new WP_Query( 'cat=2,6,17,38' );
我认为如果没有,那会对您有所帮助,那么您能否提供完整的代码,以便我可以检查并为您提供完整的解决方案。