the_taxonomiesで苦戦していたら、get_the_term_listというのがあった2012/2/25

WordPressのカスタム投稿タイプで使うカスタム分類、記事に紐づいたカスタム分類を表示した時に難渋しておりました。というのもthe_taxonomiesで全部のカスタム分類を取得するとなんか辺。

the_taxonomies();

ってやると「地域:日本と東京 企業:メーカー,広告,印刷」みたいに表示されちゃうのです。これ地域は親子関係があって、企業は親子関係がないものの並び、ってこの表記見てもわからないんですが、Localizationで汎用性高くしておくの難しいですからしょうがないですよね。

str_replaceするのか、言語ファイル書き換えるのか、さてどうしたものかと思っていたのですが(WordPressの中身をいじるのは基本的にアップデートして上書きされてオジャンの元になるから嫌い)、get_the_term_listというのがありました!

<dl>
	<dt>地域</dt>
	<dd><?php echo get_the_term_list($post->ID, 'region-cat','','、');  ?></dd>
	<dt>企業</dt>
	<dd><?php echo get_the_term_list($post->ID, 'company-cat','','、');  ?></dd>
</dl>

みたいにしてやって区切りも「、」にしてやれば日本仕様でも判りやすい。後は、日本と東京の親子関係を明示するにはもう少しゴニョゴニョが必要そうですが、親の方が先に表示されてれば問題ないでしょう。

というわけで、get_the_term_listはしっかり覚えて帰ろうと思ったのでした。

追記:
ただカスタム分類の並び替えのプラグインを使っているのですが、get_the_term_list()で並び順がその通りに反映されず、気持ち悪いなと。というところで、困っていたのですが、海の向こう側はスゴイ!解決方法が明示されてました。

Change order of Custom Taxonomy List – WordPress – Stack Exchange

function set_the_terms_in_order ( $terms, $id, $taxonomy ) {
    $terms = wp_cache_get( $id, "{$taxonomy}_relationships_sorted" );
    if ( false === $terms ) {
        $terms = wp_get_object_terms( $id, $taxonomy, array( 'orderby' => 'term_order' ) );
        wp_cache_add($id, $terms, $taxonomy . '_relationships_sorted');
    }
    return $terms;
}
add_filter( 'get_the_terms', 'set_the_terms_in_order' , 10, 4 );

function do_the_terms_in_order () {
    global $wp_taxonomies;
    // the following relates to tags, but you can add more lines like this for any taxonomy
    $wp_taxonomies['post_tag']->sort = true;
    $wp_taxonomies['post_tag']->args = array( 'orderby' => 'term_order' );
}
add_action( 'init', 'do_the_terms_in_order');

いやあ、素晴らしいです。はい。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円
本格ビジネスサイトを作りながら学ぶ WordPressの教科書
プライム・ストラテジー株式会社
ソフトバンククリエイティブ
売り上げランキング: 5,208
WordPressプロフェッショナル養成読本 [Webサイト運用の現場で役立つ知識が満載! ] (Software Design plus)
高野直子 後藤賢司 染谷昌利 岡本雄樹 深海寛信 岡本 渉 松本悦宜
技術評論社
売り上げランキング: 24,886
いちばんやさしい WordPress の教本 人気講師が教える本格Webサイトの作り方
石川栄和 大串肇 星野邦敏
インプレスジャパン
売り上げランキング: 2,127