2010-06-25 113 views
6

在類別.php中,我將如何測試具有父類別的類別?WordPress的 - 獲取當前類別父母

如果父類別是A,子類別是B,並且用戶加載了類別B的URL,我希望能夠測試它是否具有父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'(或任何單個類別模板)內,您可以使用全局變量$ cat來檢索當前類別的ID。 所以你要檢查'cat_is_ancestor_of(ID,$ cat);' 使用ID通常是更好的方法,因爲重命名名稱/ slug/whatever時它們不會改變。 – 2016-03-14 16:16:57

2

首先,你必須得到當前類別的ID:

$category_id = get_query_var('cat'); 

然後你就可以做一個數據庫查詢,看看它有一個家長或不:

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

如果它有一個,$父母將包含一級以上父母的ID,自然它的值應該大於0,因此您可以檢查如下所示:

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

但是,您可以使用$ parent;

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

如果你想看到有更多高水平的父母的,你可以用父母的身份證做同樣的事情(DB查詢),甚至寫一個遞歸函數,去到頂層。正如我在源代碼中看到的,內置的get_category_parents()函數就是這樣做的。

HTH

0

退房的參考頁get_category_parents,你所要求的鏈接時,你的第二個參數設置爲TRUE

你應該做的事:

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

我也建議不要使用空格作爲分隔符,因爲你可能需要在以後修剪那些空間。