Intereting Posts
Несколько родительских категорий не может видеть живую версию style.css – это кеширование веб-сервера? WP E-commerce и Display Необычные уведомления о покупке Почему save_post срабатывает, даже когда я не сохранял сообщение Использование admin-ajax предотвращает регулярную отправку php-формы Разрешить сканеру Google сканировать определенные страницы авторов Список случайных сообщений на одной странице в текущей категории Несколько раз активируйте крючок активации Преобразование пользовательской таксономии в обычные сообщения Как получить реальный тип файла для изображений, у которых нет расширения WP User Meta в URL-адресе QR-кода Создание пользовательского типа сообщения и присоединение к пользователям Как установить категорию по умолчанию для пользовательского типа сообщений в WordPress? Записи портфолио WordPress Доступ к внешней базе данных: ERR_INCOMPLETE_CHUNKED_ENCODING

Как создать разбитый список всех категорий на моем сайте?

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

Каждая категория на моем сайте имеет пользовательский эскиз, созданный вручную, чтобы соответствовать постоянной ссылке категории. У меня уже есть настройка макета для отображения всех категорий, но я делаю это с помощью настраиваемого шаблона страницы, поэтому нет разбиения на страницы. Это означает, что все категории отображаются на одной странице, которая немного раздражает (у меня есть более 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

 $taxonomy = 'category'; $term_count = get_terms( [ 'taxonomy' => $taxonomy, 'fields' => 'count' ] ); 

Теперь, когда мы знаем количество условий, мы можем установить количество сроков, которые нам нужны на странице, скажем, 10

 $terms_per_page = 10; 

Из вышеизложенного мы можем теперь определить, сколько страниц у нас будет. Значение здесь будет передано wp_pagenavi() функции разбиения на страницы, в вашем случае, на wp_pagenavi()

 $max_num_pages = ceil( $term_count/$terms_per_page ); 

В этом случае вы должны передать $max_num_pages в свою функцию разбиения на страницы

Следующая часть должна была бы рассчитать наше смещение. Мы хотим только получить соответствующее количество условий на странице, чтобы оптимизировать работу. Нам не нужны все более 100 терминов на странице. Запросить только 10 нужно гораздо быстрее. Итак, нам нужно знать, на какой странице мы находимся, из этого, мы будем вычислять смещение. Это будет передано get_terms() и сообщит get_terms() сколько терминов пропустить из начальной начальной точки.

После этого мы также должны сообщить get_terms() чтобы вернуть только 10 терминов. Давайте посмотрим на код этой части

 $current_page = get_query_var( 'paged', 1 ); // Change to 'page' for static front page $offset = ( $terms_per_page * $current_page ) - $terms_per_page; $terms = get_terms( [ 'taxonomy' => $taxonomy, 'order' => 'ASC', 'orderby' => 'name', 'number' => $terms_per_page, 'offset' => $offset ] ); 

В зависимости от разбивки на страницы у вас будет только 10 условий. Теперь вы можете просто нормально контактировать с вашими условиями

Просто заметьте, вы бы хотели убедиться, что на самом деле у вас есть условия, возвращаемые get_terms() .

Я не знаком с WP-PageNavi, но я подозреваю, что он предполагает иметь дело с сообщениями, поэтому он может легко испортиться, если вы используете его в цикле, подобном вашему. Возможно, css, возможно, будет полезен при стилизации вашего html. Во всяком случае, настроить свою собственную разбивку на страницы не так сложно.

Во-первых, вам нужно знать, сколько категорий есть:

 $cat_amounts=count($cats); 

Затем вам нужно определить, сколько элементов на странице вы хотите:

 $cats_per_page=20; 

Это даст вам количество страниц:

 $max_pages=ceil($cat_amounts/$cats_per_page); 

Третья часть информации, в которой вы нуждаетесь, – это страница, на которой вы находитесь. Вы можете отслеживать это, введя query_var Ваш URL-адрес будет выглядеть примерно так: www.example.com/yourcatpage?catpage=2

Прежде чем вы начнете цикл, вам нужно знать, какая страница вызывается:

 $page_called=get_query_var ( $catpage, 1 ) 

Из этого вы можете вызвать первый элемент, который хотите отобразить:

 $first_element=($page_called-1)*$cats_per_page) 

и последний:

 $last_element=$page_called*$cats_per_page-1; 

Последняя страница может содержать менее $cats_per_page категорий, поэтому дополнительно вам нужно:

 if ($last_element > $cat_amounts) $last_element = $cat_amounts; 

Теперь прокрутите нужные элементы $cats :

 for ($i=$first_element;$i=<$last_element;$i++) { //do your thing with $cats[$i]; } 

После цикла вы можете использовать переменные для генерации предыдущих / следующих тегов или другого типа навигации.

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