WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Самая быстрая Тема-конструктор для WordPress

Вывод списка рубрик постранично

Приветствую!

Возможно ли на Вордпресс вывести список рубрик (или список любой другой таксономии), разбив его на несколько страниц, с постраничной навигацией?

1
Гость
5.6 лет назад
  • 0
    stepan1188 www.weblancer.net/users/stepanko/?affili...

    Готовой функции для такого функционала нет.

    Но если захотеть, то можно самому реализовать.

    Нужно смотреть в сторону "постраничная навигация на PHP".

    Решение простым не будет, и Вы скорее всего откажитесь от этой идеи.

    Читайте ответ от Kama

    Комментировать
  • 1
    Kama7872

    Готового решения нет. Но так сделать можно и не очень сложно. Для этого вам понадобятся:

    1. get_terms() - получаете рубрики и выводите их списком, указываете параметр offset динамически, чтобы была пагинация...

    2. paginate_links() - выводите ссылки на страницы пагинации с помощью этой функции, там все довольно просто, по примерам разберетесь.
    Артем 4.8 года назад

    Хотелось бы статью по этому поводу. Целый день потратил, не нашел, ни у нас, ни в англоязычном интернете. Хотя намеки есть, но они не работают.

    Andrey_Rise 8 мес назад

    Мой вариант, если есть баги, то Прошу поправить smile Заранее Благодарен!

    <div class="container">
    		<div class="row d-flex justify-content-center" id="middle_cat">
    			<?php
    			$current_page_cat = !empty( $_GET['categories'] ) ? $_GET['categories'] : 1; //Определяем текущую страницу
    			$exclude = 1; //Определяем какую рубрику не выводить (по id)
    			$count_terms = wp_count_terms( 'category',
    						   array(
    						   'hide_empty' => 0,
    						   'exclude' => $exclude
    						   ) ); //Получаем общее количество выводимых рубрик
    			//Определяем как динамически добавлять offset в аргументы get_categories($args).
    			for ($i = 1; $i < $current_page_cat; $i++){
    				$offset += 4;
    			}//То есть, при изменении на 1 значения текущей страницы ($current_page_cat) во время пагинации, увеличиваем на 4 значение offset для соответствующего аргумента get_categories($args).
    			$offset = ($current_page_cat == 1) ? 0 : $offset; //$offset, который после двоеточия берёт динамическое значение из вышеприведённого цикла.
    			$args = array(
    				'taxonomy'   => 'category',
    				'exclude'    => $exclude,
    				'offset'     => $offset,
    				'number'     => 4,
    				'order'      => 'ASC',
    				'hide_empty' => false,
    			);
    			$categories = get_categories($args);
    			if ( $count_terms > 0 ){
    				foreach ( $categories as $category ) {
    					$item = '<div class="col-md-4 col-lg-3 text-center">';
    					$item .= '<div class="practice-area bg-white ftco-animate p-4">';
    					$item .= '<div class="icon category-id-' . $category->term_id . ' d-flex justify-content-center align-items-center">';
    					$item .= '<span></span>';
    					$item .= '</div>';
    					$item .= '<h3 class="mb-3">';
    					$item .= '<a href="' . get_term_link( $category ) . '">' . $category->name . '</a>' ;
    					$item .= '</h3>';
    					$item .= '<p>' . $category->category_description . '</p>';
    					$item .= '</div>';
    					$item .= '</div>';
    					echo $item;
    				}
    			}
    			?>
    		</div>
    		<div class="row mt-5">
    			<div class="col text-center">
    				<div class="block-27">
    					<?php
    					// Функция пагинации ничего не возвращает, если всего 1 страница списка рубрик
    					echo paginate_links( array(
    						'base' => site_url() . '/categories' . '%_%' . '#middle_cat',
    						'format' => '?categories=%#%' ,
    						'total' => ceil($count_terms/4), //Количество страниц для пагинации получаем путём округления в большую сторону результата деления общего количества выводимых категорий на количество категорий отображаемых на одной странице.
    						'current' => $current_page_cat,
    						'show_all' => true,
    						'type' => 'list',
    						'prev_next' => true,
    						'prev_text' => '<',
    						'next_text' => '>',
    					) );
    					?>
    				</div>
    			</div>
    		</div>
    	</div>
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация