Как получить дочерние категории для заданной записи
Как получить названия дочерних категорий для произвольной записи?
Например, у меня есть slug категории - 'motorbikes' и подкатегории для неё. Мне нужно получить название подкатегории для каждой записи, которая находится внутри категории с slug motorbikes.

Чтобы получить дочерние категории для заданного слага родительской категории, используйте комбинацию функций get_category_by_slug()
и get_categories()
.
Последняя функция вернёт массив объектов категорий, соответствующих указанному массиву аргументов запроса; первая же вернёт ID категории по её слагу.
Например:
<?php
$motorbike_child_cat_args = array(
'child_of' => get_category_by_slug( 'motorbikes' )
);
$motorbike_child_cats = get_categories( $motorbike_child_cat_args );
?>
Затем вы можете делать что угодно с массивом объектов категорий. Например, получить массив имён дочерних категорий:
<?php
$motorbike_child_cat_names = array();
foreach ( $motorbike_child_cats as $child_cat ) {
$motorbike_child_cat_names[] = $child_cat->name;
}
?>
Дальнейшие действия зависят от ваших потребностей.
ОБНОВЛЕНИЕ
Если вам нужно получить дочерние категории для произвольной записи, используйте функцию get_the_category()
.
Если вы находитесь внутри цикла (Loop), просто вызовите get_the_category()
; если снаружи, передайте ID записи: get_the_category( $id )
.
Например, чтобы создать массив имён дочерних категорий (независимо от родителя) для текущей записи:
<?php
$my_post_categories = get_the_category();
$my_post_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
if ( 0 != $post_cat->category_parent ) {
$my_post_child_cats[] = $post_cat->cat_name;
}
}
?>
Или, например, чтобы создать массив имён дочерних категорий 'motorbikes' для текущей записи:
<?php
$my_post_categories = get_the_category();
$motorbikes_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
if ( 'motorbikes' == $post_cat->category_parent ) {
$motorbikes_child_cats[] = $post_cat->cat_name;
}
}
?>
Это ближе к тому, что вам нужно?
ОБНОВЛЕНИЕ 2
Если вам просто нужно получить все категории записи:
<?php
$all_post_categories = get_the_category();
$my_post_cats = array();
foreach ( $my_post_categories as $post_cat ) {
$my_post_cats[] = $post_cat->cat_name;
}
?>
Это даст вам все категории текущей записи. Я не знаю, как именно слаг категории motorbikes
связан с этим вопросом.

Привет, спасибо, но как я могу получить название подкатегории для $post->ID, потому что $cat = get_the_category($post->ID); $category_name = $cat->name;
не работает.

То есть вы пытаетесь получить дочерние категории для произвольной записи, а не дочерние категории для известной категории, например 'мотоциклы'?

Здравствуйте, да, но как мне его вывести? Если я делаю что-то вроде этого - echo $motorbikes_child_cats[0]; или echo $my_post_child_cats[0];, то просто выводится пустота.

Что вы получаете с <?php var_dump( $my_post_child_cats ); ?>
? Если там пусто, вы уверены, что ваша запись действительно имеет дочерние категории?

Привет, возвращается NULL, значит у меня нет подкатегорий? Если да, то как тогда получить название категории для моего поста, если slug категории 'motorbikes'?
