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

Category: Wordpress
Posted on: 16.12.2010 в 02:55 - 3 комментария - Visited 3763 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->cat_ID;
//Если такое 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 в 14:48
2
ptipti

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

12.05.2011 в 03:01
3
alex-lkt

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

23.05.2011 в 22:17

Leave a comment

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