Когда вы задаете категории для постов блога/сайта, то можете выбрать сразу парочку значений, разместив тем самым публикацию в нескольких разделах. При этом все они имеют одинаковый «вес», то есть никак между собой не различаются. Единственное, что вы можете, это отобразить первую (по названию) рубрику через функцию get_the_category:
- <?php $one_category = get_the_category(); echo $one_category[0]->cat_name; ?>
Это решение повлияет на:
Плагин автоматически определяет одну из рубрик как основную, однако кликнув по ссылке «Сделать первичным» вы можете все изменить. Это, кстати, полезно, если вам нужно задать конкретный 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; ?>
… из которого нам нужно вывести название name (через echo);
Итого. Очевидно, что данные решения подойдут только для тех сайтов, где установлен Yoast SEO, в остальных случаях они бесполезны. Надеюсь, вы уже из числа тех, кто присоединился к поклонникам модуля, ведь он реально топовый.
Давно искала подобное, спасибо очень интересно!