Получение 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 другой категории?
user1374796
ACF может возвращать массив значений, особенно при работе с таксономиями. Вероятно, вам нужно использовать что-то вроде $category = get_field('category_test');, а затем $catinfo = get_category( $category[0] );
RRikesh
@RRikesh Кажется, это ничего не возвращает? Метод выше возвращает массив, но не для нужной категории, а почему-то только для Без рубрики.
user1374796
@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 снова :(
user1374796
@s_ha_dum
ох, это почти работает, но по какой-то причине возвращает массив для категории Uncategorized, несмотря на то, что передается ID другой категории?
user1374796