Получение slug или названия категории по её ID
У меня есть произвольное поле, которое возвращает ID выбранной категории. Мне нужно использовать этот ID категории для отображения в одном случае: slug категории, а в другом случае: название категории.
Поле вызывается довольно просто вот так: <?php the_field('category_test'); ?>
и возвращает ID, в данном случае 4
.
Возможно ли использовать это поле для получения slug категории, а также для получения её названия? Я не совсем уверен, как это можно сделать. Любые предложения будут очень ценны!

get_category
вернет всю необходимую информацию в обоих случаях.
$catinfo = get_category(get_field('category_test'));
Согласно Codex, это даст вам (примерные данные, конечно):
stdClass Object ( [term_id] => 85 [name] => Название категории [slug] => nazvanie-kategorii [term_group] => 0 [term_taxonomy_id] => 85 [taxonomy] => category [description] => [parent] => 70 [count] => 0 [cat_ID] => 85 [category_count] => 0 [category_description] => [cat_name] => Название категории [category_nicename] => nazvanie-kategorii [category_parent] => 70 )
Я почти уверен, что get_field
работает правильно.
get_category
работает корректно для любого ID категории, который я пробовал, и возвращает NULL
для некорректных ID категорий. Однако, как обсуждалось ниже, get_field
может вернуть массив. В этом случае get_category
, похоже, возвращает первую категорию в базе данных по ID, которая по умолчанию является категорией uncategorized
. Это можно продемонстрировать следующим образом:
var_dump(get_category(array(8,9,10)));
Поэтому, чтобы избежать этого, вам понадобится:
$cat_field = get_field('category_test');
if (is_array($cat_field)) {
$cat_field = $cat_field[0];
}
$catinfo = get_category($cat_field);
Чтобы получить любое конкретное поле, используйте стандартный синтаксис объектов. Например:
echo $catinfo->slug;
Или
$cname = $catinfo->name;

О, это почти работает, хотя почему-то возвращается массив для категории Без рубрики
, несмотря на то, что передаётся ID другой категории?

ACF может возвращать массив значений, особенно при работе с таксономиями. Вероятно, вам нужно использовать что-то вроде $category = get_field('category_test');
, а затем $catinfo = get_category( $category[0] );

@RRikesh Кажется, это ничего не возвращает? Метод выше возвращает массив, но не для нужной категории, а почему-то только для Без рубрики
.

@RRikesh Я также попробовал function get_cat_slug($cat_id) {
$cat_id = (int)$cat_id;
$category = &get_category($cat_id);
return $category->slug;
}
в functions.php и <?php echo get_cat_slug(get_field('category_test')); ?>
на тестовой странице, и хотя поле category_test
возвращает ID 4
, возвращаемый slug принадлежит категории uncategorized
снова :(

@s_ha_dum
ох, это почти работает, но по какой-то причине возвращает массив для категории Uncategorized, несмотря на то, что передается ID другой категории?
