我正式错过了一些关于暂时性帖子的东西

时间:2013-11-03 作者:TheWebs

我对制造瞬变没有异议。我有一个问题是分页,我以前也发过帖子,每个人都说查询必须是这样的,例如:

        $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 作品但在瞬态中设置它会导致分页失败。。。

为什么?我搞不懂。有人能告诉我吗?

1 个回复
最合适的回答,由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\' ) );

结束