Вывод категорий со списком подкатегорий (если это подкатегория, то вывод списка постов подкатегории)
Дано:
Файл category.php
Созданы рубрики вот по такой схеме:
- Библиотека
1.1. Руководящие документы
1.1.1. Конвенции резолюции кодексы
1.1.2. Информация по безопасности
1.2. Справочные материалы
1.2.1. Медицина
1.2.2. Техника безопасности
1.2.3. Ответственность и право - Софт
2.1. Программы по навигации
2.2. Метеорология
2.3. Работа с документами
Как это должно выглядеть:
Задача:
- Проверить, есть ли у данной категории дочерние категории.
Если есть дочерние категории имеются, то выводим ссылку на них, если дочерних категорий нет - то мы выводим список постов. - Может нужно как-то решать задачу не только через файл category.php?
Вот что получилось:
В файле category.php я вывожу список постов (2 часть условия после else) и проблем с этим нет, но с первой частью там где (echo 'есть подкатегория' проблема - не выводится название категории и не могу получить список ее дочерних категорий:
<?php function check_if_category_has_child () { $term = get_queried_object(); $children = get_terms( $term->taxonomy, array( 'parent' => $term->term_id, 'hide_empty' => false ) ); return $children; } if ( is_category() and check_if_category_has_child() ) { echo 'есть подкатегория'; // Вот здесь нужно вывести название категории где сейчас пользователь и список ее дочерних категорий } //Если дочерних категорий нет то выводится код ниже и он работает как нужно else { $category = get_queried_object(); global $post; $postslist = get_posts( [ 'category' => $category->term_id, 'orderby' => 'title' ] ); foreach( $postslist as $post ){ setup_postdata($post); ?> <h2 class="wrapper-news_title">Список постов</h2> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php } wp_reset_postdata(); } ?>
Со списком постов проблемы нет, если я нахожусь в категории у которой дочерних категорий нет то список постов выводится.
Но я не могу никак вывести в первой части кода где условие проходит проверку (echo 'есть подкатегория'), какая это категория и как получить список ее дочерних категорий.
Возможно я неправильно вообще начал делать, до этого писал только лендинги, а сейчас стоит задача сделать "блоговидный" сайт, и я сильно потерялся в том как нужно правильно это дело реализовать.
Еще я сомневаюсь в оптимизации данного кода, мне кажется его можно сделать более красивым и компактным.
Если кто поможет написать правильный код или поможет с реализацией подобного вывода буду очень признателен, ну и конечно с меня пивко, много пивка .
Вот получается если опустить всю воду что я написал, то мне нужно сделать вывод названия текущей категории и списка ее дочерних категорий, но то что я делаю не работает (
<?php $current_cat_id = get_queried_object()->term_id; $args = array( 'child_of' => $current_cat_id, 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 1, 'hierarchical' => 1, 'number' => 0, // сколько выводить? ); $categories = get_categories( $args ); if( $categories ){ foreach( $categories as $cat ){ ?> <h2 class="wrapper-news_title">2<?php $current_cat_id->name ?></h2> <a href="<?php $cat->slug ?>"><?php $cat->name ?></a> <?php } }?>
Попробуйте обратитесь на биржу фриланса.
Вам помогу с логикой. До 5$ уверен что справятся с задачей.
В вашу задачу не вникал - но нужно время.
Если за неделю не сможете решить - отпишитесь здесь.
Вопрос решен? логику смогли прописать?
Сложно назвать это правильным решением, но заказчик смирился с тем, что так как планировалось изначально не получится.
Решил сделать через wp_list_categories();
И настроил вывод по фильтру: проверка (имеется дочерняя категория) -> значит выводим список категорий, (дочерних категорий нет) -> выводим список постов.
Получилось топорно, но работает.
1й вариант (страница категории имеет дочерние категории)
2й Вариант (не нашли в текущей категории дочерних)
Код всей секции который используется для вывода (может кому пригодится, но честно, собран из нескольких готовых вариантов и не факт что оптимизирован):