Вывод категорий для поста через функцию 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-ти бесплатных качественных шаблонов.
комментариев 35 к статье “Вывод категорий для поста через функцию get_the_category”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Корисні поради по вибору плагінів для лендінгів на WordPress
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (247)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи
(5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress
(3,87 из 7, голосов - 55)
- Умный копирайт в footer.php для wordpress
(5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений
(5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress
(4,42 из 7, голосов - 31)
- Как откатить Вордпресс и модули на предыдущие версии (вручную и с плагинами)
(3,82 из 7, голосов - 34)
- Плагин TinyMCE Advanced – wordpress текстовый редактор
(6,35 из 7, голосов - 20)

- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Почему пользователи выбирают смартфоны Apple iPhone: основные преимущества и факторы популярности
- Выделенный сервер: полный гид по аренде, выбору и администрированию
- Оптимизируем VPS под WooCommerce
- Найбільш очікувані новинки MMORPG ігор в 2025 році
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
как всегда супер! Продолжай в том же духе!
Подскажите как мне в посте, вернее внизу его сделать так, чтобы люди могли переходит к следующему и прошлому посту именно этой категории?
стандартный способ позволяет переход только по времени публикации статей :-(
Siera, нужно искать плагин, уверен есть что-то для решения этой задачи. Я даже вроде бы что-то похожее встречал, но, к сожалению, название не вспомню.
Не подскажите ли, можно сделать вывод конкретной рубрики-категории списком(только заголовок) по алфавиту, может есть какие-то плагины или только в ручную?
Tod
Я пересмотрела уже n° количество плюгинов и пока ничего не нашла :-(
Если вдруг попадётся, сообщите пожалуйста
Офигенная статья, как же я долго это искал!
Спасибо!
Интересный пост, спасибо!
Не подскажите, есть ли возможность исключить некоторые категории поста при выводе их какой-либо из этих функций? Если конкретизировать, то есть некоторые «технические» категории, которые используются для построения структуры сайта и под постом выводить их не нужно, т.к. они бесполезны для пользователя.
Николай, можно добавить проверку в код функции мол если категория=»технической», то не выводить или как-то так. Также я бы глянул функции считывания категорий get_the_category может там есть за что «зацепиться».
Поскольку я чайник, то не забиваю голову всеми этими проблемами — для вывода категорий испоьзую
плагин Most Popular Posts с соответствующими настройками — там имеется возможность вывода наи более популярных из выбранных категорий..
А Вы случаем не знаете, как сделать так, чтобы когда заходишь в категорию блога, а там посты которые находятся и в других категориях, то выводился категория «ГЛАВНАЯ», та в которой лежит основная статья.
К примеру зашел я в категорию «Блоггинг», в которой есть пост, который и в категории «блоггинг» и в категории «seo» и когда заходишь в «БЛОГГИНГ» отображалась только эта категория. Уже все методы перепробовал, во всех случаях отображается так: Блоггинг, SEO. А надо только Блоггинг.
Не подскажите как так сделать?
Опаньки, дошел как такое сделать, всем кому надо, вот он кодик — :)
Вот он код, если кому надо!)
Спасиб, добр человек. Низкий те поклон, а то уже затр…лся искать как из категории ссылку убрать…
Скажите, пожалуйста, а как сделать так, чтобы у каждого заголовка РУБРИКИ был свой цвет.
Игорь, посмотрите HTML код отображения рубрик — по идее, для каждой отдельной записи там должен быть свой class или id. Это можно использовать для задания разных цветов через style.css.
Вывод названия категории без ссылок
Как поставить разделитель если пост относится к нескольким рубрикам?
Валодя, в данном блоге все выводится через функцию my_thecat(), код которой приведен в конце поста. Из нее только убрать вывод ссылок надо.
спасибо за код, а как их сортировать у Вас категории сортируется в алфавитном порядке как сделать например в обратном порядке?
dav.id, нужно смотреть параметры функции вывода категорий, возможно там есть сортировка. Я особо с этим не сталкивался.
А как исключить некоторые категории при выводе?
Kolass, нужно дописать код, где бы осуществлялась проверка параметра $category — если попадалась бы категория, которую нужно исключить, вы бы ее исключали из отображения.
Привет!
А подскажите пожалуйста, как через эту функцию вывести категории к кастомным записям?
Пробовал через это но не получается, видимо я что то не так делаю.
ID);
var_dump($categories);
?>
вывожу так
cat_name ; ?>
Предположим у меня есть кастомная запись my_tetrad и категория для неё tetrad_tax
помогите пожалуйста разобраться.
Stinker, к сожалению, код неправильно сохранился. Пример кода из поста не работает?
По идее, должны выводиться категории. Хотя, если честно для кастомных типов записей не пробовал. Нужно гуглить.
Нет к сожалению из поста примеры не работают…
И то который вы написали в коменте тоже не работает…
Stinker, тогда нужно погуглить что-то вроде wordpress custom post type show category и похожие запросы. Может там для отображения используются какие-то специальные функции.
Фух, вторые сутки провозился….кто что пишет и говорит везде по разному.
Но сработало лишь так:
Может кому пригодится.
Stinker, комментарий подправил. Добавил ваш код в пост, спасибо за разъяснения по теме.
Большое спасибо, очень помогли с ссылками категорий. Не знал как вывести категорию без ссылок.
Здравствуйте!
Долго искал как вывести свою функцию категорий, спасла ваша статья…Но, остался еще вопрос. Как у последней категории убрать запятую? Заранее благодарю.
Денис, на ум приходит несколько мыслей: 1) проверять как-то в цикле последняя ли это категорий и ставить точку (как реализовать что-то не могу придумать, заменить foreach на другой цикл возможно); 2) использовать CSS для создания разделителей — там есть свойство lastclild + content (которым можно выводить разделители) 3) не выводить сразу категории через echo, а записать в текстовый параметр $cat_string, а потом после завершения цикла просто заменить последний символ в строке с «,» на «.»
Я в разделителе данного блога использовал «;» чтобы особо не парится с этим вопросом. Но последние 2 варианта вроде бы нормальные.