Янв
5
35

Вывод категорий для поста через функцию get_the_category

функция get_the_categoryПриветствую всех читателей блога WordPress Inside в 2011 году, поздравляю с наступившими и наступающими праздниками, желаю много здоровья, счастья и радости на следующие 360 дней.  Как и обещал в своей статье про планы на будущий 2011 год занимаюсь по чуть-чуть улучшением всех своих основных блогов — обновляю системы, ставлю последние версии плагинов и копаюсь в шаблонах ради оптимизации и исправления ошибок. Работал это крайне сложная, я бы даже сказал очень кропотливая — находишь одну неточность, решаешься ее исправить и перед тобой 5 отдельных проектов, для каждого из которых нужно внести правки. Ну, раз я уже запланировал все это сделать, назад дороги нет, заодно в процессе получаю дополнительный опыт создания блогов на wordpress и уже нашел штук 5-6 тем для новых постов в блог:) Сегодня поговорим о категориях и функциях для их отображения.

В одной из прошлых статей блога я публиковал хак который помогает убрать ненужный текст из атрибута title для ссылок категорий. Данное решение использовалось для функции вывода списка категорий в сайдбаре с помощью функции wp_list_categories. На выходе вы получали записи вроде этой:

<a href="https://wpinsideblog.com/category/security/" title="Просмотреть все записи в рубрике «Безопасность»">Безопасность</a>

Если уж для seo атрибут title имеет хоть какое-то значение, то куда полезнее там было бы разместить просто название категории, а не весь этот ненужных текст. Собственно, указанная выше ссылка на хак помогала решить эту проблему. Но вот ни задача, все это было справедливо (работало) для функции списка категорий wp_list_categories, которая позволяла предварительно обработать полученный список не выводя его сразу же. Но что делать с другими функциями для вывода категорий? — вот в чем вопрос.

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

вывод категории поста

Вся проблема заключалась в том, что здесь используется функция the_category, для которой, к сожалению, нельзя задать параметр, чтобы результат ее вызова не отображался сразу. Зато в вордпресс есть еще одна функция get_the_category, которая возвращается массив объектов категорий для конкретного поста.

Функция get_the_category

Синтаксис функции get_the_category достаточно прост:

<?php get_the_category( $id ) ?>

где параметр id это учетная запись поста для которого будут выводить категории. Куда более интересными есть примеры использования функции.

Отображение первой категории для поста

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

Программисты знают, что нулевой параметр массива выводит первый элемент, собственно это и объясняет принцип работы данного кода.

Как получить категории вне цикла Loop

<?php
global $post;
$categories = get_the_category($post->ID);
var_dump($categories);
?>

Для этого в качестве параметра функции нужно передавать id поста, что и происходит в коде.

Вывод названия категории без ссылок

Кстати, данную функцию я использую в некоторых сайтах, чтобы выводить название категории поста, но без активной ссылки — так просто дополнительный полезный текст на странице. В таком случае можно применить код:

<?php 
foreach((get_the_category()) as $category) {
 echo $category->cat_name . ' '; 
} ?>

Убираем из title категории лишний текст

Ну, и напоследок, немного поразмыслив получился хак для вывода списка категории для поста без использования функции the_category, которую мы успешно заменяем на get_the_category. Если вы хотите добавить код непосредственно в то место шаблона, где выводятся категории, например, файл archive.php, то пишем что-то вроде:

Категория: <?php foreach((get_the_category()) as $category) { 
echo '<a href="'.get_category_link($category->cat_ID).'" title="'.$category->cat_name.'">'.$category->cat_name.'</a>; ';
} ?>

Можно, в принципе разместить код для отображения категорий в файле функций, а потом в файлах шаблона поменять the_category на новую функцию, например, под названием my_thecat(). Конечно, не забудьте предварительно перед заменой добавить соответствующий код в файл функций functions.php:

function my_thecat() {
global $post;
foreach((get_the_category($post->ID)) as $category) { 
echo '<a href="'.get_category_link($category->cat_ID).'" title="'.$category->cat_name.'">'.$category->cat_name.'</a>; ';
}
}

Потестировал, все работает. Остается лишь один вопрос — насколько это все полезно и крайне необходимо. Если у вас один блог с постоянным дизайном, который вы хотите сделать самым лучшим, то можно потратить пару минут и внести соответствующие изменения. В случае если у вас таких блогов много, думаю, особой seo выгоды манипуляция с title не принесет в плане, проще купить ссылок в Rotapost на все эти проекты — кстати эксперимент по подъему тИЦ в системе успешно и позитивно завершен, скоро будет отчет об этом.

Вывод категорий кастомных записей

В комментариях подсказывают, что примеры, указанные выше, не работают для кастомных (пользовательских) типов записей. Я с этой задачей не сталкивался, поэтому могу вам лишь посоветовать погуглить решение в англоязычных блогах по ключу wordpress custom post type show category или же воспользоваться подсказкой пользователя Stinker (из комментариев). В месте вывода категорий нужно просто вставить код:

