Вывод категорий для поста через функцию 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, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи (5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress (3,88 из 7, голосов - 50)
- Умный копирайт в footer.php для wordpress (5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress (4,42 из 7, голосов - 31)
- Плагин TinyMCE Advanced – wordpress текстовый редактор (6,35 из 7, голосов - 20)
- Рубрики и категории wordpress, функция wp_list_categories (6,05 из 7, голосов - 20)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Денис, проверил некоторые другие сайты, там использую функцию:
Точка в конце вставляется автоматически, да и вроде бы генерируемый код без лишних деталей.
Успехов!=)
Спасибо, помогли.
В примере где выводится список без ссылок, как можно сдалать так чтобы выводились с запятыми?
Серхио, с запятыми не сложно — вместо пробела в кавычках ставится любой символ:
$category->cat_name . ', '
…но там получается ситуация, когда после последнего слова она тоже добавляется, поэтому придется с этим повозиться: 1) вывод результата (echo) вынести за пределы цикла foreach; 2) промежуточный результат сохранять в какую-то другую переменную; 3) плюс добавить функцию удаления последнего символа:
echo echo mb_substr($new_category, 0, -1);