#1 楼
您应该阅读WordPress Codex上WP_Query的函数参考。那里有很多示例可供参考。如果不想使用while
遍历结果集,则可以在属性WP_Query
中使用posts
获得查询返回的所有帖子。例如
$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;
foreach($posts as $post) {
// Do your stuff, e.g.
// echo $post->post_name;
}
评论
但是,您链接到的所有示例都没有演示如何处理帖子。因此,很高兴您回答了,很遗憾他们没有在文档中提供它。另一个提示:如果您要对一个唯一的帖子进行匹配,则可以在args中使用带有'posts_per_page'=> 1的函数。函数wp_queryfirstpost($ args){$ q = new WP_Query($ args); $ pp = $ q-> get_posts(); $ firstpost = false;如果($ pp)$ firstpost = $ pp [0]; wp_reset_postdata();返回$ firstpost; }
–亨里克·埃兰森(Henrik Erlandsson)
2014年3月21日在9:38
@rofflox:你是圣人!非常适合绕开get_the_title / ID / younameit。
–小瓶
15年4月30日在17:39
您应该使用$ query-> posts,$ query-> get_posts()将触发查询解析和其他不必要的数据库查询的重新运行
– Tom J Nowell♦
2015年11月1日,下午3:31
$ query-> get_posts();不能按预期工作。不知道为什么,但是返回的帖子少于查询。看到这里:stackoverflow.com/questions/25395299/…
– Laxmana
16-11-12在17:05
这个答案是完全错误的,当您使用一些参数创建一个新的WP_Query时,会立即在内部调用get_posts()方法,并且您不应再次调用它!如果如上例所示再次调用它,它将运行一个DIFFERENT查询,具体取决于初始运行的参数和结果(设置内部标志等),并可能返回其他(较小)的结果集或根本没有结果。正如TomJNowell和Laxmana所建议的那样,应使用$ query-> posts获取帖子数据。
–艾芬豪
16 Dec 4'3:20
#2 楼
实际上,您不需要拒绝使用while()
循环。相同的WP_Post对象已经存储在post
属性中: $query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// now $query->post is WP_Post Object, use:
// $query->post->ID, $query->post->post_title, etc.
}
}
评论
如果是多余的。
–复仇者
17年1月26日在13:40
不,如果不是多余的。在这种情况下,确实如此,但是在大多数生产情况下,您需要在if和while之间执行代码。
–magi182
17 Mar 27 '17在15:36
@ magi182在这种情况下,它变得多余。人们应该学习何时使用它。
– frodeborli
17年4月3日在18:05
@frodeborli,关于以“人们应该”开头的语句的好处是,您几乎总是可以替换为“人们不会”,并且该语句仍然测试为真。
–magi182
17年4月6日在3:28
@ magi182我可能会让一百行代码行补充上面的代码。
– frodeborli
17年4月8日在21:01
#3 楼
您还可以使用get_posts( $args )
代替wp_Query()
,这将为您提供帖子列表
评论
直接访问发布数据与使用模板标签之间要记住的一个重要区别是,过滤器未应用于数据,某些功能可能会中断。