So stellen Sie fest, ob es eine nächste Seite gibt

16

Ich bin neu in der WordPress-Entwicklung und versuche gerade, mein HTML in ein WordPress-Theme zu konvertieren. Ich habe mit Chris Coyers leerem Theme begonnen.

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

Wie kann ich Ausgang der div nur , wenn es ein next_posts_link(). Ich brauche das, da ich es <ul>für meine Paginierung verwenden werde. Wenn ich das nicht tue, bekomme ich eine leere Kugel

Jiew Meng
quelle

Antworten:

18

Sie können get_previous_posts_linkund verwenden, get_next_posts_link um festzustellen, ob sie wie folgt vorhanden sind:

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

Hoffe das hilft

Bainternet
quelle
Das einzige Problem besteht darin, dass Sie möglicherweise eine leere Liste rendern, wodurch das ungültige Markup erzeugt wird. In der Tat tritt das gleiche Problem auf, das der Benutzer mit dem vorhandenen Code hat.
t31os
3
@ t31os, ich denke, ich werde so etwas tunif ($prev_link || $next_link) // output ul
Jiew Meng
Ja, das würde es schaffen.;)
31.02.11
Der Code wurde aktualisiert
Bainternet
Danke für den Code, er fehlt echo '</ul>';übrigens kurz vor der letzten Zeile.
Davey
13

Ich habe das vor einiger Zeit geschrieben, sollte aber noch gültig sein:

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

Sie können Ihrer functions.phpDatei die folgende Funktion hinzufügen :

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

Aktualisieren Sie Ihren Code auf:

<?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
quelle
3

Die beste Lösung ist das Prüfen $wp_query->max_num_pages, aber Sie können auch Folgendes verwenden:

<?php
if(paginate_links()) {
...
}
Maxwell sc
quelle
1
Es ist wichtig zu beachten, dass $wp_queryes nicht überall verfügbar zu sein scheint. Ich habe zum Beispiel versucht, es innerhalb einer WooCommerce-Vorlagenüberschreibung zu verwenden, und das Objekt war nicht vorhanden. Deshalb musste ich es von innen aufrufen, functions.phpindem ich die Antwort von Eric Martin verwendete.
Brett
Natürlich müssen einige Fälle wie benutzerdefinierte Schleifen und möglicherweise Woocommerce behandelt werden. In Ihrem Fall sollten Sie überprüfen, wie Sie die wp-Abfrage von woocommerce erhalten oder welche Abfrage sie generiert.
Maxwell sc