この記事にはおすすめ商品の広告があります

WordPressの標準タグは階層構造を持たず、カテゴリをまたいで使うようなフラットな分類に使用されます。
カテゴリと差別化する意味でも階層構造を持たないという特徴は重要ですが、それはそれとして使いにくい。
投稿画面でも登録済みのすべてのタグが表示されるわけではないので、表記ゆれで重複して登録してしまう事故もよく起こります。
そんなわけで、このページではタグをカテゴリーと同じように管理するカスタマイズを紹介します。
目的
- カスタムタイプやプラグインを使わずに、WordPress標準タグにカテゴリーのような親子構造を持たせたい。
- WordPressの〈投稿〉→〈タグ〉の一覧画面で、タグに親タグを設定出来るようにしたい。
- 投稿画面でカテゴリーのようにチェックボックス形式で選択出来るようにしたい。

実装手順
子テーマを用意する
このカスタマイズはfunctions.phpを使用します。
親テーマのfunctions.phpを直接変更するのは非推奨です。子テーマを用意し、その中にfunctions.phpをアップロードして使いましょう。
また、念のため作業前にバックアップを取っておくことを推奨します。
functions.phpにコードを追加
子テーマのfunctions.phpに下記のコードを追加します。
// WP標準タグを階層化する
add_filter( 'register_taxonomy_args', function( $args, $taxonomy ) {
if ( 'post_tag' === $taxonomy ) {
$args['hierarchical'] = true;
$labels = &$args['labels'];
$labels['name'] = 'タグ';
$labels['singular_name'] = 'タグ';
$labels['search_items'] = 'タグを検索';
$labels['all_items'] = 'すべてのタグ';
$labels['parent_item'] = '親タグ';
$labels['parent_item_colon'] = '親タグ:';
$labels['edit_item'] = 'タグを編集';
$labels['update_item'] = 'タグを更新';
$labels['add_new_item'] = '新規タグを追加';
$labels['new_item_name'] = '新規タグ名';
}
return $args;
}, 10, 2 );動作を確認する
投稿画面でのタグのメタボックスと、タグの管理画面で親子関係を設定できるようになります。
実際に設定して不具合がないかを確認してください。
補足
このコードはregister_taxonomy_argsフィルターで引数を上書きすることで、タグの階層化を実現するものです。
最小限のキーだけを指定して上書きし、出来る限りWordPressコアのデフォルトを維持するようにしています。
互換性・保守性を優先しているため、WordPressコアの更新やプラグイン等で引数が増えた場合でも安定動作が望めます。
一方、コアが対応していないカスタマイズは不可能です。UIやプロパティをがっつり差し替えたい場合は、別のアプローチで対応した方が良いでしょう。

