Как вывести на одной странице записи, отсортированные по рубрикам

Продолжаю публиковать полезные сниппеты, которые использую в работе. Следующий код понадобился для вывода товаров на главной странице. Требовалось создать следующую структуру:

Родительская категория
---Дочерняя категория 1
------Товар 1
------Товар 2
------Товар 3
---Дочерняя категория 2
------Товар 4
Родительская категория 2
------Товар 5

Код получился в итоге таким:

<?php
function product_template() { // Здесь можно использовать любые template tags
?>

<div>
<?php the_title(); ?>
</div>

<?php
}
// НАСТРОЙКИ
$ctax = 'category'; // Таксономия
$ptype = 'post'; // Тип записей
$posts_per_page = -1; // Количество выводимых записей (из каждой категории)

$par_cats = get_categories( array ( 'taxonomy' => $ctax ) );
foreach ( $par_cats as $par_cat )
{
if ( $par_cat->parent < 1 ) // Определяем категории, у которых нет дочерних категорий
{
$par_catname = $par_cat->name;
$par_catid = $par_cat->term_id;
echo "
<h2>$par_catname</h2>
"; // Выводим название родительской категории
query_posts( array( 'post_type' => $ptype, $ctax => $par_catname, 'posts_per_page' => $posts_per_page ) );
if ( have_posts() ) : while ( have_posts() ) : the_post();
product_template();
endwhile; endif; wp_reset_query();
$child_cats = get_categories( array ( 'taxonomy' => $ctax, 'child_of' => $par_catid ) ); // Добываем дочерние категории
foreach ( $child_cats as $child_cat) {
$child_catname = $child_cat->name;
query_posts( array( 'post_type' => $ptype, $ctax => $child_catname, 'posts_per_page' => $posts_per_page ) );
if ( have_posts() ) :
echo "
<h3>$child_catname</h3>
"; // Выводим название дочерней категории
while ( have_posts() ) : the_post();
product_template()
endwhile; endif; wp_reset_query();
}
}
}
?>

По умолчанию выводится таксономия «Рубрики» и количество выводимых постов не ограничено. Если у вас записей несколько сотен-тысяч, то рекомендую параметр posts_per_page поменять =)

Добавить комментарий