Вывод подкатегорий из основной категории
У меня имеется пользовательский тип записи product. И есть стандартная рубрика wordpress назовем ее products. То есть в эту рубрику я буду размещать все имеющиеся у меня записи типа product. Но у основной рубрики products могут быть дочерние, к примеру, new, best и тд. И количество дочерних рубрик заранее неизвестно.
Моя задача состоит в том, чтобы на шаблоне своей страницы я мог для каждой подрубрики выводить колонку, в которой в названии указывается название дочерней рубрики, дается ссылка на все продукты данной рубрики и ниже идет 3-4 последних записи. То есть по итогу у меня должно получиться n независимых друг от друга столбцов.
Я к сожалению плохо разбираюсь в php и все делаю больше интуитивно, чем осознанно. Я представляю как я бы сделал это в javascript, получил бы объект с ключами подрубрик, прошелся по нему циклом for(key in obj) и вывел все куда необходимо.
А вот с какой стороны к этому подступиться в php понятия не имею. Подскажите с какой стороны на это все посмотреть пожалуйста и с чего начать.
В php по подобному принципу работает. Вот функции, которые Вам могут помочь получить данные для обработки: get_terms, get_taxonomies, get_categories.
Вот недавно делал похожее, только нужно было сделать меню из подрубрик, входящих в состав определенной рубрики:
/** * Вывод рубрик Услуг */ function the_services_navigations(){ // Получить данные рубрик, в том числе и без записей, у которых родительская рубрика с ID = 6 $cat_data = get_categories( array( 'parent' => 6, 'hide_empty' => 0 ) ); if ( $cat_data ) { $cat_links = ''; foreach ( $cat_data as $one_cat_data) $cat_links .= sprintf( '<a href="%s">%s</a>', get_category_link( $one_cat_data->term_id ) , $one_cat_data->cat_name ); printf( '<div class="nav-cat">%s</div>', $cat_links ); } }Так как Вам ещё нужно вывести по 5 постов, то нужно дополнить запрос на посты, с помощью get_posts.
Предположительное решение, нужно лишь ID родительской рубрики свой поставить:
<?php // Получить данные рубрик, в том числе и без записей, у которых родительская рубрика с ID = 6 $cat_data = get_categories( array( 'parent' => 6 ) ); // Нсли подрубрики нашлись - начинаем их обработку if ( $cat_data ) { foreach ( $cat_data as $one_cat_data ){ // Возвращает название подрубрики в виде ссылки $block_cats = sprintf( '<div class="name-cat"><a href="%s">%s</a></div>', get_category_link( $one_cat_data->term_id ) , $one_cat_data->cat_name ); // Получаем посты с подрубрики (они там 100% есть, потому что get_categories по дефолту получает только такие) $cat_posts_data = get_posts( array( 'category' => $one_cat_data->cat_ID ) ); foreach ( $cat_posts_data as $one_cat_post_data ){ // Возвращает название записи в виде ссылки и сливает с предыдущими блоками (в том числе и блоком из "названия рубрики") $block_cats .= sprintf( '<div class="name-post"><a href="%s">%s</a></div>', get_the_permalink( $one_cat_post_data->ID ) , $one_cat_post_data->post_title ); } } // Выводим на экран название рубрики + 5 записей из неё ( см. дефолтные значения get_posts, можно увеличить ) printf( '<div class="cat-block">%s</div>', $block_cats ); } ?>Вот отличный код, давно дёрнул года три назад с зарубежного ресурса, это для вставки на странице, вывод подрубрик рубрики №6, захотите вставить в архиве, просто напишите cat=catID, как правильнее вспоминать не буду, эксперементируйете, автору спасибо за прекрасный блог, четыре года сижу, вот решил впервые написать
<?php query_posts("cat=6"); if (have_posts()) : while (have_posts()) : the_post(); $k = get_the_category($post->ID); if ( $k[0]->cat_ID == $cat ) { echo '<li><a href="'; the_permalink(); echo'" rel="bookmark">'; the_title(); echo '</a></li>'; } endwhile; else: echo '<p class="podcat">Upss</p>'; endif; ?> <div id="moreCategories"> <?php $current_cat = get_query_var('cat'); global $ancestor; $childcats = get_categories('child_of='.$current_cat.'&hide_empty=0&orderby=id'); foreach ($childcats as $childcat) { if (cat_is_ancestor_of($ancestor, $childcat->cat_ID) == false){ echo '<h2><a href='.get_category_link($childcat->cat_ID).'>'; echo $childcat->cat_name . '</a></h2>'; $mycat=get_the_category(); $mycat=$mycat[0]; $postslist = get_posts('posts_per_page=-1&category='.$childcat->cat_ID); ?> <?php foreach ($postslist as $post) : setup_postdata($post); ?> <div class="subpagesAtCategory"> <a href="<?php echo the_permalink(); ?>"><?php the_title(); ?></a> </div> <?php endforeach; ?> <? $ancestor = $childcat->cat_ID; } } ?> </div>Андрей, спасибо за код! То, что нужно)
А создателям огромное спасибо за сайт! Здорово выручаете!
Андрей, код работает в arhive, не нужно ничего менять
Не подскажите как в этот код добавить вывод описания подкатегории?
Ну как бы всё просто, скорее всего берёте ID категории $childcat->cat_ID и подставляете в это значение
либо в это
тут больше возможностей, читайте документацию https://wp-kama.ru/function/category_description