<?php the_terms( $post->ID, 'categoria_video', '<li> <strong>Категория:</strong> ', ' ','</li>' ); ?>

Где categoria_video — это таксономия пользовательской записи (она же кастомная). А теперь более подробно от куда и что. Например у нас есть:

// Тип записи Видео
  if ( ! function_exists( 'video_cp' ) ) {
 
    function video_cp() {
 
        $labels = array(
            'name'                => _x( 'Видео', 'Post Type General Name', 'video' ),
            'singular_name'       => _x( 'Видео', 'Post Type Singular Name', 'video' ),
            'menu_name'           => __( 'Видео', 'video' ),
            'parent_item_colon'   => __( 'Родительский:', 'video' ),
            'all_items'           => __( 'Все видеоматериалы', 'video' ),
            'view_item'           => __( 'Просмотреть', 'video' ),
            'add_new_item'        => __( 'Добавить новое видео', 'video' ),
            'add_new'             => __( 'Добавить видео', 'video' ),
            'edit_item'           => __( 'Редактировать видео', 'video' ),
            'update_item'         => __( 'Обновить видео', 'video' ),
            'search_items'        => __( 'Найти видео', 'video' ),
            'not_found'           => __( 'Не найдено', 'video' ),
            'not_found_in_trash'  => __( 'Не найдено в корзине', 'video' ),
        );
        $args = array(
            'labels'              => $labels,
            'supports'            => array( 'title', 'editor', 'excerpt', ),
            'taxonomies'          => array( 'categoria_video' ), // категория, которую мы создадим ниже (она же таксономия)
            'public'              => true,
            'menu_position'       => 5,
            'menu_icon'           => 'dashicons-id-alt',
        );
        register_post_type( 'video', $args );
 
    }
 
    add_action( 'init', 'video_cp', 0 ); // инициализируем
 
}
 
if ( ! function_exists( 'categoria_video' ) ) {
 
// Категории для вакансий
    function categoria_video() {
 
        $labels = array(
            'name'                       => _x( 'Категории Видео', 'Taxonomy General Name', 'categoria_video' ),
            'singular_name'              => _x( 'Категория Видео', 'Taxonomy Singular Name', 'categoria_video' ),
            'menu_name'                  => __( 'Категории', 'categoria_video' ),
            'all_items'                  => __( 'Категории', 'categoria_video' ),
            'parent_item'                => __( 'Родительская категория Видео', 'categoria_video' ),
            'parent_item_colon'          => __( 'Родительская категория Видео:', 'categoria_video' ),
            'new_item_name'              => __( 'Новая категория', 'categoria_video' ),
            'add_new_item'               => __( 'Добавить новую категорию', 'categoria_video' ),
            'edit_item'                  => __( 'Редактировать категорию', 'categoria_video' ),
            'update_item'                => __( 'Обновить категорию', 'categoria_video' ),
            'search_items'               => __( 'Найти', 'categoria_video' ),
            'add_or_remove_items'        => __( 'Добавить или удалить категорию', 'categoria_video' ),
            'choose_from_most_used'      => __( 'Поиск среди популярных', 'categoria_video' ),
            'not_found'                  => __( 'Не найдено', 'categoria_video' ),
        );
        $args = array(
            'labels'                     => $labels,
            'hierarchical'               => true,
            'public'                     => true,
        );
        register_taxonomy( 'categoria_video', array( 'video' ), $args );
 
    }
 
    add_action( 'init', 'categoria_video', 0 ); // инициализируем
}

Спасибо пользователю Stinker за подсказку, возможно, вам она пригодится.

P.S. Постовой. В одном из блогов рунета была найдена замечательная подборка тем wordpress портфолио из 17-ти бесплатных качественных шаблонов.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 14, средний балл: 5,14 из 7)
Загрузка...

категория Категории: Возможности; Хаки и секреты;
теги Теги: , , , , , .

