WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

the_category() WP 0.71

Выводит ссылки на рубрики к которым принадлежит пост.

the_category() нужно использовать внутри Цикла WordPress или использовать параметр post_id (см. описание).

Работает на основе: get_the_category_list()
✈ 1 раз = 0.006019с = очень медленно | 50000 раз = 16.46с = медленно PHP 7.1.2, WP 4.7.3

Хуков нет.

Возвращает

HTML код ссылок на категорию(и).

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

<?php the_category( $separator, $parents, $post_id ); ?>
$separator(строка)
Разделитель между ссылками.
По умолчанию: выведет ссылки в списке <ul>
$parents(строка)

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

  • multiple - показывать отдельно ссылки на родительскую и дочернюю категории, сохраняя порядок (родитель/предок);

  • single - показать одну ссылку, на категорию в которой находится пост, но текстом ссылки станет вся структура вложенности поста в категории (родитель/предок).
    По умолчанию: просто выводятся категории, к которым принадлежит пост (никакая связь не учитывается)
$post_id(число)
ID поста, категории которого нужно вывести. Добавлен в версии 2.5.
По умолчанию: текущий пост ($post->ID)

Примеры

#1 Список категорий поста разделенных запятой:

<p>Категории: <?php the_category(', '); ?></p>

Получим: Категории: WordPress, Computers, Blogging

#2 Используем второй параметр

Пусть, пост находится в категории "Пушкин", которая является дочерней категорией категории "Поэты", тогда:

<?php the_category(' > ', 'multiple'); ?>

Выведет: Поэты > Пушкин

#2.1. А если во втором параметре написать 'single':

<?php the_category(' > ', 'single'); ?>

Получим: Поэты > Пушкин (ссылка будет вести на категорию "Пушкин")

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

<?php
function the_category( $separator = '', $parents = '', $post_id = false ) {
	echo get_the_category_list( $separator, $parents, $post_id );
}

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

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

Еще из тегов шаблона: Записи: посты, страницы, ...

