Jak ustalić, czy jest następna strona

16

Jestem nowy w tworzeniu wordpress, próbuję tylko przekonwertować HTML na motyw WordPress, zacząłem od pustego motywu Chrisa Coyera.

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

Jak mogę wypisać div, tylko jeśli istnieje next_posts_link(). Potrzebuję tego, ponieważ będę używać go <ul>do paginacji. Jeśli tego nie zrobię, dostanę pustą kulę

Jiew Meng
źródło

Odpowiedzi:

18

Możesz użyć get_previous_posts_linki, get_next_posts_link aby ustalić, czy istnieją one w ten sposób:

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

Mam nadzieję że to pomoże

Bainternet
źródło
Jedynym problemem jest potencjalnie może uczynić pustą listę, która będzie produkować nieprawidłowy znaczników iw efekcie będzie miał ten sam problem użytkownik ma z istniejącego kodu ..
t31os
3
@ t31os, chyba zrobię coś takiegoif ($prev_link || $next_link) // output ul
Jiew Meng,
Tak, to by to
zrobiło
Zaktualizowano kod
Bainternet,
Dzięki za kod, brakuje go echo '</ul>';tuż przed ostatnim wierszem btw.
Davey
13

Napisałem to jakiś czas temu, ale nadal powinno być ważne:

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

Możesz dodać następującą funkcję do swojego functions.phppliku:

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

Zaktualizuj kod do:

<?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
źródło
3

najlepszym rozwiązaniem jest sprawdzenie $wp_query->max_num_pages, ale możesz także użyć:

<?php
if(paginate_links()) {
...
}
Maxwell sc
źródło
1
Należy zauważyć, że $wp_querynie wszędzie jest dostępny; na przykład próbowałem użyć go w ramach zastąpienia szablonu WooCommerce i obiekt nie istniał, więc functions.phpzamiast tego musiałem wywołać go od wewnątrz , używając odpowiedzi Erica Martina.
Brett
Oczywiście, niektóre przypadki, takie jak niestandardowe pętle i może woocommerce, wymagają obsługi. W twoim przypadku powinieneś sprawdzić, jak uzyskać zapytanie wp woocommerce lub dowolne wygenerowane zapytanie.
Maxwell sc