QUERY_POST起作用,而GET_POST不起作用

时间:2015-10-27 作者:IXN

我尝试创建一个显示我的帖子的页面(该页面不同于wp admin中定义的“帖子页面”)。

当我复制index.php 进入此新页面并添加

<?php query_posts(\'post_type=post&posts_per_page=5&paged=\'.get_query_var(\'paged\')); ?>
高于

    <?php if ( have_posts() ) : ?>
...
...
然后一切正常-我的帖子显示出来了。如果我试着

 <?php   get_posts(); ?>
而不是

<?php query_posts(\'post_type=post&posts_per_page=5&paged=\'.get_query_var(\'paged\')); ?>
这些帖子没有显示出来。

因为每个人都建议get_posts() 一般情况下优于query_posts(), 我想知道如何使用get_posts().

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

问题是,与普遍的看法相反,pre_get_posts 不适用于单页请求。1 即使对于is\\U front\\u page(),也是如此。

至于get posts(), 为了工作,我需要使用如下语法:

<?php global $post;
$myposts = get_posts();
foreach( $myposts as $post ) :  setup_postdata($post); ?>
    ...
<?php endforeach; 
wp_reset_postdata(); ?>
而不是

<?php get_posts(); while ( have_posts() ) : the_post(); ?>
...

SO网友:Milo

每个页面都有一个“主查询”,该查询在加载模板之前运行。主查询的结果是WordPress如何确定要加载的模板。标准循环对主查询中包含的数据进行操作,这就是为什么它似乎可以神奇地“工作”,而无需您自己显式查询某些内容。

query_posts 覆盖该主查询的内容。这就是为什么你不应该使用query_posts- 您正在加载模板后更改查询结果,这可能会产生意外的后果。pre_get_posts 是修改主查询的首选方式,它在主查询发生之前运行,以便后面的所有操作都在正确的数据集上运行。

get_postsWP_Query 用于运行与主查询分离的附加查询。您必须将结果分配给一个变量,并对这些结果运行某种循环。您对的使用get_posts 什么都不做,因为您对该查询的结果什么都没做。

相关推荐