Paginarea unui WP_query nu afișează link-urile de navigare

4 sept. 2014, 16:23:55
Vizualizări: 29.2K
Voturi: 6

Am probleme la adăugarea paginării pe o pagină. Folosesc WP_query și aș dori să afișez 4 postări pe pagină. Query-ul de bază pare să funcționeze OK dar probabil îmi scapă ceva legat de paginare.

// Query-ul pentru 4 postări
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query();
$query->query('showposts=4'.'&paged='.$paged);

if ( $query->have_posts() ) : 
    while ( $query->have_posts() ) : $query->the_post(); ?>
    <div class="post">
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      <p class="author">de <?php the_author(); ?></p>
    </div>
    <?php endwhile; ?>
    <!-- sfârșitul buclei -->
    <nav>
        <?php previous_posts_link('&laquo; Postări mai noi') ?>
        <?php next_posts_link('Postări mai vechi &raquo;') ?>
    </nav>

        <?php wp_reset_postdata();

        // Dacă nu există rezultate
        else : ?>
            <p><?php _e( 'Ne pare rău, nicio postare nu corespunde criteriilor.' ); ?></p>
        <?php endif; ?>

Am setat variabila pentru paginare în partea de sus astfel:

$query->query('showposts=4'.'&paged='.$paged);

Includ navigarea pentru paginare astfel:

<nav>
    <?php previous_posts_link('&laquo; Postări mai noi') ?>
    <?php next_posts_link('Postări mai vechi &raquo;') ?>
</nav>

Dar primesc doar HTML gol <nav></nav> - fără erori, și nu-mi dau seama ce îmi lipsește.

Editare: Conform sugestiei am actualizat astfel:

        $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
        $args = array(
            'posts_per_page' => 4,
            'paged'          => $paged,
        );
        $query = new WP_Query( $args );

și am actualizat link-ul butonului la:

<?php next_posts_link( 'Postări mai vechi &raquo;', $query->max_num_pages ); ?>

Tot nu văd link-ul de paginare.

2
Comentarii

Încearcă asta: next_posts_link('Postări mai vechi &raquo;', $query->max_num_pages)

Howdy_McGee Howdy_McGee
4 sept. 2014 16:50:45

Poate ai vrea să arunci o privire la Cum să repari paginarea pentru bucle personalizate?.

Nicolai Grossherr Nicolai Grossherr
4 sept. 2014 17:17:42
Toate răspunsurile la întrebare 2
7
13

Te rog să nu folosești showposts deoarece a fost înlocuit de posts_per_page acum mult timp.

Personal, aș adăuga argumentele la WP_Query așa cum este arătat mai jos, iar paginarea ar trebui să funcționeze astfel:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
    'posts_per_page' => 4,
    'paged'          => $paged,
);
$the_query = new WP_Query( $args );

global $wp_query;
// Salvează obiectul query implicit într-o variabilă temporară
$tmp_query = $wp_query;
// Acum șterge-l complet
$wp_query = null;
// Repopulează globalul cu query-ul nostru personalizat
$wp_query = $the_query;

if ( $the_query->have_posts() ) : 
    while ( $the_query->have_posts() ) : $the_query->the_post();
        // codul pentru loop
    endwhile;

    previous_posts_link( '&laquo; Postări mai noi' );
    next_posts_link( 'Postări mai vechi &raquo;', $the_query->max_num_pages );
    wp_reset_postdata();

else :
    // cod pentru lipsa postărilor 
endif;

// Restaurează obiectul query original
$wp_query = null;
$wp_query = $tmp_query;

Aceasta este aceeași soluție ca în întrebarea și răspunsul Cum să repari paginarea pentru loop-uri personalizate? la care te-am trimis, de la @ChipBennett.

O altă observație, dacă acest cod este într-un template de pagină care funcționează ca pagină principală statică, trebuie să folosești variabila de query page în loc de paged:

$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
4 sept. 2014 16:53:31
Comentarii

Salut. Acesta este doar într-o pagină standard, nu o pagină principală statică. Din păcate, codul pe care l-ai furnizat nu funcționează :(

Francesca Francesca
4 sept. 2014 17:43:11

Codul tău ar trebui să funcționeze +1

Pieter Goosen Pieter Goosen
4 sept. 2014 17:53:46

@Francesca Ai citit întrebarea pe care am legat-o în comentariul meu? În special partea legată de »Hack the main query object«.

Nicolai Grossherr Nicolai Grossherr
4 sept. 2014 17:57:06

Mulțumesc, această soluție funcționează. Îmi cer scuze că nu am văzut editarea ta.

Francesca Francesca
4 sept. 2014 18:47:02

Cu plăcere. Nici o problemă, în plus la început nu am adăugat »hack-ul pentru query principal«, care este motivul pentru care acum funcționează. @Francesca

Nicolai Grossherr Nicolai Grossherr
4 sept. 2014 18:50:30

Nu mai funcționează. Aruncă atât de multe erori

sheetal sheetal
4 mai 2018 10:13:33

@sheetal Funcționează, am greșit doar numele variabilelor, le-am corectat.

Nicolai Grossherr Nicolai Grossherr
5 mai 2018 12:49:10
Arată celelalte 2 comentarii
0

Un lucru bun de făcut, obține valoarea posts_per_page din WordPress. Puteți modifica această valoare în meniul de administrare WordPress.

$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if(!$page)
    $page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;

$posts_per_page = get_option( 'posts_per_page' );

$query = new WP_Query( array(
    'posts_per_page' => $posts_per_page,
    'paged'          => $page,
    'post_status'    => 'publish',
    'orderby'        => 'title',
    'order'          => 'ASC',
) );

while ( $query->have_posts() ) {
    $query->the_post();

    // Cod pentru Afișare
}
17 aug. 2017 09:00:03