WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru WPmentor - Ищем топовых специалистов по WordPress, чтобы помочь вам заработать

get_the_category() WP 0.71

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

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

Является основой для: get_the_category_list()
Работает на основе: get_the_terms()
Хуки из функции
Возвращает

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

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

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

Список изменений

С версии 0.71 Введена.

Код get the category: wp-includes/category-template.php WP 5.4

<?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 WP_Term[] $categories An array of categories to return for the post.
	 * @param int|false $id         ID of the post.
	 */
	return apply_filters( 'get_the_categories', $categories, $id );
}

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

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

32 коммента
Полезные 1 Все
  • narina nastmobile.com

    Хочу вывести все посты из категории на странице поста single.php. Т.е. сначала идет основная статья, а за ней другие статьи из той же категории. В последствии будет делаться бесконечный скроллинг. Есть такой код:

    <!--  Вывод статей из текущей рубрики -->
    	 <?php
    	 $infocat = get_the_category();
    	 $info = $infocat[0]->cat_ID;
    	 $array = "orderby=rand&cat=$info;";
    	 query_posts($array);    
    	 if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    	  <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    	  <div class="title-post"><?php the_content(); ?></div>
    	 <!--  <div class="title-post"><?php //the_excerpt(); ?></div> -->
    	<?php endwhile; else: ?>
    	<h2>Других записей данной категории не найдено</h2>
      <?php endif; wp_reset_query(); ?>
      <!--  //Вывод статей из текущей рубрики -->
    

    Он выводит, но почему-то обрезает контент.

    Подскажите, пожалуйста, как сделать, чтоб контент выводился полностью?!
    Спасибо!

    Ответить29.Авг.2018 в 12:38 #
  • Виктор

    Если у поста несколько категорий, как вывести основную категорию? Не выводя остальные?

    Ответить28.Окт.2019 в 19:13 #
    • @ campusboy3503 www.youtube.com/c/wpplus

      Как определить, как из них основная?

      1
      Ответить29.Окт.2019 в 03:29 #
      • Виктор

        Внутри поста, справа, в блоке выбора категорий, если выбрать несколько, то показывает какая основная категория, и вот интересно, как вытащить ту самую основную категорию

        Ответить29.Окт.2019 в 09:22 #
        • @ campusboy3503 www.youtube.com/c/wpplus

          Это не дефолтный функционал WP. Стоит плагин Yoast SEO? Вроде это его фишка. Если да, то гуглить по запросу "yoast seo get primary category".

          1
          Ответить29.Окт.2019 в 22:31 #
          • Виктор

            а если без плагина? laugh

            Ответить29.Окт.2019 в 22:48 #
            • @ campusboy3503 www.youtube.com/c/wpplus

              У нас что испорченный телефон? Говорю, что изображено на скриншоте - функционал плагина Yoast SEO, по запросу "yoast seo get primary category" можно найти готовые куски кода как получить основную рубрику записи.

              2
              Ответить29.Окт.2019 в 22:50 #
              • Виктор

                функционал плагина Yoast SEO

                да, был испорчен пока ты это не написал smile благодарю, теперь все стало ясней smile
                код нашел, функционал реализовал. Я почему-то был уверен, что это встроенное отображение "основная рубрика", а это вот оно как оказывается. shock

                Ответить30.Окт.2019 в 01:09 #
                • можно увидеть ваш код реализации?

                  Ответить19.Ноя.2019 в 04:37 #
                  • Виктор
                    <?php if( $the_query->have_posts() ): ?>
                    	<?php $count = 0; ?>
                    	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                    		<?php
                    			/**
                    			* Получаем главную категорию
                    			**/
                    			$primary_term_id = yoast_get_primary_term_id('category');
                    			$postTerm = get_term( $primary_term_id );
                    			//echo $postTerm->name;
                    		?>
                    		<?php $count++; if ($count == 1) : ?>
                    		<?php array_push($intro_id, get_the_ID()) ?>
                    
                    									<?php    if( !is_paged() ): ?>
                    		<div class="intro-preview">
                    			<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    				<?php
                    				if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it.
                    					the_post_thumbnail( array( 496, 400, 'bfi_thumb' => true ), array('alt' => get_the_title(), 'title' =>  get_the_title()) );
                    				}
                    				?>
                    
                    				<div class="intro-preview-description">
                    					<div class="label-wrap">
                    						<?php foreach (get_the_category() as $category){ ?>
                    						<span class="label"><?php echo $category->cat_name; ?></span>
                    						<?php } ?>
                    					</div>
                    					<div class="text">
                    						<?php the_title(); ?>
                    					</div>
                    				</div>
                    			</a>
                    		</div>
                    		<?php endif; ?>
                    		<?php endif; ?>
                    		<div class="intro-col">
                    		<?php if ($count == 2) : ?>
                    		<?php array_push($intro_id, get_the_ID()) ?>
                    									<?php    if( !is_paged() ): ?>
                    		<div class="intro-preview">
                    			<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    				<?php
                    				if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it.
                    					the_post_thumbnail( array( 240, 189, 'bfi_thumb' => true ), array('alt' => get_the_title(), 'title' =>  get_the_title()) );
                    				}
                    				?>
                    				<div class="intro-preview-description">
                    					<div class="label-wrap">
                    													<span class="label">
                    														<?php echo $postTerm->name; ?>
                    													</span>
                    					</div>
                    					<div class="text">
                    						<?php the_title(); ?>
                    					</div>
                    				</div>
                    			</a>
                    		</div>
                    		<?php endif; ?>
                    		<?php endif; ?>
                    
                    		<?php if ($count == 3) : ?>
                    		<?php array_push($intro_id, get_the_ID()) ?>
                    									<?php    if( !is_paged() ): ?>
                    		<div class="intro-preview">
                    			<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                    				<?php
                    				if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it.
                    					the_post_thumbnail( array( 240, 189, 'bfi_thumb' => true ), array('alt' => get_the_title(), 'title' =>  get_the_title()) );
                    				}
                    				?>
                    				<div class="intro-preview-description">
                    					<div class="label-wrap">
                    													<span class="label">
                    														<?php echo $postTerm->name; ?>
                    													</span>
                    					</div>
                    					<div class="text">
                    						<?php the_title(); ?>
                    					</div>
                    				</div>
                    			</a>
                    		</div>
                    		<?php endif; ?>
                    		<?php endif; ?>
                    	</div>
                    	<?php endwhile; ?>
                    <?php endif; ?>
                    Ответить19.Ноя.2019 в 09:41 #