Как получить дочерние категории для заданной записи

20 окт. 2011 г., 21:48:11
Просмотры: 18.6K
Голосов: 2

Как получить названия дочерних категорий для произвольной записи?

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

5
Комментарии

Можете объяснить, почему важно изменение slug категории, в отличие от простого вопроса о получении дочерних категорий родительской категории?

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:08:07

Привет, обычно slug категории — это 'category', но у меня он 'motorbikes', и внутри категории с slug 'motorbikes' есть подкатегории. В подкатегориях у меня есть записи, и мне нужно получить название подкатегории с помощью $cat = get_the_category($post->ID); $category_name = $cat->name;, но у меня не получается, потому что возвращается пустой массив.

Y2ok Y2ok
20 окт. 2011 г. 22:18:34

Я всё ещё не понимаю. Что вы имеете в виду под "обычно slug категории — это 'category'"? Вы, случайно, говорите о базовом URL для категорий?

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:30:24

Привет, да, именно так.

Y2ok Y2ok
20 окт. 2011 г. 22:32:41

Хм... это отличается от вашего комментария ниже. Так что, если мой отредактированный ответ не отвечает на ваш вопрос, я все еще не понимаю, что вам нужно.

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:41:49
Все ответы на вопрос 2
8
12

Чтобы получить дочерние категории для заданного слага родительской категории, используйте комбинацию функций 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 связан с этим вопросом.

20 окт. 2011 г. 22:16:37
Комментарии

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

Y2ok Y2ok
20 окт. 2011 г. 22:23:08

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

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:33:08

Привет, да, не могли бы вы помочь с этим?

Y2ok Y2ok
20 окт. 2011 г. 22:36:56

См. отредактированный ответ.

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:40:22

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

Y2ok Y2ok
20 окт. 2011 г. 22:46:40

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

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:49:45

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

Y2ok Y2ok
20 окт. 2011 г. 22:55:49

Можешь, пожалуйста, объяснить, откуда вообще взялось "slug категории 'motorbike'"?

Chip Bennett Chip Bennett
20 окт. 2011 г. 22:57:35
Показать остальные 3 комментариев
1
$categories = wp_get_post_categories( get_the_ID(), array('fields' => 'ids') );

$arguments = array(
    'taxonomy'    => 'category',
    'childless'   => true,
    'include'     => $categories,
);

$selected_category = get_terms( $arguments );
28 июл. 2016 г. 21:40:36
Комментарии

Пожалуйста, отредактируйте ваш ответ и добавьте объяснение: почему это может решить проблему? Смотрите [ответ]

fuxia fuxia
28 июл. 2016 г. 21:58:37