web-dev-qa-db-fra.com

La pagination transitoire ne fonctionne pas correctement

J'ai donc écrit ce qui suit pour créer un transitoire:

$wp_object_i_created = new WP_Query('cat=1');
set_transient('category_one_posts', $wp_object_i_created, 60*60*1);

Ok, alors j’ai décidé "Tu sais, laisse passer ça et recrache les messages."

Alors j'ai fait ce qui suit:

if(false !== get_transient('category_one_posts')){
    $posts_inside = get_transient('category_one_posts');
    if($posts_inside->have_posts()){
        while($posts_inside->have_posts()){
            $posts_inside->the_post();
            // Display your posts in some maner.
        }
        echo get_next_posts_link('« Older Entries', $max_pages);
        echo get_previous_posts_link('Newer Entries »', $max_pages);
    }
 }

Maintenant, la pagination fonctionne - , voici le piège - Cela fonctionne vraiment mal. Je l'ai donc configuré pour afficher 5 messages par page.

Donc, si je vais sur mon lien: http://localhost/wordpress/?page_id=1667 je vois mes 5 messages et au bas mes deux liens - un pour les anciens, un pour les plus récents. Woot. Mais si je clique sur le bouton "Entrées plus anciennes" pour revenir en arrière, mon lien ressemble maintenant à ceci: http://localhost/wordpress/?page_id=1667&paged=2 Je vois qui étaient à la page deux, je peux aller d'une page en avant et ainsi de suite - MAIS les messages sont les mêmes, ils ne mis à jour.

Maintenant, les requêtes habituelles sont effectuées pour obtenir des publications spécifiques en fonction de paramètres spécifiques, ou même simplement la boucle WordPress standard - leur pagination fonctionne comme prévu, vous accédez à la page deux, vous obtenez un ensemble de publications différent de celui de la page un - woot! - nous travaillons.

Mais la pagination basée transitoire ne fonctionne pas.

Pourquoi?

1
TheWebs

Réponse courte : Vous faites la même requête quelle que soit la page, mais vous attendez un résultat différent.

Réponse longue : la requête doit être différente pour la deuxième page, avec paged=2; votre requête (et les éléments transitoires) avec pagination doit donc ressembler à ceci:

$paged_var = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

if ( get_transient( 'category_one_posts-' . $paged_var ) == false ) {
    $posts_inside = new WP_Query(
        array(
             'cat' => 1,
             'paged' => $paged_var
        )
    );
    set_transient( 'category_one_posts-' . $paged_var, $posts_inside, 60*60*1 );
} else {
    $posts_inside = get_transient( 'category_one_posts-' . $paged_var );
}

if ( $posts_inside->have_posts() ) {
    while( $posts_inside->have_posts() ) {
        $posts_inside->the_post();
        // Display posts.
    }

    echo get_next_posts_link( __( 'Next', 'textdomain'), $posts_inside->max_num_pages );
    echo get_previous_posts_link( __( 'Previous', 'textdomain'), $posts_inside->max_num_pages );
}
0
Dan Ștefancu