2010-06-25 3 views
6

В категории.php, как бы я тестировал категорию, имеющую родительскую категорию?Wordpress - Получить текущую категорию Родители

Если родительская категория - A, а подкатегория - B, а пользователь загружает URL-адрес для категории B, я хотел бы иметь возможность проверить, имеет ли он родительский элемент A и запускает код, если это так.

Я нашел get_category_parents тег, но это, кажется, возвращает список ссылок, а не массив:

get_category_parents($cat, TRUE, ', ')); 

Даже если я получил массив, я не уверен, что функция PHP является тест против него (php noob).

Спасибо!

ответ

10

Вы можете использовать функцию cat_is_ancestor_of, чтобы проверить, является ли категория ребенок другой категории. Например, чтобы проверить, если текущая категория является дочерней категорией под названием «блог»:

cat_is_ancestor_of(get_cat_id('blog'), get_query_var('cat')) 
+0

Внутри 'category.php' (или любого отдельного шаблона категории) вы можете использовать глобальный var $ cat для извлечения идентификатора текущей категории. Итак, вы должны проверить 'cat_is_ancestor_of (ID, $ cat);' Использование идентификаторов, как правило, лучше aproach, так как они не меняются при переименовании имени/slug/whatever. –

2

Во-первых, вы должны получить текущую категорию в ID:

$category_id = get_query_var('cat'); 

Затем вы можете сделать запрос к базе данных, чтобы увидеть, что есть родитель или нет:

$parent = $wpdb->get_var("SELECT parent FROM ".$wpdb->prefix."term_taxonomy WHERE term_id = $category_id"); 

Если у него есть один, $ parent будет содержать идентификатор родителя с одним уровнем и, естественно, его значение должно быть больше 0, поэтому вы можете проверить это, как показано ниже:

<?php if ($parent > 0) : ?> 
// do something 
<?php endif; ?> 

Вы можете использовать $ parent, но вы хотите;

$parent_link = get_category_link($parent); 
$parent_name = get_cat_name($parent); 
// etc. 

Если вы хотите, чтобы видеть, что есть более высокий уровень родителя, вы можете сделать то же самое (дб запрос) с идентификатором родителя или даже написать рекурсивную функцию, которая не идти на до верхнего уровня. Как я увидел в исходном коде, встроенная функция get_category_parents() делает это так.

НТН

0

Заканчивать справочную страницу для get_category_parents, вы просите ссылки, когда вы установите второй параметр в TRUE.

Вы должны делать:

get_category_parents($cat, FALSE, ', ')); 

Я также рекомендую не использовать пробелы в качестве разделителей, так как вы, вероятно, придется урезать эти пробелы позже.