Come determinare se esiste una pagina successiva

12 feb 2011, 13:56:15
Visualizzazioni: 30.5K
Voti: 18

Sono nuovo nello sviluppo WordPress e sto cercando di convertire il mio HTML in un tema WordPress, ho iniziato con il tema blank di Chris Coyer.

<div class="navigation">
    <div class="next-posts">
        <?php next_posts_link('&laquo; Post Precedenti') ?>
    </div>
    <div class="prev-posts">
        <?php previous_posts_link('Post Più Recenti &raquo;') ?>
    </div>
</div>

Come posso visualizzare il div solo se esiste un next_posts_link(). Ho bisogno di questo perché userò <ul> per la mia paginazione. Se non lo faccio, otterrò un punto elenco vuoto

0
Tutte le risposte alla domanda 3
5
20

Puoi utilizzare get_previous_posts_link e get_next_posts_link per determinare se esistono in questo modo:

$prev_link = get_previous_posts_link(__('&laquo; Articoli più vecchi'));
$next_link = get_next_posts_link(__('Articoli più recenti &raquo;'));
// come suggerito nei commenti
if ($prev_link || $next_link) {
  echo '<ul class="navigation">';
  if ($prev_link){
    echo '<li>'.$prev_link .'</li>';
  }
  if ($next_link){
    echo '<li>'.$next_link .'</li>';
  }
  echo '</ul>';
}

Spero sia utile

12 feb 2011 14:12:00
Commenti

L'unico problema è che potresti potenzialmente generare una lista vuota, che produrrebbe un markup non valido, e di fatto avresti lo stesso problema che l'utente ha con il codice esistente.

t31os t31os
12 feb 2011 14:38:12

@t31os, immagino che farò qualcosa come if ($prev_link || $next_link) // output ul

Jiew Meng Jiew Meng
12 feb 2011 15:16:30

Sì, quello risolverebbe.. ;)

t31os t31os
12 feb 2011 16:32:57

Codice aggiornato

Bainternet Bainternet
12 feb 2011 19:49:38

Grazie per il codice, manca echo '</ul>'; proprio prima dell'ultima riga comunque.

Davey Davey
4 feb 2017 15:00:09
0
14

L'ho scritto un po' di tempo fa, ma dovrebbe essere ancora valido:

http://www.ericmmartin.com/conditional-pagepost-navigation-links-in-wordpress-redux/

Puoi aggiungere la seguente funzione al tuo file functions.php:

/**
 * Se esiste più di una pagina, restituisce TRUE.
 */
function show_posts_nav() {
    global $wp_query;
    return ($wp_query->max_num_pages > 1);
}

Poi aggiorna il tuo codice con:

<?php if (show_posts_nav()) : ?>
<div class="navigation">
    <div class="next-posts"><?php next_posts_link('&laquo; Articoli più vecchi') ?></div>
    <div class="prev-posts"><?php previous_posts_link('Articoli più recenti &raquo;') ?></div>
</div>
<?php endif; ?>
13 feb 2011 00:45:03
2

la soluzione migliore è verificare $wp_query->max_num_pages, ma puoi anche usare:

<?php
if(paginate_links()) {
...
}
9 nov 2018 18:26:25
Commenti

È importante notare che $wp_query non sembra essere disponibile ovunque; ad esempio, ho provato a usarlo all'interno di un override di template WooCommerce e l'oggetto non esisteva, quindi ho dovuto richiamarlo da functions.php utilizzando la risposta di Eric Martin.

Brett Brett
27 gen 2019 21:40:42

Naturalmente, alcuni casi come loop personalizzati e forse WooCommerce devono essere gestiti separatamente. Nel tuo caso, dovresti verificare come ottenere la wp query di WooCommerce o qualunque query generi.

Maxwell s.c Maxwell s.c
27 gen 2019 23:02:33