wordpress 中 wp_query 和 wp_the_query 有什么区别
简单的可以这么说, 如果你没有使用 query_posts 那么他们两个是一样的。 wp_query 是 wp_the_query 的一个副本。
测试代码
echo "###### \$wp_query->query ##############" .PHP_EOL;
var_dump($wp_query->query);
echo "###### \$wp_the_query->query ##########" .PHP_EOL;
var_dump($wp_the_query->query);
echo "#####################################" .PHP_EOL;
echo "###### 执行 query_posts ############" .PHP_EOL;
echo "#####################################" .PHP_EOL;
$args = array(
'post_type'=>'product',
'order'=>'DESC'
);
// global $wp_query;
query_posts($args);
echo "###### \$wp_query->query ##############" .PHP_EOL;
var_dump($wp_query->query);
echo "###### \$wp_the_query->query ##########" .PHP_EOL;
var_dump($wp_the_query->query);
echo "###### \$wp_query->query ##############" .PHP_EOL;
echo "###### 执行 wp_reset_query ##########" .PHP_EOL;
echo "#####################################" .PHP_EOL;
wp_reset_query();
echo "#####################################" .PHP_EOL;
var_dump($wp_query->query);
echo "###### \$wp_the_query->query ##########" .PHP_EOL;
var_dump($wp_the_query->query);
输出
###### $wp_query->query ##############
array(0) {
}
###### $wp_the_query->query ##########
array(0) {
}
#####################################
###### 执行 query_posts ############
#####################################
###### $wp_query->query ##############
array(2) {
["post_type"]=>
string(7) "product"
["order"]=>
string(4) "DESC"
}
###### $wp_the_query->query ##########
array(0) {
}
###### $wp_query->query ##############
###### 执行 wp_reset_query ##########
#####################################
#####################################
array(0) {
}
###### $wp_the_query->query ##########
array(0) {
}
可以看到 $wp_the_query 是没有变化的, 使用了 query_posts 后 $wp_query 就发生了变化。使用 wp_reset_query 后 $ wp_query 内容又恢复为执行 query_posts 之前的内容。
这也很好的说明了,执行 query_posts 后要执行 wp_reset_query 。