我对制造瞬变没有异议。我有一个问题是分页,我以前也发过帖子,每个人都说查询必须是这样的,例如:
$queried_post = array(
\'post_type\' => \'post\',
\'paged\' => get_query_var( \'paged\' )
);
这就是:
$query = new WP_Query($queried_post);
并存储:
set_transient(\'posts\', $query, 60); // For testing purposes, we reset every 60 seconds.
那么我会:
gloabl $wp_query;
$original = $wp_query;
// Obviously you would do checks to see if the transient
// exists. But lets assume it always exists.
$wp_query = get_transient(\'posts\');
if($wp_query->have_posts()){
while ($wp_query->have_posts()) {
$wp_query->the_post();
// display content ...
}
var_dump($wp_query->max_num_pages); // Shows me: float 4
echo get_next_posts_link( __( \'Next\', \'textdomain\'), $wp_query->max_num_pages );
echo get_previous_posts_link( __( \'Previous\', \'textdomain\'), $wp_query->max_num_pages );
}
$wp_query = $original;
我甚至尝试了我所知道的一切,包括测试原始查询和分页,我可以分页回4页并转发到最新的页面。因此,查询
not set in a transient 作品但在瞬态中设置它会导致分页失败。。。
为什么?我搞不懂。有人能告诉我吗?
最合适的回答,由SO网友:Milo 整理而成
假设你有10页的帖子,每页10篇。当您加载第一页时,临时页面还不存在,您的查询将加载第一页(10篇文章),然后将其放入临时页面。
现在,您导航到第2页,并检查瞬态是否存在。确实如此(您在第1页上设置了它),因此您可以加载它,而不是运行新的查询。除非你的过渡期仍然包含帖子1-10,而不是你应该在第2页看到的11-20。
您需要为每页帖子设置一个唯一的临时键,例如:
set_transient( \'posts_\' . get_query_var( \'paged\' ) , $query, 60);
然后按页面获取:
get_transient( \'posts_\' . get_query_var( \'paged\' ) );