WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

get_the_category() WP 0.71

Получает массив данных о категориях относящихся к указанному посту.

Функцию можно использовать за пределами Цикла WordPress, если указать ID поста.

Используется в: get_the_category_list().
Работает на основе: get_the_terms()
Хуки из функции:
Возвращает

массив объектов с данными о каждой категории, которая относится к посту. Отдельный объект для каждой категории.

Использование

<?php get_the_category( $id ) ?>
$id(число)
ID поста, категории которого нужно получить.
По умолчанию: $post->ID

Примеры

#1 Выведем картинку для каждой категории

Этот пример показывает как можно создать картинку к каждой категории, в атрибуте alt будет указано название категории. Картинки должны иметь названия такие же как и ID категорий (12.jpg) и лежать в корне сайта в папке images. Код нужно использовать внутри Цикла:

foreach( get_the_category() as $category ){ 
	echo '<img src="http://example.com/images/' . $category->cat_ID . '.jpg" alt="' . $category->cat_name . '" />'; 
} 

#2 Название первой категории

Показать название только первой категории (если пост относится к нескольким категориям):

$category = get_the_category(); 
echo $category[0]->cat_name;

#3 Категории поста за пределами цикла

Пример, как получить категории поста за пределами Цикла WordPress:

global $post;

$categories = get_the_category( $post->ID );
var_dump( $categories );

Данные, которые содержит каждый объект категории:

$cat = get_the_category($post->ID);

// ID категории
$cat->cat_ID

// Название категории
$cat->cat_name 

// Альтернативное название категории
$cat->category_nicename

// Описание категории (задается на странице редактирования категории)
$cat->category_description

// ID родительской категории
$cat->category_parent 

// Количество записей в категории
$cat->category_count

Код get the category: wp-includes/category-template.php VER 4.9.6

<?php
function get_the_category( $id = false ) {
	$categories = get_the_terms( $id, 'category' );
	if ( ! $categories || is_wp_error( $categories ) )
		$categories = array();

	$categories = array_values( $categories );

	foreach ( array_keys( $categories ) as $key ) {
		_make_cat_compat( $categories[$key] );
	}

	/**
	 * Filters the array of categories to return for a post.
	 *
	 * @since 3.1.0
	 * @since 4.4.0 Added `$id` parameter.
	 *
	 * @param array $categories An array of categories to return for the post.
	 * @param int   $id         ID of the post.
	 */
	return apply_filters( 'get_the_categories', $categories, $id );
}

Cвязанные функции

Из раздела: Для записей

