更新日期:2014-09-11

在 wordpress 點擊分類的連結時,通常是呼叫 category.php 這支程式,然後就會顯示該分類文章、或該分類底下的子分類所有文章(不管幾層一起顯示)。這樣子的邏輯挺亂的,所以我們希望是點擊父分類時,顯示的是它的子分類連結、點子分類才顯示相關文章。

 
注意:以下語法,是在分類頁面下,通常是 category.php。首先我們要先知道目前所在分類的id,我們可以用 $cat 這個全域的變數。

先取的目前分類下的子分類語法

[php]
$args = array(
‘type’ => ‘post’,
‘child_of’ => 0,
‘parent’ => $cat,
‘orderby’ => ‘name’,
‘order’ => ‘ASC’,
‘hide_empty’ => 0,
‘taxonomy’ => ‘category’,
‘pad_counts’ => false
);
$categories = get_categories($args);
[/php]

 
這裡 $categories 會得到子分類以 object 型態的內容如下:

$category->term_id
$category->name
$category->slug
$category->term_group
$category->term_taxonomy_id
$category->taxonomy
$category->description
$category->parent
$category->count
$category->cat_ID
$category->category_count
$category->category_description
$category->cat_name
$category->category_nicename
$category->category_parent

 

我們可以自行組合出子分類清單

[php]
foreach($categories as $category) {
echo ‘<p>Category: <a href="’.get_category_link( $category->term_id ).’">’.$category->name.'</a> </p> ‘;
echo ‘<p>Description:’.$category->description.'</p>’;
}
[/php]

 

若是想要列出目前分類下的文章清單

下面這一段可以加在原本文章迴圈『 while ( have_posts() ) : the_post(); 』的上方
[php]
wp_reset_query();
$post_args = array(
‘category__in’ => array($cat),
‘showposts’ => 999,
);
query_posts($post_args);
[/php]
這樣子就會改變原來的 query 內容,真正只顯示屬於該分類的文章了。