Получение slug или названия категории по её ID

6 июл. 2013 г., 22:16:52
Просмотры: 17K
Голосов: 2

У меня есть произвольное поле, которое возвращает ID выбранной категории. Мне нужно использовать этот ID категории для отображения в одном случае: slug категории, а в другом случае: название категории.

Поле вызывается довольно просто вот так: <?php the_field('category_test'); ?> и возвращает ID, в данном случае 4.

Возможно ли использовать это поле для получения slug категории, а также для получения её названия? Я не совсем уверен, как это можно сделать. Любые предложения будут очень ценны!

0
Все ответы на вопрос 1
6

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;
6 июл. 2013 г. 22:27:45
Комментарии

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

user1374796 user1374796
7 июл. 2013 г. 04:32:16

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

RRikesh RRikesh
7 июл. 2013 г. 09:17:51

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

user1374796 user1374796
7 июл. 2013 г. 12:27:51

@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 user1374796
7 июл. 2013 г. 12:30:24

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

user1374796 user1374796
7 июл. 2013 г. 12:31:42

@user1374796 : смотрите правки

s_ha_dum s_ha_dum
7 июл. 2013 г. 18:07:30
Показать остальные 1 комментариев