web-dev-qa-db-fra.com

La pagination Wordpress ne fonctionne pas - Toujours afficher le contenu des premières pages

Je travaille sur un site Web sur lequel j'ai un blog, mais j'ai aussi un type de message personnalisé qui me permet de publier des vidéos.

J'aimerais utiliser la pagination de sorte que s'il y a plus de 9 vidéos affichées, la pagination se produise.

La première partie de ceci fonctionne. Les vidéos sont en effet limitées à 9 par page et la pagination apparaît correctement en bas.

Cependant, lorsque je clique sur le lien de la deuxième page, même si l'URL change, les vidéos des premières pages sont affichées.

Pour mes articles de blog "normaux", la pagination fonctionne exactement comme prévu.

C'est le code actuel que j'utilise pour mon type de message personnalisé:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Toute aide serait grandement appréciée.

7
Johnny

Pourquoi votre code actuel échoue

Vous obtenez toujours le contenu de la première page, car le string des paramètres passés à query_posts étant encapsulé dans single quotes empêche les variables (ainsi que les séquences d'échappement pour les caractères spéciaux autres que $) d'être étendues.

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); would s'occupe de ce problème.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); serait aussi.

Et enfin, passer un tableau d’arguments mélangés à la place d’une chaîne de type requête URL serait .

Ceci étant dit, vous ne devez absolument pas utiliser query_posts :

Comment cela devrait être fait

Selon votre commentaire, vous avez tenté d'utiliser get_posts .
C’est une fonction très utile, mais ce n’est pas la bonne façon de procéder si vous voulez utiliser un WordPress-Loop par la suite. get_posts retourne un tableau d'objets post - la propriété WP_Query de l'objet posts. Mais seulement cette propriété, sans tous les autres avantages et méthodes, que WP_Query fournit.

Par conséquent, pour aller avec l'extrait de code ci-dessus, faites quelque chose dans le sens de ceci:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* The Loop */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // do something
        }
    } else {
        echo 'Sorry, no posts found.';
    }
?>
16
Johannes Pille