К основному контенту

Категории

В этом посте я бы хотел рассказать о некоторых нюансах работы с категориями в WordPress. Затрону следующие темы:
  • Как узнать категорию поста
  • Как узнать текущую категорию
  • Как создать "хлебные крошки" (breadcrumbs) по категориям
  • Как вывести иерархию категорий

Как узнать категорию поста

Столкнулся с проблемой: нужно было вывести имя категории поста рядом с его заголовком. Конечно, первым делом в Google с вопросом: "Как быть?". Прочитав несколько статей стало понятно, что все намного проще, чем кажется. Все делалось буквально в 2 строки кода:

$post_category = get_the_category();
$post_category = $post_category[0];

Таким образом, в переменной $post_category будут все данные о категории, к которой принадлежит пост.

Как узнать текущую категорию

У этой темы так же есть предыстория, но я расскажу только то, из-за чего возник такой вопрос. Самая банальная ситуация: Открываете страницу категории у которой есть вложенные категории(ну или просто категорию с постами). Т.е. должно отобразиться название категории и все ее посты. Понятно, что get_the_category() отработает как надо, но! Проблема появляется. когда есть вложенные категории. В моем случае постоянно отображалось имя последней категории, в которой есть посты. Это было совсем не нужно. Вся проблема решается просто - в одну строчку кода:

$cat = get_queried_object();

В переменной $cat будет находиться объект категории. Конечно же, если это страница категорий. Проверить это можно при помощи оператора is_category().

Как создать "хлебные крошки" (breadcrumbs) по категориям

С этим пришлось повозиться, но решение получилось очень красивым на мой взгляд. На форумах посмотрел 4, может быть 5 примеров. Каждый имел что-то свое, но ни один не дал нужного мне результата. Связано это было как раз с наличием вложенных категорий. Итак, сначала код, потом пояснения:

$post_category = get_the_category();
$post_category = $post_category[0];
$res = get_category_parents($post_category->term_id, true, ' » ');
$res = preg_replace('/\s»\s$/i', '', $res);

Первые 2 строки - узнаем категорию поста (как было описано выше). Далее, нужно вытянуть всю иерархию. Это сделает за нас оператор get_category_parents. Оператор выберет цепочку категорий по иерархии вверх от текущей. Первым параметром идет идентификатор текущей категории - она будет последней в списке и от нее будут выбираться родительские категории. Второй параметр TRUE - это значит, что для каждой категории будет создана ссылка, нажав на которую, можно перейти к списку постов выбранной категории. Третий параметр - это разделитель. В моем случае это символ "»". Наконец, в последней строке мы убираем последний разделитель, поскольку некрасиво с ним. В итоге, в переменной $res будет находиться HTML код с нашими "хлебными крошками".
Результат выглядит примерно так:

Уроки » Wordpress » Создание темы


Как вывести иерархию категорий

Иногда требуется вывести на странице иерархию категорий. Это так же не сложно.
Допустим, мы хотим показать иерархию вложенных категорий для нашей открытой категории. Процесс следующий:
  1. Узнаем, какая категория у нас открыта.
  2. Заполним параметры
  3. Вывод списка

Узнаем, какая категория у нас открыта.

Этот процесс был описан выше. Я только добавлю код для полноты картины этой темы:

$current_category = get_queried_object();

Заполним параметры

Это основное действие. От параметров зависит, что именно мы будем показывать:

$args = array(
 'show_option_all' => '',
 'orderby' => 'name',
 'order' => 'ASC',
 'style' => 'list',
 'show_count' => 1,
 'hide_empty' => 1,
 'use_desc_for_title' => 1,
 'child_of' => $current_category->term_id,
 'feed' => '',
 'feed_type' => '',
 'feed_image' => '',
 'exclude' => '',
 'exclude_tree' => '',
 'include' => '',
 'hierarchical' => 1,
 'title_li' => '<h1>'.$current_category->name.'</h1>',
 'show_option_none' => __('No categories'),
 'number' => null,
 'echo' => 1,
 'depth' => 0,
 'current_category' => 0,
 'pad_counts' => 0,
 'taxonomy' => 'category',
 'walker' => null
);

Много текста :)
Остановлюсь на основных параметрах:
show_count - нужно ли показывать количество постов в категории
hide_empty - нужно ли отображать категории без постов
child_of - указывается идентификатор категории, чью иерархию нужно выбирать
hierarchial - выбор иерархии
title_li - указывается текст корневого элемента
echo - нужно ли сразу выводить список или оставить в переменной
depth - глубина вложенного списка. Если стоит 0, тогда полная вложенность
walker - пользовательская функция для обработки результата выборки (основные сведения о классах Walker и класс Walker_Category)

Вывод списка

Этот процесс довольно прост - всего одна строка:

wp_list_categories($args);

В результате будет выведен список категорий в виде иерархии с указанием количества постов в каждой категории.

Комментарии

Популярные сообщения из этого блога

Прямые ссылки на файлы Google диска

В предыдущей статье я рассказал, как подключить свой JavaScript файл к блогу BLOGSPOT . Но для того, что бы их подключить нужны прямые ссылки на файл, а Google диск при предоставлении общего доступа к файлу выдает ссылку на предварительный просмотр, которая никак напрямую не ссылается на файл. Для Google диска прямая ссылка на файл - это ссылка на скачивание. Ниже описаны два способа создания ссылки на скачивание на примере файла prism.js.

События для ведения таблиц

Как и всегда, в пылу проекта внезапно родилась Z табличка. Главный нюанс был в том, что она должна была хранить пароли для авторизации на стороннем сервере. Естественно, никто не хотел хранить пароли в открытом виде, а двустороннее шифрование SAP не умеет без сторонних пакетов и надстроек. Далее, все как обычно - придумали алгоритм, сделали табличку. Дело осталось за малым - нужно шифровать пароли, которые вводит пользователь. Делать отдельную программу нет смысла, поскольку ее функционал мало чем будет отличаться от сгенерированного. Вот здесь на помощь приходят события! С их помощью можно, наверное, все. По крайней мере, я не нашел чего-либо, что нельзя сделать с данными через события.

OOP ALV GRID с HTML шапкой

В этой статье хочу постараться подробно описать и привести пример, как можно создать ALV отчет с таблицей на весь экран и с HTML шапкой вверху. Я не буду описывать начальный этап, где пишется селекционный экран или делается выборка данных. Будем считать, что основа у нас есть и нам нужно просто вывести данные. Главной изюминкой является то, что нужно вывести ALV GRID на экран без использования каких-либо дополнительных элементов на экране. Step-By-Step Шаг 1. Создание окна Создаем самое простое окно с номером 100. На него не нужно кидать никаких контейнеров. Оно нам нужно только для модулей PAI и PBO и вывода на него ALV GRID.