Я хочу отобразить страницу архива с нумерацией страниц, на которой перечислены все категории на моем сайте, и каждая ссылка ведет на эту страницу архива конкретной категории. Так что это будет похоже на страницу архива категории архивов.
Каждая категория на моем сайте имеет свой эскиз, созданный вручную, чтобы соответствовать постоянной ссылке категории. У меня уже есть настройка макета для отображения всех категорий, но я делаю это с помощью пользовательского шаблона страницы, поэтому нет нумерации страниц. Это означает, что все категории отображаются на одной странице, что немного раздражает (у меня более 100 категорий).
Мой текущий архив настроен с определенным именем шаблона пользовательской страницы, page-catlist.php
но я хочу изменить его на любой другой тип файла шаблона.
Вот текущий код, который я использую для вывода всех категорий на одной странице:
$args = array(
'orderby' => 'name',
'order' => 'ASC'
);
$cats = get_categories( $args );
$thm_pre = 'http://example.com/images/thumbs/';
$thm_end = '.png';
foreach($cats as $cat) {
$thumbnail = $thm_pre.$cat->slug.$thm_end;
// output the loop HTML here
// basically a list of category names & thumbs
// all linked to the cat URL by get_category_link()
}
Я надеюсь, что есть лучший способ сделать это, чтобы я мог добавить естественную нумерацию страниц, в идеале с WP-PageNavi. Любая помощь будет принята с благодарностью!
источник
Ответы:
Пролистать список терминов / категорий / тегов довольно просто, и для этого вам нужно минимальное количество информации.
Давайте посмотрим на нас нужно
количество сроков
количество терминов на странице
get_terms()
( Просто обратите внимание, использованиеget_terms()
изменилось в версии 4.5 ). Вы также можете использовать,get_categories()
если хотите,get_categories()
это просто функция-обертка дляget_terms()
Итак, сначала нам нужно посчитать количество терминов. Для этого мы будем использовать
count
параметр вget_terms()
НОТА:
Весь код не проверен и требует как минимум
PHP 5.4
WordPress 4.5
Вы можете легко конвертировать это для работы со старыми версиями PHP и WordPress.
Теперь, когда мы знаем количество терминов, мы можем установить необходимое нам количество терминов на страницу, скажем, 10
Исходя из вышесказанного, теперь мы можем определить, сколько страниц у нас будет. Здесь значение будет передано функции требуемой нумерации страниц, в вашем случае,
wp_pagenavi()
В этом случае вы перейдете
$max_num_pages
к функции нумерации страницСледующая часть будет рассчитывать наше смещение. Мы только хотим получить соответствующее количество терминов на страницу, чтобы оптимизировать ситуацию. Нам не нужны все 100+ терминов на страницу. Запрашивать только необходимые 10 намного быстрее. Итак, нам нужно знать, на какой странице мы находимся, от этого мы рассчитаем смещение. Это будет передано
get_terms()
, и скажет,get_terms()
сколько терминов пропустить с начальной начальной точки.После этого мы также должны сказать,
get_terms()
чтобы вернуть только 10 условий. Давайте посмотрим на код для этого кускаУ вас будет только 10 терминов на страницу в зависимости от нумерации страниц. Теперь вы можете просто пройтись по вашим условиям
Просто обратите внимание, вы хотите убедиться, что у вас действительно есть термины, возвращенные из вашей
get_terms()
функции.источник
wp_pagnavi()
будет действительно работать в этом случае?next_posts_link()
,previous_posts_link()
иpaginate_links()
. Это также будет работать с любой функцией подкачки, где вы можете передать целочисленное значение функции, как моя функция подкачки здесь . Что касаетсяwp_pagenavi()
, я не могу сказать да или нет, поскольку я действительно не знаю, как работает эта функция, вам нужно будет проверить это. В моем коде выше$max_num_pages
содержится количество страниц, это целочисленное значение, именно эту переменную нужно передать функциям для вычисления нумерации страницЯ не знаком с WP-PageNavi, но подозреваю, что он предполагает работу с постами, поэтому он может легко испортиться, если вы будете использовать его в цикле, подобном вашему. Возможно, CSS еще может помочь в оформлении вашего HTML. Во всяком случае, настроить свою собственную нумерацию страниц не так сложно.
Во-первых, вам нужно знать, сколько существует категорий:
Далее вам нужно определить, сколько элементов на странице вы хотите:
Это даст вам количество страниц:
Третья часть информации, которая вам нужна, это страница, на которой вы находитесь. Вы можете отслеживать это, введя
query_var
Ваш URL-адрес, который будет выглядеть примерно так:www.example.com/yourcatpage?catpage=2
Прежде чем начать цикл, вам необходимо знать, какая страница называется:
Отсюда вы можете вызвать первый элемент, который хотите отобразить:
и последний:
Последняя страница может содержать меньше
$cats_per_page
категорий, поэтому дополнительно вам необходимо:Теперь переберите нужные элементы
$cats
:После цикла вы можете использовать переменные для генерации предыдущих / следующих тегов или даже другого типа навигации.
Остерегайтесь, что я на самом деле не тестировал этот код. Возможно, я допустил некоторые ошибки, когда учел, что первый элемент в массиве имеет ключ 0.
источник