# [wordpress]用term_group幫tag排序

- URL: https://justfly.idv.tw/wordpress%e5%b9%abtag%e6%8e%92%e5%ba%8f/
- 日期: 2012-03-20
- 分類: WEB&amp;RIA
- 標籤: error, free, php, WordPress, 外掛

wordpree提供的tag很方便，幫助我們的讀者在找文章時，提供一個非常快的捷徑。

但是如果想把wordpress當做一般網站的cms，tag的使用方法就必須慎重的規劃。除此之外，tag的排序也是一大困擾。預設的情況下，wordpress會自動幫我們的tag依照名稱順序做排列。所以如果我們的tag是「256MB」、「512MB」、「1GB」、「16GB」，那麼排出來的順序會變成：

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

這點會讓使用者很困擾，因為他不是依一般的順序（容量）來排列。然後不管我們再怎麼用力找，在預設的管理後台就是找不到幫tag排序的功能，而且連可以拿來運用的地方都沒有。

所以，要[修正這一點](https://justfly.idv.tw/2012/03/20/Just_1132.html)，我們還必須先安裝[Tag or Category term_group order](http://wordpress.org/extend/plugins/tag-or-category-term-group-order/)這個外掛，之後再自己寫一個function給wordpress作為參考。

- 在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;
}
```

- 到theme中顯示tag的頁面修改，以twentyeleven的tag.php為例，就要把原本的

```
printf( __( 'Tag Archives: %s', 'twentyeleven' ), '' . single_tag_title( '', false ) . '' );
```

改成

```
$tags = record_sort(get_the_tags(), "term_group");
if ($tags) {
	foreach ($tags as $tag) {
		echo ''.$tag->name.' ';
	}
}
```

[Tag or Category term_group order](http://wordpress.org/extend/plugins/tag-or-category-term-group-order/)讓我們可以再管理tag的地方多一個「Group」的地方可以輸入

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