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

category_description() WP 1.0.0

Получает описание рубрики, которое указывается на странице редактирования рубрики в админ-панели (посты > рубрики).

Если category_description() используется на странице архивов, отличной от category.php, то перед тем как использовать функцию нужно проверить, что генерируется страница категорий, а не какая-нибудь страница меток, авторов, дат и т.д.. Сделать это можно условным тегом is_category().

Работает на основе: term_description()

Хуков нет.

Возвращает

Строку. Описание категории.

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

$description = category_description( $category_id );
$category_id(число)
ID категории, описание которой нужно получить.
По умолчанию: текущая категория (в запросе)

Примеры

#1. Обычный пример использования

Выведем на экран описание категории 3 (id категории), используя оператор echo. echo нужен для вывода описания категории на экран, так как функция просто возвращает описание и ничего не выводит.

<?php echo category_description(3); ?>

В результате, получим описание категории 3.

#2 Выводим описание категории, только если оно есть

if ( $cat_desc = category_description() )
	echo '<div class="cat__desc">'. $cat_desc .'</div>';
else
	echo '<div class="no__cat__desc">Описание отсутствует!</div>';

#3. Описание категории полученной через ярлык

Выведем на экран описание категории (рубрики), используя слаг (альтернативное название категории), а не ID как в прошлом примере. Для этого получим ID с помощью функции get_category_by_slug().

<?php echo category_description( get_category_by_slug('category-slug')->term_id ); ?>

Заметка: это скорее наглядный пример и использовать его я не рекомендую, потому что нет необходимости получать все данные категории, лишь для того, чтобы получить ID категории.

Пример выше можно так же заменить на этот, тоже будет получено описание категории по слагу:

<?php echo get_category_by_slug('category-slug')->description; ?>

#4. Очистим описание категории при выводе, через фильтр term_description

Допустим у нас в описании категории используется шоткод [image=/ссылка_на_картинку] мы используем этот шоткод в других местах, но когда мы выводим описание категории, он нам не нужен. Чтобы его убрать воспользуемся фильтром:

add_filter('term_description', 'clear_term_description_image_shortcode');
function clear_term_description_image_shortcode($value){
	return preg_replace('@[image=[^]]*]@', '', $value);
}

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

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

Код category description: wp-includes/category-template.php WP 5.2.3

<?php
function category_description( $category = 0 ) {
	return term_description( $category );
}

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

Из метки: Описание (post term description)

Еще из раздела: Рубрики

Еще из тегов шаблона: Таксономии: рубрики, метки, ...

