Разбиение страницы не создается, когда есть только одна страница сообщений

После окончания The Loop я просто имею:

echo paginate_links(array( 'mid_size' => 3, 'prev_text' => __( 'Previous posts' ), 'next_text' => __( 'Next posts' ) )); 

Однако разбиение на страницы отображается только тогда, когда количество страниц больше 1. Другими словами, если у меня есть 1 сообщение, а на панели инструментов WordPress «Настройки -> Чтение -> Страницы блога показывают не более 1 сообщения», то разбиение на страницы isn ' t, если я добавлю сообщения, это будет. Если я затем увеличим настройку приборной панели до 2, разбиение на страницы снова исчезнет.

Вы можете задаться вопросом, какую разбивку на страницы я ожидаю увидеть, есть ли у меня только одна страница. Я ожидаю увидеть текущую страницу, то есть 1. Не имея этого, портит макет страницы.

Это нормальное поведение? Кажется странным, что это было бы, учитывая, что страницы категорий для новых категорий только с одним сообщением не показывают разбиения на страницы.

Если это поведение является нормальным, как я могу понять, что отображается только одна страница, чтобы я мог вставить текущую страницу 1 на свою страницу, чтобы исправить мой макет?

Поведение

Поведение удаления разбивки на страницы, когда отображается менее 2 страниц отображаемых элементов, является жестко запрограммированным и преднамеренным. Элемент paginate_links() Codex указывает, что основной целью функции является отображение ссылок на страницы для записей архива. В архиве, представляющем собой набор элементов, можно утверждать, что один элемент сам по себе не является архивом.

В то же время я понимаю вашу мотивацию – перечисление особых элементов кажется на первый взгляд избыточной задачей, но, безусловно, имеет свои приложения в дизайне.

Тем не менее, я должен добавить, что я считаю, что он представляет конечным пользователям данные, которые практически не имеют отношения к их интересам – большинство посетителей не склонны заботиться о том, чтобы они находились на странице 1 из 1. И если архив только когда-либо, чтобы содержать один элемент, тогда было бы гораздо страннее отображать разбивку на страницы, подразумевающие страницы предметов, которые никогда не будут существовать.


Задний план

Это поведение может быть идентифицировано в источнике для функции paginate_links() в строке 2628 , где функция возвращает раньше, если на ней меньше 2 страниц содержимого.


Решения

  • Моим личным подходом было бы разместить разбиение на страницы в <div> определенной высоты и поддерживать жестко закодированное поведение функции. Таким образом, разбиение на страницы по-прежнему отображается только там, где это необходимо, но это отсутствие не уничтожит остальную часть вашего макета.

  • Если абсолютно необходимо, чтобы номер страницы отображался, когда есть только одна страница, предложение Андрея использовать is_paged() чтобы условно отобразить альтернативу is_paged() на страницы – это путь.

  • Напишите пользовательскую функцию для вывода ссылок на страницы, как вы пожелаете

  • Можно создать хак, который достигнет желаемого эффекта, спуфинг числовых страниц, доступных перед вызовом paginate_links() , а затем удаление ссылок на несуществующие страницы из возвращаемого значения функции или через крючок фильтра paginate_links, однако , что делает это, вероятно, требует гораздо больше времени, усилий и кода, чем другие решения, и, скорее всего, будет повреждено одним из основных обновлений в будущем.

Разделение по страницам в WordPress по умолчанию осуществляется с помощью Older posts и Newer posts ссылок / кнопок сообщений.

Когда вы находитесь на первой странице, вы не можете / не должны иметь Newer posts , так как их нет. Если присутствует, кнопка должна быть либо отключена, либо введена в заблуждение. То же самое касается Older posts когда вы находитесь на последней странице. Итак, если вы на первой и последней странице своих сообщений, они оба должны отсутствовать или быть отключены .

Однако, если вам нужно изменить это по каким-либо причинам, условие, которое вы ищете, is_paged() .

Это будет типичный показ, используя paginate_links() из вашего вопроса:

  if ( is_paged() ) { echo paginate_links(array( 'mid_size' => 3, 'prev_text' => __( 'Previous posts' ), 'next_text' => __( 'Next posts' ) )); } else { echo '<a href="javascript:history.go(0)">Page 1</a>'; } 

Вам придется обернуть ссылку в тех же самых родителях, что и ссылки на страницы, и дать ей классы этих элементов, а также активировать ее. Изучите элементы ваших ссылок на страницы для этого.