Come determinare se esiste una pagina successiva


16

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

<div class="navigation">
    <div class="next-posts">
        <?php next_posts_link('&laquo; Older Entries') ?>
    </div>
    <div class="prev-posts">
        <?php previous_posts_link('Newer Entries &raquo;') ?>
    </div>
</div>

Come posso emettere il div solo se c'è un next_posts_link(). Ho bisogno di questo come <ul>userò per la mia impaginazione. Se non lo faccio, otterrò un proiettile vuoto

Risposte:


18

È possibile utilizzare get_previous_posts_linke get_next_posts_link per determinare se esistono in questo modo:

$prev_link = get_previous_posts_link(__('&laquo; Older Entries'));
$next_link = get_next_posts_link(__('Newer Entries &raquo;'));
// as suggested in comments
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 che sia di aiuto


L'unico problema è che potresti potenzialmente rendere un elenco vuoto, che produrrà il markup non valido, e in effetti avrà lo stesso problema che l'utente ha con il codice esistente ..
t31os,

3
@ t31os, immagino che farò qualcosa del genereif ($prev_link || $next_link) // output ul
Jiew Meng,

Sì, lo farebbe ..;)
t31os,

Aggiornato il codice
Bainternet,

Grazie per il codice, manca echo '</ul>';poco prima dell'ultima riga tra parentesi.
Davey,

13

L'ho scritto poco fa, ma dovrebbe essere ancora valido:

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

È possibile aggiungere la seguente funzione al functions.phpfile:

/**
 * If more than one page exists, return TRUE.
 */
function show_posts_nav() {
    global $wp_query;
    return ($wp_query->max_num_pages > 1);
}

Aggiorna il tuo codice per:

<?php if (show_posts_nav()) : ?>
<div class="navigation">
    <div class="next-posts"><?php next_posts_link('&laquo; Older Entries') ?></div>
    <div class="prev-posts"><?php previous_posts_link('Newer Entries &raquo;') ?></div>
</div>
<?php endif; ?>

3

la soluzione migliore sta controllando $wp_query->max_num_pages, ma puoi anche usare:

<?php
if(paginate_links()) {
...
}

1
È importante notare che $wp_querynon sembra essere disponibile ovunque; per esempio, ho provato ad usarlo all'interno di un override del template di WooCommerce e l'oggetto non esisteva, quindi ho dovuto chiamarlo dall'interno functions.phpusando la risposta di Eric Martin.
Brett,

Certo, alcuni casi come i loop personalizzati e forse il woocommerce devono essere gestiti. Nel tuo caso, dovresti controllare come ottenere la query wp di woocommerce o qualsiasi query che generi.
Maxwell sc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.