如何从wp_query结果中获取发布数据数组?


35

使用WP_Query方法运行查询时,出现了一个对象。我知道自己可以执行循环以显示内容。但是,我的目标是不显示任何内容,而是通过执行诸如“ foreach ...”之类的操作来获取一些发布数据。我如何获取可以循环访问并获取数据的一组发布数据?


2
直接访问发布数据与使用模板标签之间要记住的一个重要区别是,过滤器未应用于数据,某些功能可能会中断。
米洛

Answers:


73

您应该阅读WordPress CodexWP_Query函数参考。那里有很多示例可供参考。如果不想使用a遍历结果集while,则可以使用WP_Query属性in 来获取查询返回的所有帖子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;
}

1
但是,您链接到的所有示例都没有演示如何处理帖子。因此,很高兴您回答了,很遗憾他们没有在文档中提供它。另一个提示:如果您要在唯一的帖子上进行匹配,则可以'posts_per_page'=>1在args中使用类似这样的函数。function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }
亨里克·埃兰森

@rofflox:你是圣人!非常适合绕开get_the_title / ID / younameit。
Vial

8
您应该改用$query->posts$query->get_posts()触发查询解析和其他不必要的数据库查询的重新运行
Tom J Nowell

$ query-> get_posts(); 不能按预期工作。不知道为什么,但是返回的帖子少于查询。看到这里:stackoverflow.com/questions/25395299/…–
Laxmana

1
这个答案是完全错误的,当您创建带有某些参数的新WP_Query时,将立即在内部调用get_posts()方法,并且您不应再次调用它!如果如上例所示再次调用它,它将运行一个DIFFERENT查询,具体取决于初始运行时的参数和结果(设置内部标志等),并可能返回其他(较小)结果集或根本没有结果。正如TomJNowell和Laxmana所建议的那样,应使用$ query-> posts获取帖子数据。
艾芬豪'16

11

实际上,您不需要拒绝使用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.

            }

        }

2
if是多余的。
Akkumulator

2
不,if不是多余的。在这种情况下,确实是这样,但是在大多数生产情况下,您需要在if和while之间执行代码。
magi182 '17

2
@ magi182在这种情况下,它变得多余。人们应该学习何时使用它。
frodeborli

4
@frodeborli,关于以“人们应该”开头的语句的好处是,您几乎总是可以替换为“人们不会”,并且该语句仍然测试为真。
magi182 '17

1
@ magi182我可能会让一百行代码行补充上面的代码。
frodeborli

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.