web-dev-qa-db-fra.com

paginate_links () génère des pages vides supplémentaires sur une boucle personnalisée

J'ai une boucle personnalisée:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$works = new WP_Query('category_name=work&posts_per_page=9&paged=' . $paged); 

Sorties de pagination 3 pages, il y a d'abord 9 articles, ce qui correspond également au nombre total d'articles, et aux pages 2 et 3, il n'y a pas d'articles (il ne devrait pas y avoir de pages s'il n'y a pas d'articles, n'est-ce pas?)

Voici ma paginate_links():

<?php elseif ( $wp_query->max_num_pages > 1 && ( is_home() || is_archive() || is_search() || is_category() ) ) : // navigation links for home, archive, and search pages ?>

    <?php 
        global $wp_query;

    $big = 999999999;

    echo paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'prev_text' => '',
        'next_text' => '',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages
    ) );

    ?>

<?php endif; ?>

Sur la boucle par défaut, tout va bien.

1
Bojana Šekeljić

Vous utilisez votre WP_Query personnalisé pour interroger les publications, mais dans la pagination, vous utilisez la variable globale $wp_query, qui contient une requête différente.

Vous devez utiliser votre variable de requête personnalisée $works dans votre pagination ou modifier la variable globale $wp_query avant votre appel à la fonction de pagination.

Puisque vous utilisez la fonction universelle pour la pagination en sortie, la seconde méthode sera meilleure/plus facile. Fais-le comme ça:

global $wp_query;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$works = new WP_Query('category_name=work&posts_per_page=9&paged=' . $paged);

$original_query = $wp_query;  // store original query for later use
$wp_query = $works;  // overwrite it with your custom query

... your code

... your pagination code

$wp_query = $original_query;  // restore original query
3
Krzysiek Dróżdż

Utilisez simplement votre objet WP_Query/$works personnalisé pour accéder aux données des arguments paginate_links().

paginate_links( array(
    'base'      => str_replace( 99999999, '%#%', esc_url( get_pagenum_link( 99999999 ) ) ),
    'format'    => '?paged=%#%',
    'prev_text' => '',
    'next_text' => '',
    'current'   => max( 1, $works->get( 'paged' ) ),
    'total'     => $works->max_num_pages
) );
4
kaiser