Как определить наличие следующей страницы
Я новичок в разработке WordPress, пытаюсь конвертировать свой HTML в тему WordPress, начал с пустой темы Криса Койера.
<div class="navigation">
<div class="next-posts">
<?php next_posts_link('« Старые записи') ?>
</div>
<div class="prev-posts">
<?php previous_posts_link('Новые записи »') ?>
</div>
</div>
Как мне выводить div только если существует next_posts_link()
. Мне это нужно, так как я буду использовать <ul>
для своей пагинации. Если я этого не сделаю, у меня будет пустой маркер списка

Вы можете использовать функции get_previous_posts_link
и get_next_posts_link
для проверки их существования, например так:
$prev_link = get_previous_posts_link(__('« Предыдущие записи'));
$next_link = get_next_posts_link(__('Следующие записи »'));
// как предложено в комментариях
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>';
}
Надеюсь, это поможет

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

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

Я написал это некоторое время назад, но это все еще должно быть актуально:
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('« Старые записи') ?></div>
<div class="prev-posts"><?php previous_posts_link('Новые записи »') ?></div>
</div>
<?php endif; ?>

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