single_cat_title() — функция для вывода названия текущей категории

Функция работает только на страницах категорий, меток и архивах других таксономий, при этом она должна находиться вне цикла.

То есть, если функция была использована на странице архива категорий — то она выведет/вернёт название текущей категории, на странице архива меток — название текущей метки, на странице архива другой таксономии — название текущего элемента таксономии.

Вывести название текущего элемента таксономии вы также можете функцией single_term_title().

Как вывести имя категории вне цикла, если известен только ID? Легко, для этого используем функцию get_category().

Если же нужно вывести названия рубрик записи, то вам в помощь функции get_the_category() и the_category().

single_cat_title( $prefix = '', $display = true )
$prefix
(строка) текст, который нужно вывести перед названием категории,
$display
(логическое) вывести или вернуть результат (записать в переменную, по умолчанию имена рубрик/меток сразу выводятся — true. Если установлено false, то параметр $display будет игнорироваться.

Примеры использования функции

<p><?php single_cat_title('Вы находитесь в категории: '); ?></p>

Не поленюсь сделать скриншот — в итоге в исходном HTML-коде (Ctrl + U) получаем вот что:

результат действия функции single_cat_title()

Как видите, имя категории выводится без ссылки.

Выводимое значение функции также можно записать в переменную:

$current_category = single_cat_title('', false);
echo "<p>Вы находитесь в категории: $current_category</p>";

В итоге получится то же самое, что и в предыдущем примере.

Фильтры single_cat_title, single_tag_title, single_term_title

В случае, если функция single_cat_title() была использована на странице какой-нибудь рубрики, к выводимому результату можно применить фильтр:

$term_name = apply_filters( 'single_cat_title', $term->name );

Если на странице метки:

$term_name = apply_filters( 'single_tag_title', $term->name );

Для остальных таксономий:

$term_name = apply_filters( 'single_term_title', $term->name );

Определение типа текущей страницы производится условными тегами is_category(), is_tag() и is_tax().

$term->name
(строка) название текущей рубрики / метки или элемента таксономии.

Небольшой пример — давайте для рубрики с ID = 5 всегда будем выводить заголовок с HTML-классом cat5, а для всех остальных категорий — просто заголовок <h1>, в таком случае код будет следующим:

function true_cat5_with_class( $cat_name ){
	if( is_category( 5 ) ) {
		return '<h1 class="cat5">' . $cat_name . '</h1>';
	} else {
		return '<h1>' . $cat_name . '</h1>';
	}
}
 
add_filter('single_cat_title', 'true_cat5_with_class', 10, 1);

Перед тем, как будете что-то менять через фильтры, обратите внимание, что single_cat_title() может также использоваться в других местах сайта, например при заполнении тега <title>.

Функция single_term_title()

Начиная с версии WordPress 3.1, функция single_cat_title() работает на основе single_term_title(), причем она использует эту функцию как есть, без каких-либо дополнительных действий с аргументами. Следующий код взят из файла движка WordPress general-template.php:

function single_cat_title( $prefix = '', $display = true ) {
	return single_term_title( $prefix, $display );
}

Значения по умолчанию параметров $prefix и $display у функции single_term_title() точно такие же, поэтому, если хотите, для вывода названий меток и рубрик вы можете использовать её — абсолютно никакой разницы нет, разве что появятся какие-нибудь изменения в следующих версиях WordPress.

Комментарии 20

  • eduard12 июля 2013 в 12:07 #

    Здравствуйте, подскажите с выводом категорий
    Категории вывожу так:

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

    В дочерней категории все правильно выводится: “родительская » дочерняя” – тут все в норме.

    Находясь в родительской категории создается проблема, выводится: “родительская » дочерняя(последнего материала)”, а нужно чтобы просто родительская. Как решить проблему?

    • Миша12 июля 2013 в 20:07 #

      Категории вывожу так:

      тут вопрос - категории к каждому посту или категории на странице в целом, как заголовок?

      • eduard12 июля 2013 в 21:07 #

        как заголовок. есть 3 родительские категории, в них дочернии категории.
        нужно чтобы в дочерних отображалось "родительская » дочерняя", а в родительских "родительская". не важно, будет гипер-ссылка или просто имя категории.

  • eduard12 июля 2013 в 23:07 #

    single_cat_title() не совсем так работает, например на странице "site.ru/categoriya/podkategoriya/" выводит "имя_подкатегории",

    мне нужно, чтобы когда находишься на странице:
    "site.ru/categoriya/podkategoriya/" - выводило "имя_категории » имя_подкатегории".
    а если находишься на "site.ru/categoriya/" - выводило "имя_подкатегории".
    или я single_cat_title что то не то делаю?

  • eduard13 июля 2013 в 00:07 #

    если я не понятно объяснил, то покажу на сайте.
    http://zadota.ru/dota1/novosti - выводит "Новости", хотя нужно "Dota1 » Новости".
    http://zadota.ru/dota1/ - тут все правильно выводит "Dota1".
    вывод и там и там осуществляется таким кодом "".

    • Миша14 июля 2013 в 15:07 #

      сорри за долгий ответ, там какая-то лажа на хостинге, ппц.
      итак, есть такая функция:

      $cat_id = get_query_var('cat');

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

      $category = get_category(get_query_var('cat'));
      if( $parent = get_category( $category->parent ) ){
      	echo '<a href="' . get_category_link( $parent->cat_ID ) . '">' . $parent->cat_name . '</a> &raquo; ';
      }
      single_cat_title();
  • Екатерина15 августа 2013 в 10:08 #

    Здравствуйте, Михаил! Не знаю по адресу ли я обращаюсь, но возможно, Вы сможете мне помочь в решении моей проблемы....

    Хотя сказать честно, потеряла уже последнюю Надежду её решить.

    Очень хочется сделать так, чтобы если указываешь, например, рубрику
    http://ekaterinagabzevich.ru/category/blogging/plaginy-wordpress-blogging/
    то статьи не попадали в родительскую рубрику
    http://ekaterinagabzevich.ru/category/blogging/

    Можно ли как-то это сделать?

    С уважением.

  • lerarain17 февраля 2014 в 19:02 #

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

     <p><b>Авторы:</b> <?php
    $cur_terms = get_the_terms( $post->ID, autor );
    foreach($cur_terms as $cur_term){
    	echo '<a href="'. get_term_link( (int)$cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .', </a>';
    }
     ?></p>

    вслед за авторами необходимо выводить информацию о каждом авторе (описание рубрики), пыталась реализовать вывод следующим образом:

    <?php echo '' . term_description($post->ID, autor); ?>

    но подобный вывод не работает..
    Не могли бы Вы подсказать в чём может быть проблема?

    • Миша18 февраля 2014 в 21:02 #

      Добрый вечер!
      для начала попробуйте autor добавить в одинарные кавычки 'autor'.

  • lerarain18 февраля 2014 в 21:02 #

    Спасибо за совет!) Проблему решила следующим образом(дело было не в кавычках):

    <p><b>Авторы:</b><br> <?php
    $cur_terms = get_the_terms( $post->ID, author );
    foreach($cur_terms as $cur_term){
    	echo '<a href="'. get_term_link( (int)$cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .', </a>';
       	echo "<br>{$cur_term->description}<br>";
    	}
     ?></p>

    А в принципе кавычки лучше ставить? Их отсутствие может сказаться на работоспособности кода?

  • Веталь15 апреля 2014 в 10:04 #

    А как вывести просто имя рубрики?
    Я вывожу cat_name; ?>

    Но почему то у меня выводиться не корректно(
    А точнее повторяется 2-а раза первая рубрика,потом 3-тья вместо второй.
    Когда ставил описание категории,было норм...

  • Веталь15 апреля 2014 в 10:04 #

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

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
  • Миша: Привет ещё раз, не поверишь, реально не сталкивался с этим вопросом. По теории можно сказать следующее: во-первых,...

  • Миша: Привет, вообще без проблем, делаешь всё через require(), require_once() - выбирай любую, какая больше нравится.

  • Виталий Моргунов: Привет! Не могу разобаться, как я могу контролировать порядок подключения стилей. В моем случае мне нужно чтобы стили...

  • Миша: Спасибо!

  • w0rmak: Это было просто. Нашел код в интернете. Добавьте и себе ymaps.load(function () { var input = document.getElem...