WordPress как на ладони

Вывод подкатегорий из основной категории

У меня имеется пользовательский тип записи product. И есть стандартная рубрика wordpress назовем ее products. То есть в эту рубрику я буду размещать все имеющиеся у меня записи типа product. Но у основной рубрики products могут быть дочерние, к примеру, new, best и тд. И количество дочерних рубрик заранее неизвестно.

Моя задача состоит в том, чтобы на шаблоне своей страницы я мог для каждой подрубрики выводить колонку, в которой в названии указывается название дочерней рубрики, дается ссылка на все продукты данной рубрики и ниже идет 3-4 последних записи. То есть по итогу у меня должно получиться n независимых друг от друга столбцов.

Я к сожалению плохо разбираюсь в php и все делаю больше интуитивно, чем осознанно. Я представляю как я бы сделал это в javascript, получил бы объект с ключами подрубрик, прошелся по нему циклом for(key in obj) и вывел все куда необходимо.

А вот с какой стороны к этому подступиться в php понятия не имею. Подскажите с какой стороны на это все посмотреть пожалуйста и с чего начать.

0
karssen
7.7 лет назад
  • 1
    campusboy4754 www.youtube.com/c/wpplus

    В php по подобному принципу работает. Вот функции, которые Вам могут помочь получить данные для обработки: get_terms, get_taxonomies, get_categories.

    campusboy 7.7 лет назад

    Вот недавно делал похожее, только нужно было сделать меню из подрубрик, входящих в состав определенной рубрики:

    /**
     * Вывод рубрик Услуг
     */
    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 );
    
    }
    
    ?>
    Комментировать
  • 0
    Андрей

    Вот отличный код, давно дёрнул года три назад с зарубежного ресурса, это для вставки на странице, вывод подрубрик рубрики №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>
    narina 5.8 лет назад

    Андрей, спасибо за код! То, что нужно)
    А создателям огромное спасибо за сайт! Здорово выручаете!

    Равиль 4.8 лет назад

    Андрей, код работает в arhive, не нужно ничего менять

    garmoni 4.4 года назад

    Не подскажите как в этот код добавить вывод описания подкатегории?

    Андрей 4.4 года назад

    Ну как бы всё просто, скорее всего берёте ID категории $childcat->cat_ID и подставляете в это значение

    <?php echo category_description(тут ID); ?>

    либо в это

    term_description( $term, $taxonomy );

    тут больше возможностей, читайте документацию https://wp-kama.ru/function/category_description

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация