Раскрывающийся список рубрик WordPress

Category: Wordpress
Posted on: 16.12.2010 в 02:55 - 3 комментария - Visited 4698 times

Продолжаем обсуждать WP. Столкнулся сегодня с проблемой рубрик. Ну то, что нормальных и нужных операций с рубриками в WP наблюдается полнейшее отсутствие, уже никому не секрет. Существует масса плугинов, которые помогают восстановить порядок с рубриками и выводить их не только по ID, name (Default), slug, count и term_group, то есть простое ORDER BY из таблицы рубрик, но и в своём порядке, устанавливаемым чуть ли не перетаскиванием мыши.

Но это ладно, это не критично, порядок не страшно. Страшно стало то, когда меня попросили сделать так, чтобы дочерние рубрики появлялись только когда активна родительская… Оказалось, что такого или никому не надо было ранее в сети, то ли на это было забито, но готового решения я не нашёл. Понятное дело, что WP выводит рубрики простой функцией wp_list_categories(), которая может оказывается многое, но вот именно это у нас не предусмотрено. Единственное что там есть — exclude, который может удалять ненужные рубрики.

Вот у нему и зацепимся. то есть нам надо будет динамически узнавать иерархию рубрик (а кроме как через данные в БД это не сделать никак) и вывести в exclude ид рубрик, которые надо скрыть, через запятую.

Собственно это и делаем следующей вставкой прямо в «sidebar.php» (ну или в то место, где выводятся рубрики)

<!--?php //Пытаемся получить ID активной рубрики в данный момент $this_category = get_category($cat); $this_category_id = $this_category-&gt;cat_ID;&lt;br ?-->
//Если такое ID есть, то есть больше нуля
if ($this_category_id > 0) :
//Проверяем, в дочерней ли мы рубрике
$is_this_child_category = $wpdb->get_col ('SELECT parent
FROM wp_term_taxonomy
WHERE term_id='.$this_category_id);
//Если дочерняя, то база вернёт ID родительской, или 0, если это родительская рубрика.
//В зависимости от этого назначаем конкретно родительскую рубрику
if ($is_this_child_category[0] > 0) :
$parent_category = $is_this_child_category[0];
else :
$parent_category = $this_category_id;
endif;
//Теперь просто выбираем из базы данных все ID дочерних рубрик, кроме текущей
$exept_this_child_categories = $wpdb->get_col ('SELECT term_id
FROM wp_term_taxonomy
WHERE taxonomy="category"
AND parent!=0
AND parent !='.$parent_category);
else :
//А это нам нужно, чтобы скрывать все дочерние рубрики по умолчанию
$exept_this_child_categories = $wpdb->get_col ('SELECT term_id
FROM wp_term_taxonomy
WHERE taxonomy="category"
AND parent!=0');
endif;
//Теперь полученные массивы от базы превращаем в текст, каждый элемент разделяем запятой
$exclude_list = implode (',', $exept_this_child_categories);
//Ну и собственно итог этого всего – выводим рубрики, за исключением дочерних неактивных
wp_list_categories('orderby=id&hide_empty=0&title_li=&exclude='.$exclude_list);
?>

3 комментария on “Раскрывающийся список рубрик WordPress”

1
timoniks

А как убрать из меню категорию «без рубрик»?

05.05.2011 on 14:48
2
ptipti

Переименовать её или скрыть через exclude

12.05.2011 on 03:01
3
alex-lkt

Скажите, а можно данный код прописать на ява скрипте, чтобы дочерние категории открывались без перезагрузки страницы? Заранее спасибо…

23.05.2011 on 22:17

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

Включите изображения, чтобы увидеть вопрос *