комментариев 35 к статье “Вывод категорий для поста через функцию get_the_category”

  • YoS   05.01.2011

    как всегда супер! Продолжай в том же духе!

  • Siera   13.01.2011

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

  • Tod   14.01.2011

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

  • Vyacheslav   28.01.2011

    Не подскажите ли, можно сделать вывод конкретной рубрики-категории списком(только заголовок) по алфавиту, может есть какие-то плагины или только в ручную?

  • Siera   28.01.2011

    Tod
    Я пересмотрела уже n° количество плюгинов и пока ничего не нашла :-(
    Если вдруг попадётся, сообщите пожалуйста

  • Юрий   17.03.2011

    Офигенная статья, как же я долго это искал!
    Спасибо!

  • Николай   13.04.2011

    Интересный пост, спасибо!

    Не подскажите, есть ли возможность исключить некоторые категории поста при выводе их какой-либо из этих функций? Если конкретизировать, то есть некоторые «технические» категории, которые используются для построения структуры сайта и под постом выводить их не нужно, т.к. они бесполезны для пользователя.

  • Tod   16.04.2011

    Николай, можно добавить проверку в код функции мол если категория=»технической», то не выводить или как-то так. Также я бы глянул функции считывания категорий get_the_category может там есть за что «зацепиться».

  • дядя Валера, эсквайр   11.05.2011

    Поскольку я чайник, то не забиваю голову всеми этими проблемами — для вывода категорий испоьзую
    плагин Most Popular Posts с соответствующими настройками — там имеется возможность вывода наи более популярных из выбранных категорий..

  • Евгений   18.09.2012

    А Вы случаем не знаете, как сделать так, чтобы когда заходишь в категорию блога, а там посты которые находятся и в других категориях, то выводился категория «ГЛАВНАЯ», та в которой лежит основная статья.

    К примеру зашел я в категорию «Блоггинг», в которой есть пост, который и в категории «блоггинг» и в категории «seo» и когда заходишь в «БЛОГГИНГ» отображалась только эта категория. Уже все методы перепробовал, во всех случаях отображается так: Блоггинг, SEO. А надо только Блоггинг.

    Не подскажите как так сделать?

  • Евгений   18.09.2012

    Опаньки, дошел как такое сделать, всем кому надо, вот он кодик — :)

  • Евгений   19.09.2012

    Вот он код, если кому надо!)

  • Василий   16.04.2013

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

  • Игорь   16.04.2013

    Скажите, пожалуйста, а как сделать так, чтобы у каждого заголовка РУБРИКИ был свой цвет.

  • Tod   17.04.2013

    Игорь, посмотрите HTML код отображения рубрик — по идее, для каждой отдельной записи там должен быть свой class или id. Это можно использовать для задания разных цветов через style.css.

  • Валодя   01.06.2013

    Вывод названия категории без ссылок
    Как поставить разделитель если пост относится к нескольким рубрикам?

  • Tod   02.06.2013

    Валодя, в данном блоге все выводится через функцию my_thecat(), код которой приведен в конце поста. Из нее только убрать вывод ссылок надо.

  • dav.id   17.12.2014

    спасибо за код, а как их сортировать у Вас категории сортируется в алфавитном порядке как сделать например в обратном порядке?

  • Tod   17.12.2014

    dav.id, нужно смотреть параметры функции вывода категорий, возможно там есть сортировка. Я особо с этим не сталкивался.

  • Kolass   18.01.2015

    А как исключить некоторые категории при выводе?

  • Tod   19.01.2015

    Kolass, нужно дописать код, где бы осуществлялась проверка параметра $category — если попадалась бы категория, которую нужно исключить, вы бы ее исключали из отображения.

  • Stinker   15.08.2015

    Привет!
    А подскажите пожалуйста, как через эту функцию вывести категории к кастомным записям?
    Пробовал через это но не получается, видимо я что то не так делаю.
    ID);
    var_dump($categories);
    ?>
    вывожу так
    cat_name ; ?>

    Предположим у меня есть кастомная запись my_tetrad и категория для неё tetrad_tax
    помогите пожалуйста разобраться.

  • Tod   16.08.2015

    Stinker, к сожалению, код неправильно сохранился. Пример кода из поста не работает?

    <?php 
    foreach((get_the_category()) as $category) {
     echo $category->cat_name . ' '; 
    } ?>

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

  • Stinker   16.08.2015

    Нет к сожалению из поста примеры не работают…
    И то который вы написали в коменте тоже не работает…

  • Tod   16.08.2015

    Stinker, тогда нужно погуглить что-то вроде wordpress custom post type show category и похожие запросы. Может там для отображения используются какие-то специальные функции.

  • Stinker   16.08.2015

    Фух, вторые сутки провозился….кто что пишет и говорит везде по разному.
    Но сработало лишь так:

    <?php the_terms( $post->ID, 'categoria_video', '<li> <strong>Категория:</strong> ', ' ','</li>' ); ?>

    Может кому пригодится.

  • Tod   17.08.2015

    Stinker, комментарий подправил. Добавил ваш код в пост, спасибо за разъяснения по теме.

  • Сергей   18.11.2015

    Большое спасибо, очень помогли с ссылками категорий. Не знал как вывести категорию без ссылок.

  • Денис   28.11.2015

    Здравствуйте!
    Долго искал как вывести свою функцию категорий, спасла ваша статья…Но, остался еще вопрос. Как у последней категории убрать запятую? Заранее благодарю.

  • Tod   29.11.2015

    Денис, на ум приходит несколько мыслей: 1) проверять как-то в цикле последняя ли это категорий и ставить точку (как реализовать что-то не могу придумать, заменить foreach на другой цикл возможно); 2) использовать CSS для создания разделителей — там есть свойство lastclild + content (которым можно выводить разделители) 3) не выводить сразу категории через echo, а записать в текстовый параметр $cat_string, а потом после завершения цикла просто заменить последний символ в строке с «,» на «.»
    Я в разделителе данного блога использовал «;» чтобы особо не парится с этим вопросом. Но последние 2 варианта вроде бы нормальные.

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


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости