Вывод основной категории записи (для Yoast SEO)
Вообще в данном блоге около десятка заметок про категории, где я рассматриваю разные нюансы по их использованию. Однако иногда не получается добавить тот или иной хак в уже существующие статьи, поэтому решил сделать отдельный раздел вопросов-ответов. Не знаю насколько эта идея приживется, но сегодняшняя задача с выводом главной рубрики поста самая первая в нем. Позже создам соответствующую форму вопросов, но пока буду находить их в комментариях (если тема требует более тщательного пояснения).
Когда вы задаете категории для постов блога/сайта, то можете выбрать сразу парочку значений, разместив тем самым публикацию в нескольких разделах. При этом все они имеют одинаковый «вес», то есть никак между собой не различаются. Единственное, что вы можете, это отобразить первую (по названию) рубрику через функцию get_the_category:
<?php $one_category = get_the_category(); echo $one_category[0]->cat_name; ?> |
Однако популярный среди оптимизаторов плагин Yoast SEO внедрил такую интересную фишку как главная категория (primary category). Вы можете определить какая из всех является основной, то есть наиболее важной.
Это решение повлияет на:
- URL адрес статьи;
- отображаемое значение в пути для хлебных крошек от Yoast.
Плагин автоматически определяет одну из рубрик как основную, однако кликнув по ссылке «Сделать первичным» вы можете все изменить. Это, кстати, полезно, если вам нужно задать конкретный URL для статьи, а не полагаться на выбор системы.
Как вывести главную категорию поста
1. Первый вариант найден на Github — данную конструкцию нужно разместить непосредственно в том месте шаблона, где вы хотите отобразить результат функции, например, в single.php и т.п.
<?php // SHOW YOAST PRIMARY CATEGORY, OR FIRST CATEGORY $category = get_the_category(); $useCatLink = true; // If post has a category assigned. if ($category){ $category_display = ''; $category_link = ''; if ( class_exists('WPSEO_Primary_Term') ) { // Show the post's 'Primary' category, if this Yoast feature is available, & one is set $wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id() ); $wpseo_primary_term = $wpseo_primary_term->get_primary_term(); $term = get_term( $wpseo_primary_term ); if (is_wp_error($term)) { // Default to first category (not Yoast) if an error is returned $category_display = $category[0]->name; $category_link = get_category_link( $category[0]->term_id ); } else { // Yoast Primary category $category_display = $term->name; $category_link = get_category_link( $term->term_id ); } } else { // Default, display the first category in WP's list of assigned categories $category_display = $category[0]->name; $category_link = get_category_link( $category[0]->term_id ); } // Display category if ( !empty($category_display) ){ if ( $useCatLink == true && !empty($category_link) ){ echo '<span class="post-category">'; echo '<a href="'.$category_link.'">'.htmlspecialchars($category_display).'</a>'; echo '</span>'; } else { echo '<span class="post-category">'.htmlspecialchars($category_display).'</span>'; } } } ?> |
В принципе, если понимаете английский, то комментарии в коде помогут понять какие действия там выполняются.
2. Второй метод чуть отличается по принципу работы, он найден тут. Размещаете решение в файл functions.php:
function get_post_primary_category($post_id, $term='category', $return_all_categories=false){ $return = array(); if (class_exists('WPSEO_Primary_Term')){ // Show Primary category by Yoast if it is enabled & set $wpseo_primary_term = new WPSEO_Primary_Term( $term, $post_id ); $primary_term = get_term($wpseo_primary_term->get_primary_term()); if (!is_wp_error($primary_term)){ $return['primary_category'] = $primary_term; } } if (empty($return['primary_category']) || $return_all_categories){ $categories_list = get_the_terms($post_id, $term); if (empty($return['primary_category']) && !empty($categories_list)){ $return['primary_category'] = $categories_list[0]; //get the first category } if ($return_all_categories){ $return['all_categories'] = array(); if (!empty($categories_list)){ foreach($categories_list as &$category){ $return['all_categories'][] = $category->term_id; } } } } return $return; } |
В коде вы, по сути, изначально определяете функцию, с которой дальше будете работать. Здесь есть параметры, указываемые при ее вызове:
- $post_id — ID поста, для которого считывается главная категория;
- $term — базовую таксономию «category» можете заменить ее на любую другую, например «post_tag»;
- $return_all_categories — по умолчанию установлено в false (ложное), но если нужно возвращать кроме основной рубрики список остальных, то ставите true. Это пригодится в том случае, когда вы хотите расширить функциональность хака и добавить туда, например, проверку родительского значения, и если там будет «video», то показывать соответствующую иконку.
Для вывода/обработки результатов используете:
<?php $post_categories = get_post_primary_category($post->ID, 'category'); $primary_category = $post_categories['primary_category']; echo $primary_category->name; ?> |
Переменная $primary_category содержит объект WP_Term:
… из которого нам нужно вывести название name (через echo);
Итого. Очевидно, что данные решения подойдут только для тех сайтов, где установлен Yoast SEO, в остальных случаях они бесполезны. Надеюсь, вы уже из числа тех, кто присоединился к поклонникам модуля, ведь он реально топовый.
комментариев 6 к статье “Вывод основной категории записи (для Yoast SEO)”
Блог 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)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Тю я реально думал, что это функция самой Вордпресс.. а тут вот оно как оказывается)) сто лет на Yoast поэтому и не обратил внимания
MaDMaxx, аналогично сразу не понял чья это функция.
Тоже думал, что это функция Вордпресса, а я то думаю, почему моя тема (SmartMag) не хочет подцеплять никак основной раздел, а выводит на главной и в разделах в анонсе статьи на картинке название и ссылку на рандомный раздел (то есть на тот который она сама посчитает нужным), а не указанный мной вручную при редактировании статьи основной раздел.
Скажите я правильно понимаю, что эти хаки как раз предназначены для того, чтобы выводились в нужном месте анонса статьи именно название раздела с ссылкой на основной раздел? Я просто в PHP не не очень разбираюсь увы..
Alex, все правильно, хак выводит главную категорию в конкретном месте шаблона.
Отлично! Подскажите, а как сделать ее вывод ссылкой?
Макс, в первом коде ссылка, вроде как, есть. А во втором методе нужно добавить еще одну строчку в код вывода, где использовать функцию get_category_link и в нее подставляете ID найденной основнокй категории.