Как определить наличие следующей страницы

12 февр. 2011 г., 13:56:15
Просмотры: 30.5K
Голосов: 18

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

<div class="navigation">
    <div class="next-posts">
        <?php next_posts_link('&laquo; Старые записи') ?>
    </div>
    <div class="prev-posts">
        <?php previous_posts_link('Новые записи &raquo;') ?>
    </div>
</div>

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

0
Все ответы на вопрос 3
5
20

Вы можете использовать функции get_previous_posts_link и get_next_posts_link для проверки их существования, например так:

$prev_link = get_previous_posts_link(__('&laquo; Предыдущие записи'));
$next_link = get_next_posts_link(__('Следующие записи &raquo;'));
// как предложено в комментариях
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>';
}

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

12 февр. 2011 г. 14:12:00
Комментарии

Единственная проблема в том, что вы можете случайно отобразить пустой список, что приведёт к невалидной разметке и, по сути, создаст ту же проблему, с которой сталкивается пользователь в текущем коде.

t31os t31os
12 февр. 2011 г. 14:38:12

@t31os, думаю, я сделаю что-то вроде if ($prev_link || $next_link) // вывод ul

Jiew Meng Jiew Meng
12 февр. 2011 г. 15:16:30

Да, это должно сработать.. ;)

t31os t31os
12 февр. 2011 г. 16:32:57

Обновил код

Bainternet Bainternet
12 февр. 2011 г. 19:49:38

Спасибо за код, кстати, перед последней строкой не хватает echo '</ul>';.

Davey Davey
4 февр. 2017 г. 15:00:09
0
14

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

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

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

/**
 * Возвращает 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; Старые записи') ?></div>
    <div class="prev-posts"><?php previous_posts_link('Новые записи &raquo;') ?></div>
</div>
<?php endif; ?>
13 февр. 2011 г. 00:45:03
2

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

<?php
if(paginate_links()) {
...
}
9 нояб. 2018 г. 18:26:25
Комментарии

Важно отметить, что $wp_query доступен не везде; например, я попытался использовать его в переопределённом шаблоне WooCommerce, но объект не существовал, поэтому мне пришлось вызвать его из functions.php, используя ответ Эрика Мартина.

Brett Brett
27 янв. 2019 г. 21:40:42

Конечно, некоторые случаи, такие как пользовательские циклы и, возможно, WooCommerce, требуют особой обработки. В вашем случае следует проверить, как получить WP Query от WooCommerce или любой другой запрос, который он генерирует.

Maxwell s.c Maxwell s.c
27 янв. 2019 г. 23:02:33