需要澄清QUERY_POST

时间:2015-01-25 作者:Richard

我最了解query\\u posts的功能和工作原理。我也知道使用它不是一个好习惯。但我想知道“$posts”变量在此设置中的具体作用:

<?php 

global $query_string; 
$posts = query_posts($query_string.\'&cat=-9\'); 

if (have_posts()) : while (have_posts()) : the_post();
...
endwhile; else:
...
endif;
wp_reset_query(); // reset the query
?>
有人能解释一下循环中如何使用“$posts”吗?非常感谢。

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

有人能解释一下循环中如何使用“$posts”吗?

It isn\'t.

它返回被查询帖子的数组,但它无关紧要,根本不使用:如果删除它,代码的工作原理相同:

global $query_string; 
query_posts($query_string.\'&cat=-9\'); 

if (have_posts()) : while (have_posts()) : the_post();
...
endwhile; endif;
这是因为query_posts() 推翻global $wp_query 对象,即循环函数的查询对象have_posts()the_post() 用于显示帖子。

这就是为什么不应使用该功能的原因:

重写一个广泛使用的全局变量很容易产生副作用,因为您用另一个已运行的查询重写一个已运行的查询,对数据库运行查询两次,所以速度非常慢如果需要从主(全局)查询中单独查询,而不是覆盖主查询,只需使用WP_Query 对象或get_posts.

如果需要修改主查询,请修改它before 它可以运行,这样您将只运行1个查询而不是2个查询,并且您的代码将更快。要在运行主查询之前编辑它,请使用\'pre_get_posts\' 行动挂钩。

结束

相关推荐

Custom taxonomy template loop

我知道这个问题问得很多,但我找不到一个适合我的答案。我制作了一些自定义帖子类型和一些自定义分类法。我有自定义的帖子类型Products 并与分类法相联系Product Categories. 当用户在产品页面上单击产品类别时,我想向他显示该特定类别中的所有产品。问题是,产品类别将约为50种。现在我发现的唯一一件事就是把这个<?php $loop = new WP_Query( array( \'post_type\' => \'all_products\', \'posts_per_page\