2012/2/25

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

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

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

加藤 康祐 / 企画・設計

プランナー、デザイナー。加藤康祐企画設計代表。Webデザインを入り口に、2005年よりフリーランスとしてのキャリアスタート。主な仕事としてベンチャー企業でのサービスのUXデザイン、独法との防災メディアの運営、社会的養護の子どもたちの自立を支援するNPOのサポート。ラグビーと料理、最近イラスト。

加藤康祐企画設計

是非、フォローしてください!
Twitter / Instagram

(2012-10-5)
売り上げランキング: 14,705
100円