如何用 get_categories($args) 取的目前分類的子分類?

更新日期:2014-09-11

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

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

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

$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);

 
這裡 $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

 

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

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>';
} 

 

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

下面這一段可以加在原本文章迴圈『 while ( have_posts() ) : the_post(); 』的上方

wp_reset_query();
$post_args = array(
  'category__in' => array($cat),
  'showposts' => 999,
);
query_posts($post_args);

這樣子就會改變原來的 query 內容,真正只顯示屬於該分類的文章了。

發佈留言