[WordPress] 取得文章分類最上層的方法

標題雖然這樣打,但其實不一定文章分類,只要是「分類」問題都可以加點變化取得。另外就是很想打「最佳解法」,但考量學海無涯,還是不要說死好了,如果有更好方法,歡迎留言給我! 哈哈

這需求是來自「我想要在某個分類下做 XXX 」或是「我不想要在某個分類下有 xxx」。

如果去 Google 答案,只會發現大部分人都只有教「找上一層」,而不是「找最上層」分類,這樣就會發生在有多層分類的狀況下或多分類的選擇下無法精準判斷現在的最上層分類(通常也是根據最上層分類來做限制)。

WordPress 僅有實作取得上層的方法 get_the_category ,這篇文章就是要用它進化一下,如下:

// 取得當前物件編號
$post_id = get_queried_object_id();
// 取出物件分類
$category = get_the_category($post_id);
// 建立容器存放所有最上層分類 Slug
$category_slug = array();
// 個別取出
foreach ($category as $key => $cat) {
    // 判斷是有有上一層的分類,如果沒有,本身就是最上層
    if ($cat->category_parent == 0) {
        $category_slug[] = $cat->slug;
    } else {
        $p_cat = 0;
        // 如果有,就用遍歷方式詢問,問到最上一層為止
        $catid = $cat->category_parent;
        while ($catid) {
            $sub_cat = get_category($cat->category_parent);
            $catid = $sub_cat->category_parent;
            // 確認沒有上一層分類後,紀錄當前分類 Slug並跳開遍歷
            if ($catid == 0) {
                $p_cat = $sub_cat->slug;
            }
        }
        // 儲存遍歷結果
        $category_slug[] = $p_cat;
    }
}

最後 $category_slug 陣列中就會存放好目前這個物件所屬的全部最上層分類 Slug ,後面判斷要做什麼就沒問題拉!

當然中間如果只是要鎖定某個子分類也不是難事,關鍵就在那個 While 迴圈的處理作法來從當前分類往上追根。

程式碼僅是片段,如不了解,請勿直接亂貼在系統中哦XD

Facebook 外掛整合


Share: