Get the category


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

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


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

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

Get the category

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

Функция get_the_category


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

wordpressinside.ru

Получает массив данных о категориях относящихся к указанному посту.

Функцию можно использовать за пределами Цикла WordPress, если указать ID поста.

 get_the_category() 

Возвращает

массив объектов с данными о каждой категории, которая относится к посту. Отдельный объект для каждой категории.

Использование

 <?php get_the_category( $id ) ?> 
 $id(число) ID поста, категории которого нужно получить. По умолчанию: $post->ID 

Примеры

#1 Выведем картинку для каждой категории

Этот пример показывает как можно создать картинку к каждой категории, в атрибуте alt будет указано название категории. Картинки должны иметь названия такие же как и ID категорий (12.jpg) и лежать в корне сайта в папке images. Код нужно использовать внутри Цикла:


 foreach( get_the_category() as $category ){   echo '<img src="http://example.com/images/' . $category->cat_ID . '.jpg" alt="' . $category->cat_name . '" />';  }  

#2 Название первой категории

Показать название только первой категории (если пост относится к нескольким категориям):

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

#3 Категории поста за пределами цикла

Пример, как получить категории поста за пределами Цикла WordPress:

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

Данные, которые содержит каждый объект категории:

 $cat = get_the_category($post->ID);  // ID категории $cat->cat_ID  // Название категории $cat->cat_name   // Альтернативное название категории $cat->category_nicename  // Описание категории (задается на странице редактирования категории) $cat->category_description  // ID родительской категории $cat->category_parent   // Количество записей в категории $cat->category_count 

Чтобы получить ID текущей категории

 if (is_category()) {  echo get_queried_object()->term_id; } 