get_the_category 21 коммент
Полезные 1 Все
  • Евгений

    Спасибо большое! Искал как вывести картинки к категориям и у Вас нашел.

    Ответить6.5 лет назад #
  • Игорь cайт: zuluz.ru

    Вопрос такого рода: как определяется порядок категорий.

    $category[0]
    • по алфавиту?
      Как бы передать порядок по ID ?
    Ответить5.7 лет назад #
    • Kama5287

      Не очень понял, что вам нужно. Категории собираются в массив, где ключи - это числа: 0 1 2 ... . Собираются в обратном порядке их создания, насколько я представляю. Если нужно отсортировать по алфавиту (алфавитный порядок названия категорий), то используйте функцию php usort().

      Сортировка по ID и по любым другим параметрам категории, будет точно такая же: через usort().

      П.С. правда, судя по вопросу не уверен, что вам это чем-то поможет. Скажите что конкретно нужно, возможно смогу помочь.

      1
      Ответить5.7 лет назад #
      • Игорь cайт: zuluz.ru

        Пост находится в 5 категориях. Нужно вывести эти категории отдельно. Не списком и подобное, а отдельно и в разных местах поста.

        Ответить5.7 лет назад #
  • Victor cайт: oriplanet.com/oriblog

    Хочу вставлять рекламу только для определенной категории в single.php
    id категорий несколько.
    Кто нибудь такое делал ?

    Ответить5.1 лет назад #
    • Дмитрий cайт: themd.ru

      post;

        if ( in_category('1') ) {
        include(TEMPLATEPATH . '/single1.php');
      
        } elseif ( in_category('2') ) {
        include(TEMPLATEPATH . '/single2.php');
      
        } else {
        include(TEMPLATEPATH . '/single_other.php');
      
        }
      ?>

      типа того

      Ответить5.1 лет назад #
      • Victor cайт: oriplanet.com/oriblog

        а в фалах singe*.php я могу написать ;

        Будет java работать ?
        Даже если нет то все равно спасибо - пригодится это прием.

        Ответить5.1 лет назад #
        • Victor cайт: oriplanet.com/oriblog

          А - понятно - single - копии с разным содержанием. Только вот непонятно куда это код post вставлять. МОжет в index.php ?
          Там есть

          Ответить5.1 лет назад #
  • Добрый вечер. У меня есть маленький вопрос. А как получить список всех потомков текущей категории

    Ответить4.5 года назад #
  • Михаил

    Здравствуйте
    Уже обшарил всё что только можно , но не могу найти , как изменить в записях «Опубликовано в» на «Категории»
    Firebug отображает , но в коде не знаю уже где и искать. Тема Response 2.0
    Заранее спасибо за ответ.

    Ответить3.1 года назад #
    • campusboy2782 cайт: www.youtube.com/c/wpplus

      У Вас скорее всего установлена тема, которая поддерживает перевод. Три пути:
      1) Установить программу на компьютер POedit и изменить перевод там.
      2) Установить плагин Codestyling Localization и изменить перевод.
      3) Выводится запись с помощью какой-то специальной функцией. Эту функцию надо искать в шаблоне и её редактировать.

      Ответить3.1 года назад #
  • Виктор

    Здравствуйте! Как бы не пытался все равно не выходит вывести рубрики к произвольным постам.
    Использовал:

    global $post;
    
    $categories = get_the_category( $post->ID );
    var_dump( $categories );

    Пост tetrad а таксономия tetrad_tax.

    Подскажите пожалуйста в чем моя ошибка?

    Ответить2.7 года назад #
    • Kama5287

      Вам нужно использовать get_the_terms(). get_the_category() работает исключительно с таксономией category.

      $cur_terms = get_the_terms( $post->ID, 'tetrad_tax' );
      foreach( $cur_terms as $cur_term ){
      	echo '<a href="'. get_term_link( (int)$cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>,'
      }
      Ответить2.7 года назад #
  • Алекс

    Подскажите пожалуйста, как получить ID текущей категории, на странице которой находитесь?

    Т.е. для постов делал вот так:

    if (is_single()) {
    		global $post;
    		$post->ID;
    }

    И нужно сделать аналогично для страницы категории:

    if (is_category()) {
    		// Вот тут нужно использовать ID текущей категории. Но как?
    }
    1
    Ответить2.4 года назад #
  • Михаил cайт: kirito.ru

    Можете мне подсказать ? Передо мной стоит задача:
    Нужно получить ID категории, поместить его в переменную и на основе полученного результата выводить нужную мне инфу.

    Вот сейчас юзаю поиск и пока что не нашел решения конкретно на мой вопрос ((

    Ответить2.2 года назад #
  • @ Антон

    Подскажите, а как получить весь список имен категорий к данному посту.
    По аналогии #2 Название первой категории

    $category = get_the_category(); 
    echo $category[0]->cat_name;
    Ответить2 года назад #
    • Kama5287

      Так в первом примере же ответ, только лишнее удалить нужно там:

      foreach( get_the_category() as $category ){ 
      	echo '<h5>' . $category->cat_name . '</h5>'; 
      }
      Ответить2 года назад #
  • Владимир

    Не подскажите более изящного способа выводить картинку рубрики для всех постов которые находятся в рубрике.

    Ответить2 месяца назад #
    • Kama5287

      Получаешь рубрику поста и затем картинку рубрики и выводишь в посте...

      Ответить2 месяца назад #

Здравствуйте, !