Как определить, есть ли следующая страница

16

Я новичок в разработке WordPress, просто пытаясь преобразовать мой HTML в тему WordPress, я начал с пустой темы Криса Койера.

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

Как я могу вывести div, только если есть next_posts_link(). Мне нужно это, поскольку я буду использовать <ul>для моей нумерации страниц. Если я этого не сделаю, я получу пустую пулю

Jiew Meng
источник

Ответы:

18

Вы можете использовать get_previous_posts_linkи, get_next_posts_link чтобы определить, существуют ли они следующим образом:

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

Надеюсь это поможет

Bainternet
источник
Единственная проблема в том, что вы потенциально можете отобразить пустой список, который приведет к неверной разметке, и фактически будет иметь ту же проблему, что и пользователь, с существующим кодом ..
t31os
3
@ t31os, я думаю, я сделаю что-то вродеif ($prev_link || $next_link) // output ul
Jiew Meng
Да что бы это сделать ..;)
t31os
Обновил
Спасибо за код, он отсутствует echo '</ul>';перед последней строкой между прочим.
Дэйви,
13

Я написал это некоторое время назад, но все еще должен быть действительным:

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

Вы можете добавить следующую функцию в ваш functions.phpфайл:

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

Обновите ваш код до:

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

лучшее решение - это проверка $wp_query->max_num_pages, но вы также можете использовать:

<?php
if(paginate_links()) {
...
}
Maxwell sc
источник
1
Важно отметить, что, $wp_queryкажется, не везде доступно; например, я пытался использовать его в переопределении шаблона WooCommerce, а объект не существовал, поэтому мне пришлось вызывать его изнутри functions.php, используя ответ Эрика Мартина.
Бретт
Конечно, некоторые случаи, такие как пользовательские циклы и, возможно, woocommerce, должны быть обработаны. В вашем случае вы должны проверить, как получить wp-запрос woocommerce или любой другой запрос, который он генерирует.
Максвелл sc