23 коммента
Полезные 1 Все
  • leonking cайт: leonking.com.ua

    Спасибо за помощь, не долго искал и главное удачно. smile

    1
    Ответить5.8 лет назад #
  • @ Василий

    Подскажите, пожалуйста, как сделать, чтобы категория выводилась без ссылки. Ну, допустим, как в вашем примере

    Категории: WordPress, Computers, Blogging , но без ссылок - просто список?

    Ответить5.1 лет назад #
    • Sergius

      Вместо the_category()воспользуйтесь функцией get_the_category()

      Ответить4.8 года назад #
  • Женя

    Помогите советом, люди Добрые! Использовал данный метод для вывода хлебных крошек на сайте. Все очень круто, но одно НО. Метод возвращает ссылки на сами рубрики, тайтл которых берется по дефолту и имеет вид: Посмотреть все записи рубрики... Где и как это поменять? Понимаю, что внутри функционала движка это можно изменить, но при обновлении версии все летит. Так вот.. может кто подскажет как это можно реализовать через функшион, или как по-другому. За ответ либо за наводку в сторону решения задачи буду ну просто очень ОЧЕНЬ признателен, ибо ломаю голову этим вопросом не один день.

    Ответить4.4 года назад #
    • Kama5395

      Вот, я взял код функций: get_the_category_list() и get_category_parents(), удалил лишнее. То что вам нужно. Можете редактировать под себя.

      function my_get_the_category_list( $separator = '', $post_id = false ) {
      	$parents='multiple';
      	if ( ! is_object_in_taxonomy( get_post_type( $post_id ), 'category' ) )
      		return apply_filters( 'the_category', '', $separator, $parents );
      
      	$categories = get_the_category( $post_id );
      	if ( empty( $categories ) )
      		return apply_filters( 'the_category', __( 'Uncategorized' ), $separator, $parents );
      
      	$thelist = '';
      	$i = 0;
      	foreach ( $categories as $category ) {
      		if ( 0 < $i )
      			$thelist .= $separator;
      
      		if ( $category->parent )
      			$thelist .= my_get_category_parents( $category->parent, true, $separator );
      
      		$thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( $category->name ) . '" >' . $category->name .'</a>';
      
      		++$i;
      	}
      	return $thelist;
      }
      function my_get_category_parents( $id, $link = false, $separator = '/', $visited = array() ) {
      	$chain = '';
      	$parent = get_term( $id, 'category' );
      	if ( is_wp_error( $parent ) )
      		return $parent;
      
      	$name = $parent->name;
      
      	if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
      		$visited[] = $parent->parent;
      		$chain .= my_get_category_parents( $parent->parent, $link, $separator, $visited );
      	}
      
      	if ( $link )
      		$chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( $parent->name ) . '">'.$name.'</a>' . $separator;
      	else
      		$chain .= $name.$separator;
      	return $chain;
      }

      Вставьте код в functions.php и используйте функцию:

      echo my_get_the_category_list( ' > ', $post->ID );

      Вместо the_category()

      Как вариант можете попробовать использовать мои хлебные крошки.

      Ответить4.4 года назад #
      • Женя

        Класс!! Спасибо Огромное! Хотя остался все же вопросик. Поставил на сайт, работает. Однако запись моя имеет 3 родительские рубрики, к примеру: Обезьяна - Австралопитек - Хомосапиенс - Я. В рубриках (Австралопитек - Хомосапиенс) тайтл отображается корректно, а вот Обезьяна по-прежнему имеет тайтл по дефолту типа "посмотреть все записи в рубрике Обезьяна". Пытался в Вашем коде разобраться - тщетно, пока сложновато для меня.

        Ответить4.4 года назад #
        • Kama5395

          Обновил код в предыдущем комменте. Недоделка была.

          Ответить4.4 года назад #
  • @ Sergye

    Ребята, подскажите пожалуйста, можно ли вывести список постов по критерию метка+ категория и как это сделать? То есть, я хочу вывести из категории "Игры" все записи с меткой "РПГ", например.
    Буду очень благодарен за какую-либо помощь smile

    Ответить4.4 года назад #
    • Kama5395

      Смотрите WP_Query параметр tax_query. Если что-то не будет получаться, напишите там в комментариях, что нужно и что у вас получилось...

      Ответить4.4 года назад #
  • @ Борис

    Здравствуйте! Такой вопрос. У меня пост добавлен в несколько категорий. Как исключить определенную категорию, чтобы она не выводилась в записи: "Опубликовано в категория Рубрика 1, Рубрика 2". Как убрать здесь эту Рубрику 2? Спасибо.

    Ответить4.3 года назад #
    • Kama5395

      Уберите пост из этой рубрики unknw Все остальное костыли...

      Воспользуйтесь фильтром: 'the_category'

      add_filter('the_category', 'leave_one_cat', 20);
      function leave_one_cat( $cat_list ){
      	$cat_list = preg_replace('/(?<=a>).*$/', '', $cat_list);
      	return $cat_list;
      }
      Ответить4.3 года назад #
  • Дима cайт: whitelistfx.com/obzor-brokerskojj-kompan...

    Подскажите как можно вывести имя рубрики в которой расположена запись не ссылкой!!! прописываю так : появляется ссылка на рубрику, а мне надо просто "имя" этой рубрики, не в виде ссылки.
    Помогите спасибо!..
    П.С. способ поменять the_category() на get_the_category() не выводит ничего. просто пусто.

    Ответить3.6 года назад #
    • Kama5395
      $category = get_the_category(); 
      echo $category[0]->cat_name;
      3
      Ответить3.6 года назад #
      • Дима cайт: whitelistfx.com/obzor-brokerskojj-kompan...

        Спасибо большое, то что надо было.
        Удачи!

        Ответить3.6 года назад #
      • Max cайт: yuristblog.ru

        А для списка категорий по такому принципу можно удалить ссылку? Надо как-то массив обработать?

        Ответить3.5 года назад #
      • Сергей cайт: www.cherneenet.ru

        Спасибо огромное!!!

        Ответить3.1 года назад #
  • Николай

    Искал то, что мне нужно очень долго. Первые 6 сайтов в топ10 выдачи совершенно не о том. И вот нашел ваш пост, прям свет в конце тоннеля. Спасибо!

    Ответить3.4 года назад #
  • Андрей Зимин cайт: info-kibersant.ru/kak-uvelichit-skorost-...

    Спасибо большое, мне необходимо было тоже, что и Диме, выводить рубрики без ссылки. Долго не мог решить проблему. Все прошло отлично!

    Ответить2.8 года назад #
  • Андрей cайт: israeli.vision

    Всем привет! Уже некоторое время мучаюсь над решением проблемы. Суть проблемы:
    Сайт на wordpress, создаю рубрику с ссылкой site/auto/, продвигаю ее в google, сайт на хорошей позиции. Пришло время менять дизайн, а с ним и некоторую структуру страниц. Теперь, есть созданная страница с site/auto/, а так же стараю рубрика с той же ссылкой. Как сделать так, что бы по ссылке site/auto/ - человек попадал на страницу, а не на рубрику, если ссылки у них одинаковые. Пока приоритет у рубрики, почемуто.
    Это нужно что бы сохранить иерархию урлов которые уже в индексе Поисковых систем. Помогите, разобраться, я уже голову сломал.

    Ответить2 года назад #
    • Kama5395

      Вот здесь очень похожий вопрос, я на него отвечал, вам должно пригодится. Примерное решение вашей проблемы:

      add_action('init', function(){
      	add_rewrite_rule( '^site/(auto)/?', 'index.php?pagename=$matches[1]', 'top' );
      });

      Добавь этот код в functions.php и сбрось (обнови настройки) ЧПУ в настройках WP.

      Ответить2 года назад #
      • Андрей cайт: israeli.vision

        Kama, вы лучший! Несколько дней и бессоных ночей )) Скажите, а можно ли сделать автоматически для всех категорий у которых в перспективе будет одинаковый урл со страницами, что не каждый раз добавлять правило?

        Ответить2 года назад #
        • Kama5395

          Да можно, есть 2 варианта, но и там и там надо будет код писать, извините я не подскажу это - это очень редкий и частный случай...

          Ответить2 года назад #
Здравствуйте, !     Войти . Зарегистрироваться