35 комментов
Полезные 5 Вопросы 1 Все
  • @ Олег

    А можно сделать такую конструкцию:

    <meta name="Description" content=description; ?>>

    или как по другому можно прописать на страницы tags, и category теги keywords и description ?

    Заранее спасибо

    Ответить8.1 лет назад #
    • Kama7602

      keywords уже давно не учитывается поисковиками. description можно сделать используя СЕО плагин Platinum SEO Pack (статья немного устарела, не знаю что там сейчас в последних версиях изменилось).

      Ответить8.1 лет назад #
  • @ Инна
    <?php echo category_description( $category_id ); ?>

    выводит

    <p>описание категории</p>

    Kama, подскажи как сделать так, что бы вывод был без тегов p

    Ответить7.3 лет назад #
    • @ VRS

      Инна, отвечу за Kama. Как вариант: поместить вывод описания категории в

      <div id="category-description"><?php echo category_description( $category_id ); ?></div>

      и прописать в стилях вот так

      #category-description [p] {
      display: none!important;
      }
      Ответить7.2 лет назад #
    • BiggiBoi

      Решение которое уберет тэги параграфа в выводе описания.

      add_filter('term_description', 'clear_term_description');
      function clear_term_description($value){
      	return preg_replace(array('@<p>@','@</p>@'), '', $value);
      }
      1
      Ответить5.6 лет назад #
      • Сергей sitio.com.ua

        Как вариант, внести следующие правки в файл: default-filters.php

        Ищем:

        foreach ( array( 'term_description' ) as $filter ) {
        	add_filter( $filter, 'wptexturize'      );
        	add_filter( $filter, 'convert_chars'    );
        	add_filter( $filter, 'wpautop'          );
        	add_filter( $filter, 'shortcode_unautop');
        }

        И убираем строчку, оставляя:

        foreach ( array( 'term_description' ) as $filter ) {
        	add_filter( $filter, 'wptexturize'      );
        	add_filter( $filter, 'convert_chars'    );
        	add_filter( $filter, 'shortcode_unautop');
        }

        Всё smile

        1
        Ответить4.8 года назад #
        • Kama7602

          Только наверное лучше не редактировать файл движка, а добавить такую строку в functions.php:

          remove_filter('term_description', 'wpautop');
          6
          Ответить4.8 года назад #
  • Eremkin

    День добрый!
    Буду рад, если подскажите по возникшему вопросуmosking
    Меня интересует, можно ли сделать для одной категории несколько описаний?
    Грубо говоря, чтобы 1-е описание выводилось под Заголовком категории, 2-е описание выводилось в сайтбаре.
    Или это как то возможно реализовать по-другому?
    И хотелось бы редактировать оба описания через админку.

    Ответить7.1 лет назад #
  • evgen evo-rus.ru

    а как убрать описание с других страниц категории и оставить только на первой, если страниц несколько?

    Ответить5.5 лет назад #
  • @ Romasa

    Добрый день, а какой файл отвечает за формирование страницы Тэгов?
    и как туда вывести описание?
    Применять -

    Ответить4.3 года назад #
  • @ campusboy3415 www.youtube.com/c/wpplus

    Важно: если у категории нет описания, функция возвращает html тег br.

    Только что использовал эту функцию и проверил этот момент - ничего не возвращается.

    Судя по коду функции term_description, а именно по последней строчке:

    return is_wp_error( $description ) ? '' : $description;

    это так и есть.

    Ответить3.4 года назад #
    • Kama7602

      Удалил это из описания. Видимо раньше так было, щас поправили... unknw

      Ответить3.4 года назад #
  • @ campusboy3415 www.youtube.com/c/wpplus

    Если не сложно, Тимур, добавь пожалуйста, пример с условием, что если есть описание то выводить, если нет - ничего или что-либо другое. Я так делаю (оформлять проще потом):

    if ( $category_description = category_description() )
      echo '<div class="category-description">'.$category_description.'</div>';
    else
      echo '<div class="no-category-description">Описание отсутствует!</div>';

    Примитивный пример, но кому надо, тот сможет найти применение в своём случае.

    2
    Ответить3.4 года назад #
  • Игорь

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

    Ответить2.6 года назад #
    • @ campusboy3415 www.youtube.com/c/wpplus

      Привет. Если подключен jQuery, то можно с помощью него, например:

      $('.btm-toggle-show-desc').click(function(){
      	$('.cat-desc-block').slideToggle();
      });

      где:

      • .btm-toggle-show-desc - кнопка с классом, по которой надо щёлкать
      • .cat-desc-block - блок с классом, который надо сворачивать/разворачивать.
      1
      Ответить2.6 года назад #
  • Станислав
    if ( $cat_desc = category_description() )
    	echo '<div class="cat__desc">'. $cat_desc .'</div>';
    else
    	echo '<div class="no__cat__desc">Описание отсутствует!</div>';

    Классно, работает четко. Кама скажи пожалуйста у меня есть при редактировании рубрики(категории):

    • Описание (собственно которое и выводиться через category_description) и есть
    • Содержание

    Скажи пожалуйста как содержание рубрики вывести на странице рубрики, также как мы выводим описание рубрики ? Очень нужно вывести часть текста в одной области а другую часть в другой.

    Ответить1.5 года назад #
    • Kama7602

      Скорее всего оно у тебя в метаданных рубрики храниться. Поэтому узнай название метаполя и используй его в функции get_term_meta() также как с описанием...

      Ответить1.5 года назад #
  • Добавлю, как еще можно добавлять описание к рубрике, без того, чтобы лезть в файлы шаблона:

    $_term["description"] = 'Здесь описание, которое может быть взято из какого-нибудь метаполя категории';
    apply_filters( 'get_term', $_term, $taxonomy );
    Ответить1.4 года назад #
    • Kama7602

      Такое ощущение, что код вырван из контекста какого-то... Кому он может быть понятен, мне сложно сказать... unknw

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