Получаем рубрики произвольных постов используя get_the_terms()


 $cur_terms = get_the_terms( $post->ID, 'custom_name' ); foreach( $cur_terms as $cur_term ){  echo '<a href="'. get_term_link( (int)$cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>,' } 

Вывести категорию ссылкой

 <?php the_category(', '); ?> 

Как всегда, кладезь полезной информации wp-kama.ru.

denis-creative.com

function get_the_category_list( $separator = '', $parents = '', $post_id = false ) { 	global $wp_rewrite; 	if ( ! is_object_in_taxonomy( get_post_type( $post_id ), 'category' ) ) { 		/** This filter is documented in wp-includes/category-template.php */ 		return apply_filters( 'the_category', '', $separator, $parents ); 	}  	/** 	 * Filters the categories before building the category list. 	 * 	 * @since 4.4.0 	 * 	 * @param array $categories An array of the post's categories. 	 * @param int|bool $post_id ID of the post we're retrieving categories for.  

en `false`, we assume the * current post in the loop. */ $categories = apply_filters( 'the_category_list', get_the_category( $post_id ), $post_id ); if ( empty( $categories ) ) { /** This filter is documented in wp-includes/category-template.php */ return apply_filters( 'the_category', __( 'Uncategorized' ), $separator, $parents ); } $rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"'; $thelist = ''; if ( '' == $separator ) { $thelist .= '<ul class="post-categories">'; foreach ( $categories as $category ) { $thelist .= "nt<li>"; switch ( strtolower( $parents ) ) { case 'multiple': if ( $category->parent ) $thelist .= get_category_parents( $category->parent, true, $separator ); $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; break; case 'single': $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" ' . $rel . '>'; if ( $category->parent ) $thelist .= get_category_parents( $category->parent, false, $separator ); $thelist .= $category->name.'</a></li>'; break; case '': default: $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) .

quot; ' . $rel . '>' . $category->name.'</a></li>'; } } $thelist .= '</ul>'; } else { $i = 0; foreach ( $categories as $category ) { if ( 0 < $i ) $thelist .= $separator; switch ( strtolower( $parents ) ) { case 'multiple': if ( $category->parent ) $thelist .= get_category_parents( $category->parent, true, $separator ); $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" ' . $rel . '>' . $category->name.'</a>'; break; case 'single': $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" ' . $rel . '>'; if ( $category->parent ) $thelist .= get_category_parents( $category->parent, false, $separator ); $thelist .= "$category->name</a>"; break; case '': default: $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" ' . $rel . '>' . $category->name.'</a>'; } ++$i; } } /** * Filters the category or list of categories. * * @since 1.2.0 * * @param string $thelist List of categories for the current post. * @param string $separator Separator used between the categories. * @param string $parents How to display the category parents. Accepts 'multiple', * 'single', or empty. */ return apply_filters( 'the_category', $thelist, $separator, $parents ); }

queryposts.com

 

function widget($args, $instance) { extract($args, EXTR_SKIP); $category_id = empty($instance['category_id']) ? 1 : $instance['category_id']; $use_cat_title = empty($instance['use_cat_title']) ? 0 : $instance['use_cat_title']; $hide_empty_cats = empty($instance['hide_empty_cats']) ? 0 : $instance['hide_empty_cats']; $show_post_count = empty($instance['show_post_count']) ? 0 : $instance['show_post_count']; $title_link = empty($instance['title_link']) ? 0 : $instance['title_link']; $excluded = empty($instance['excluded']) ? '' : $instance['excluded']; $sub_subs = empty($instance['sub_subs']) ? 0 : $instance['sub_subs']; $dropdown = empty($instance['dropdown']) ? 0 : $instance['dropdown']; $post_is_parent = empty($instance['post_is_parent']) ? 0 : $instance['post_is_parent']; $dropdown_text = empty($instance['dropdown_text']) ? __('Select Sub-category', 'sub-categories-widget') : $instance['dropdown_text']; $list_order = empty($instance['list_order']) ? 0 : $instanc.

;id_base); } $parent = $sub_subs == 1 ? 'child_of' : 'parent'; $order = $list_order == 1 ? 'DESC' : 'ASC'; $no_sub_text = '<p>' . __('No sub-categories', 'sub-categories-widget') . '</p>'; $subs = wp_list_categories(array($parent => $category_id, 'hide_empty' => $hide_empty_cats, 'show_count' => $show_post_count, 'exclude' => $excluded, 'title_li' => null, 'show_option_none' => '', 'echo' => 0, 'orderby' => 'ID', 'order' => $order)); if ($post_is_parent == 0 || $post_is_parent == 1 && !empty($subs)) { echo $before_widget; if ($title_link) { echo $before_title . '<a href="' . get_category_link($category_id) . '">' . $title . '</a>' . $after_title; } else { echo $before_title . $title . $after_title; } if ($dropdown == 0) { if (!empty($subs)) { echo '<ul>' . $subs . '</ul>'; } else { echo $no_sub_text; } } else { $subs = wp_dropdown_categories(array('id' => 'sub-cat-' . $this->number, 'show_option_none' => $dropdown_text, $parent => $category_id, 'hide_empty' => $hide_empty_cats, 'show_count' => $show_post_count, 'exclude' => $excluded, 'hide_if_empty' => true, 'echo' => false, 'orderby' => 'ID', 'order' => $order)); if (!empty($subs)) { echo $subs; echo '<script type="text/javascript"> /* <![CDATA[ */ var dropdown' . $this->number . ' = document.getElementById("sub-cat-' . $this->number . '"); function onSubCatChange() { if (dropdown' . $this->number . '.options[dropdown' . $this->number . '.selectedIndex].value > 0) { location.href = "' . get_option('home') . '?cat="+dropdown' . $this->number . '.options[dropdown' . $this->number . '.selectedIndex].value; } } dropdown' . $this->number . '.onchange = onSubCatChange; /* ]]> */ </script>'; } else { echo $no_sub_text; } } echo $after_widget; } }

hotexamples.com

Параметры

$id
(целое) ID поста, если функция используется в цикле, этот параметр необязателен.

Возвращаемые значения

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

В скобках указаны эквивалентные варианты.

  • term_ID (cat_ID) — ID рубрики,
  • name (cat_name) — название рубрики,
  • slug (category_nicename) — ярлык категории,
  • description (category_description) — описание категории,
  • parent (category_parent) — ID родительской категории,
  • count (category_count) — количество записей (постов) в рубрике,
  • term_group — значение колонки term_group в базе данных,
  • term_taxonomy_id — ID таксономии, у рубрик он равен 1,
  • taxonomy — название таксономии, для рубрик — category,
  • object_id — ID объекта;

Примеры

Выводим список рубрик со ссылками

Переменной $post_id задайте своё значение, либо просто удалите её оттуда, если используете этот код внутри цикла.

Для получения URL рубрики используем функцию get_category_link().

Выводим список рубрик к текущему посту через запятую

Функция trim() нужна для удаления каких-либо символов по краям строки, в данном случае запятую с пробелом.

Указываем ссылку только на первую рубрику, в которой находится пост

К каждому объекту массива $categories можно обратиться по порядковому номеру, нумерация начинается с нуля.

misha.blog


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.