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

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


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; ?>

3

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.