[wordpress]用term_group幫tag排序

LINEで送る
[`evernote` not found]

wordpree提供的tag很方便,幫助我們的讀者在找文章時,提供一個非常快的捷徑。
但是如果想把wordpress當做一般網站的cms,tag的使用方法就必須慎重的規劃。除此之外,tag的排序也是一大困擾。預設的情況下,wordpress會自動幫我們的tag依照名稱順序做排列。所以如果我們的tag是「256MB」、「512MB」、「1GB」、「16GB」,那麼排出來的順序會變成:

「16GB」「1GB」「256MB」「512MB」


這點會讓使用者很困擾,因為他不是依一般的順序(容量)來排列。然後不管我們再怎麼用力找,在預設的管理後台就是找不到幫tag排序的功能,而且連可以拿來運用的地方都沒有。
所以,要修正這一點,我們還必須先安裝Tag or Category term_group order這個外掛,之後再自己寫一個function給wordpress作為參考。

  1. 在function.php加入function record_sort()
    function record_sort($records, $field, $reverse=false){
        $hash = array();
        foreach($records as $record){
            $hash[$record->{$field}] = $record;
        }
    	($reverse)? krsort($hash) : ksort($hash);
    	$records = array();
    	foreach($hash as $record){
            $records []= $record;
        }
        return $records;
    }
  2. 到theme中顯示tag的頁面修改,以twentyeleven的tag.php為例,就要把原本的
    printf( __( 'Tag Archives: %s', 'twentyeleven' ), '<span>' . single_tag_title( '', false ) . '</span>' );

    改成

    $tags = record_sort(get_the_tags(), "term_group");
    if ($tags) {
    	foreach ($tags as $tag) {
    		echo '<a rel="tag" href="'.get_tag_link( $tag->term_id ).'">'.$tag->name.'</a> ';
    	}
    }

    Tag or Category term_group order讓我們可以再管理tag的地方多一個「Group」的地方可以輸入

    然後我們在以它為基準來做排列。當然,我們可以有更多其他的運用,就慢慢去挖掘嚕。