Отображение всех категорий, включая подкатегории
2 окт. 2013 г., 14:23:52
Просмотры: 20.9K
Голосов: 1
Я пытаюсь отобразить список всех категорий и подкатегорий под каждой категорией. Мне удалось получить список всех родительских категорий, но возникли трудности с определением наличия дочерних категорий и их отображением в текущем цикле. Вот мой код на данный момент:
$args = array(
'orderby' => 'name',
'parent' => 0
);
$categories = get_categories( $args );
foreach ( $categories as $category ) {
echo '<a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a><br />';
}
Я нашел несколько функций здесь для определения наличия дочерних категорий, но испытываю трудности с отображением дочерних элементов (до одного уровня) под этой ссылкой.
Буду признателен за любую помощь, Саймон
Все ответы на вопрос
5
0
Решено следующим образом:
$args = array(
'orderby' => 'name',
'parent' => 0
);
$categories = get_categories( $args );
$first = true;
foreach ($categories as $category) {
if ( $first )
{
echo '<li class="title" style="border-top: 0px;"><a href="acatalog/abovegroundpools.html">'.$category->cat_name.'</a>';
$first = false;
}
else
{
echo '<li class="title"><a href="acatalog/abovegroundpools.html">'.$category->cat_name.'</a>';
}
$theid = $category->term_id;
$children = $wpdb->get_results( "SELECT term_id FROM $wpdb->term_taxonomy WHERE parent=$theid" );
$no_children = count($children);
if ($no_children > 0) {
echo "<ul>";
$args2 = array(
'orderby' => 'name',
'parent' => 2
);
$args2["parent"]=$category->term_id;
$categories2 = get_categories( $args2 );
foreach ($categories2 as $category2) {
echo '<li><a href="acatalog/Inflatable-Hot-Tubs.html">'.$category2->cat_name.'</a></li>';
}
echo '</ul>';
} else {
echo '</li>';
}
}
?>

SimonStaton
129
2 окт. 2013 г. 16:19:25
0
function my_Categ_tree($catId, $depth){
$depth .= '-'; $output ='';
$args = 'hierarchical=1&taxonomy=category&hide_empty=0&parent='; $categories = get_categories($args . $catId);
if(count($categories)>0){
foreach ($categories as $category) {
$selected = ($cat->term_id=="22") ? " selected": "";
$output .= '<option value="'.$category->cat_ID.'" '.$selected .'>'.$depth.$category->cat_name.'</option>';
$output .= my_Categ_tree($category->cat_ID,$depth);
}
}
return $output;
}
echo my_Categ_tree(0,'');
Комментарии к коду:
1. Функция `my_Categ_tree` рекурсивно строит дерево категорий WordPress в виде HTML select-опций
2. Параметры:
- `$catId` - ID родительской категории для начала построения дерева
- `$depth` - строка, определяющая глубину вложенности (добавляются дефисы)
3. Функция использует WordPress API `get_categories()` для получения дочерних категорий
4. Если категория с ID=22, к ней добавляется атрибут "selected"
5. Результат выводится в виде HTML-тегов `

T.Todua
5.85K
21 янв. 2015 г. 16:08:56
1
<?php
// Получаем и выводим родительские категории верхнего уровня
$args = array('orderby' => 'name', 'parent' => 0);
$categories = get_categories( $args );
foreach ($categories as $category) {
echo $category->cat_name . '<br>';
$args2 = array('orderby' => 'name', 'parent' => $category->cat_ID);
$subcategories = get_categories( $args2 );
echo '<ul>';
// При выводе родительских категорий верхнего уровня
// выводим их дочерние категории
foreach ($subcategories as $subcategory) {
echo '<li>' . $subcategory->cat_name . '</li>';
}
echo '</ul>';
}
?>

jeyhunms
11
12 мар. 2018 г. 21:51:18
0
Если вы хотите отобразить все ваши категории и подкатегории пользовательской таксономии, используйте этот код и убедитесь, что указали слаг вашей таксономии.
function ow_categories_with_subcategories( $taxonomy ) {
// Получаем верхние категории, принадлежащие указанной таксономии (те, у которых нет родителя)
$categories = get_terms(
array(
'taxonomy' => $taxonomy,
'parent' => 0, // <-- Без родителя
'orderby' => 'term_id',
'hide_empty' => true // <!-- измените на false, чтобы также отображать пустые
)
);
?>
<div>
<?php
// Перебираем все категории для отображения каждой отдельной категории
foreach ( $categories as $category ) {
$cat_name = $category->name;
$cat_id = $category->term_id;
$cat_slug = $category->slug;
// Отображаем название каждой отдельной категории
echo '<h3>Категория: ' . $cat_name . ' - ID: ' . $cat_id . ' - Слаг: ' . $cat_slug . '</h3>';
// Получаем все подкатегории, принадлежащие текущей категории
$subcategories = get_terms(
array(
'taxonomy' => $taxonomy,
'parent' => $cat_id, // <-- Родитель - текущая категория
'orderby' => 'term_id',
'hide_empty' => true
)
);
?>
<div>
<?php
// Перебираем все подкатегории для отображения каждой отдельной подкатегории
foreach ( $subcategories as $subcategory ) {
$subcat_name = $subcategory->name;
$subcat_id = $subcategory->term_id;
$subcat_slug = $subcategory->slug;
// Отображаем название каждой отдельной подкатегории с ID и Слагом
echo '<h4>Подкатегория: ' . $subcat_name . ' - ID: ' . $subcat_id . ' - Слаг: ' . $subcat_slug . '</h4>';
}
?>
</div>
<?php
}
?>
</div>
<?php
}
ow_categories_with_subcategories( 'название_вашей_таксономии' );

epicrato
201
3 янв. 2019 г. 06:10:21
Похожие вопросы
6
ответов
2
ответов