WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

the_category() WP 0.71

Выводит ссылки на рубрики, к которым принадлежит пост в виде HTML li списка или в произвольном формате.

Функцию нужно использовать внутри Цикла 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 поста, категории которого нужно вывести.
По умолчанию: false - текущий пост ($post->ID)

Примеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

31 коммент
Полезные 1 Вопросы 4 Все
  • leonking leonking.com.ua

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

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

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

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

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

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

      Ответить6.10 лет назад #
  • Женя

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

    Ответить6.5 лет назад #
    • Kama7770

      Вот, я взял код функций: 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()

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

      Ответить6.5 лет назад #
      • Женя

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

        Ответить6.5 лет назад #
        • Kama7770

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

          Ответить6.5 лет назад #
          • Попробовал поставить этот код, наблюдается следующая проблема.

            Сейчас по дефолту выводит по алфавиту, например:

            Категория 1 - Категория 3 - Категория 2

            После установки кода выводит следующее:

            Категория 1 - Категория 2 - Категория 3 - Категория 1 - Категория 2

            Получается всё отлично, но в конце идет лишний повтор.

            Поможешь пожалуйста разобраться? Ковырял код 1,5 часа, не получилось ничего unknw

            Ответить4 мес назад #
  • @ Sergye

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

    Ответить6.5 лет назад #
    • Kama7770

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

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

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

    Ответить6.5 лет назад #
    • Kama7770

      Уберите пост из этой рубрики 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;
      }
      Ответить6.5 лет назад #
  • Дима whitelistfx.com/obzor-brokerskojj-kompan...

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

    Ответить5.8 лет назад #
    • Kama7770
      $category = get_the_category(); 
      echo $category[0]->cat_name;
      3
      Ответить5.8 лет назад #
      • Дима whitelistfx.com/obzor-brokerskojj-kompan...

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

        Ответить5.8 лет назад #
      • Max yuristblog.ru

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

        Ответить5.5 лет назад #
      • Сергей www.cherneenet.ru

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

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

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

    Ответить5.5 лет назад #
  • Андрей Зимин info-kibersant.ru/kak-uvelichit-skorost-...

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

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

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

    Ответить4.2 года назад #
    • Kama7770

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

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

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

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

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

        Ответить4.2 года назад #
        • Kama7770

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

          Ответить4.2 года назад #