如何reset_postdata
作品医生说:
使用新的WP\\U查询在辅助查询循环之后还原主查询循环的全局$post变量
但在课堂上,它占据了当前WP_Query
实例,并将其设置为全局$post
. 那么它如何恢复主查询循环的post呢?
如何reset_postdata
作品医生说:
使用新的WP\\U查询在辅助查询循环之后还原主查询循环的全局$post变量
但在课堂上,它占据了当前WP_Query
实例,并将其设置为全局$post
. 那么它如何恢复主查询循环的post呢?
WP_Query::reset_postdata()
设置全局post变量($GLOBALS[\'post\'] === $post
)到当前回路中的当前柱WP_Query
例子
public function reset_postdata() {
if ( ! empty( $this->post ) ) {
$GLOBALS[\'post\'] = $this->post;
$this->setup_postdata( $this->post );
}
}
这意味着,如果在页面上运行自定义查询,$post
将保留该自定义查询循环中的最后一篇文章。您可以通过添加?><pre><?php var_dump($post); ?></pre><?php
直接在自定义查询的循环之后。循环之后的主查询也是如此,$post
将保留主查询的最后一个帖子和循环前的第一个帖子。
下面是一个简单的测试$post
全球的您可以将其添加到函数文件中,并加载站点上的任何页面
add_action( \'wp_head\', function()
{
global $post;
?><pre><?php var_dump($post->ID); ?></pre><?php
}):
add_action( \'wp_footer\', function()
{
global $post;
?><pre><?php var_dump($post->ID); ?></pre><?php
$q = new WP_Query( \'posts_per_page=3\' );
while ( $q->have_posts() ) {
$q->the_post();
?><pre><?php var_dump($post->ID); ?></pre><?php
the_title();
}
?><pre><?php var_dump($post->ID); ?></pre><?php
wp_reset_postdata();
?><pre><?php var_dump($post->ID); ?></pre><?php
});
那么它如何恢复主查询循环的post呢?通过调用wp_reset_postdata()
重置全局$post
到主查询循环中的当前帖子。这通常是最后一篇文章的第一篇,具体取决于您是在主查询循环之前还是之后添加自定义查询。
让我们看看如何wp_reset_postdata()
是吗
function wp_reset_postdata() {
global $wp_query;
if ( isset( $wp_query ) ) {
$wp_query->reset_postdata();
}
}
正如你所见,wp_reset_postdata()
只是一个包装WP_Query::reset_postdata()
. 这里重要的一点是,它是主查询对象方法的包装器,$wp_query->reset_postdata();
.记住,主查询还使用WP_Query
. 下面是如何设置主查询对象
/**
* WordPress Query object
* @global WP_Query $wp_the_query
* @since 2.0.0
*/
$GLOBALS[\'wp_the_query\'] = new WP_Query();
/**
* Holds the reference to @see $wp_the_query
* Use this global for WordPress queries
* @global WP_Query $wp_query
* @since 1.5.0
*/
$GLOBALS[\'wp_query\'] = $GLOBALS[\'wp_the_query\'];
那又怎样wp_reset_postdata()
它接受主查询对象中的当前帖子,并将其设置为$post
全球,这就是WP_Query::reset_postdata()
集合$post
到主查询的当前职位我不熟悉PHP和WordPress,我很好奇:为什么WP查询是大写的?这是基于查询类型的PHP命名约定吗?还是怎样谢谢