Comment déterminer s'il y a une page suivante

16

Je suis nouveau dans le développement wordpress, essayant simplement de convertir mon HTML en thème WordPress, j'ai commencé avec le thème vierge de 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>

Comment puis-je sortir le div uniquement s'il y a un next_posts_link(). J'en ai besoin car je vais l'utiliser <ul>pour ma pagination. Si je ne fais pas ça, je recevrai une balle vide

Jiew Meng
la source

Réponses:

18

Vous pouvez utiliser get_previous_posts_linket get_next_posts_link pour déterminer s'ils existent comme ceci:

$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>';
}

J'espère que cela t'aides

Bainternet
la source
Le seul problème est que vous pouvez potentiellement afficher une liste vide, ce qui produira le balisage non valide et aura en fait le même problème que l'utilisateur a avec le code existant.
t31os
3
@ t31os, je suppose que je ferai quelque chose commeif ($prev_link || $next_link) // output ul
Jiew Meng
Ouais ça le ferait ..;)
t31os
Mise à jour du code
Bainternet
Merci pour le code, il manque echo '</ul>';juste avant la dernière ligne btw.
Davey
13

Je l'ai écrit il y a un certain temps, mais devrait toujours être valide:

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

Vous pouvez ajouter la fonction suivante à votre functions.phpfichier:

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

La mise à jour de votre code pour:

<?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; ?>
Eric Martin
la source
3

la meilleure solution est de vérifier $wp_query->max_num_pages, mais vous pouvez également utiliser:

<?php
if(paginate_links()) {
...
}
Maxwell sc
la source
1
Il est important de noter que $wp_querycela ne semble pas être disponible partout; par exemple, j'ai essayé de l'utiliser dans un remplacement de modèle WooCommerce et l'objet n'existait pas, j'ai donc dû l'appeler de l'intérieur à la functions.phpplace en utilisant la réponse d'Eric Martin.
Brett
Bien sûr, certains cas tels que les boucles personnalisées et peut-être le woocommerce doivent être traités. Dans votre cas, vous devriez vérifier comment obtenir la requête wp de woocommerce ou la requête qu'elle génère.
Maxwell sc