понедельник, 16 марта 2015 г.

Вывод названия ближайшей родительской категории в Wordpress

Wordpress - одна из самых популярных CMS, которая идеально подходит для всех видов сайтов. Однако, чтобы реализовать некоторые свои прихоти, приходится иногда придумывать и дописывать некоторые строчки кода, способные решить ту или иную задачу. И чтобы в будущем не думать над проблемой повторно, эти строчки нужно хорошенько запомнить, ну или записать. Поэтому я и пишу этот пост, так как сегодня сделал для себя открытие, как вывести название ближайшей родительской категории (рубрики) в CMS Wordpress.

Был у меня на странице вывода постов определенной категории вот такой код, который выводил название только той категории, которая была выбрана для просмотра. Когда просматриваешь родительскую или категорию верхнего уровня, то это вполне нормальное отображение, да, в принципе, даже для любой дочерней категории это тоже может выглядеть  нормально. Но, в моем случае была дочерняя категория и дочерняя для дочерней, причем последняя продолжала смысловую нагрузку категории, идущей перед ней, например, "Загрузки" - "Программы" - "для ПК". И когда выбиралась категория "для ПК" то в названии страницы так и писало просто "для ПК", что не имеет ни нормального смысла и красивого отображения. Поэтому появилась задача вывода названия родительской категорий, причем только ближайшей.

Для вывода всех родительских категорий идеально подошла бы функция get_category_parents(). Она хорошо справляется с задачей вывода иерархии и является самым быстрым и надежным решением для тех. кто этого ищет. Но у мне надо было лишь вывести ближайшую категорию, при этом, учитывая, что для отображения разных категорий используется одна страница, мне надо было сделать так, чтобы для "ближайшей родительской" не отображалась ее родительская. И вот, что у меня получилось:
parent; // выделяем ID ближайшей родительской категории
if ($cat_parent == 16) { // дальше идет условие, название которой категории не стоит выводить
printf( __( '%s', 'themater' ), single_cat_title( '', false ) ); }
else {
echo get_the_category_by_ID( $cat_parent).' '; // эта строчка выводит название ближайшей родительской категории, ID которой не равно 16, в моем случае именно 16 номер ID самой высшей категории в этой иерархии, которое мне не надо выводить

printf( __( '%s', 'themater' ), single_cat_title( '', false ) ); }
?>

Строчки printf( __( '<span>%s</span>', 'themater' ), single_cat_title( '', false ) ); - это стандартный код, который был задействован на странице, поэтому не стоит обращать на него сильного внимания, хотя именно он выводит название текущей категории.

Вот такое простое решение!

UPD:

Учитывая, что страница category.php используется для всех категории, то нужно сделать условия, когда у категории нет родительской категории. С учетом этого код, как по быстрому представляю себе его я, должен выглядеть вот так:

parent;
	if (($cat_parent == 16) || ($cat_parent == 0)) { printf( __( '%s', 'themater' ), single_cat_title( '', false ) ); }
	else { echo get_the_category_by_ID( $cat_parent).' '; 
	      printf( __( '%s', 'themater' ), single_cat_title( '', false ) ); }
?>
Вот так все категории должны работать отлично!

Комментариев нет:

Отправить комментарий