【WordPress】投稿画面でタグをメニューから非表示にする方法

WordPressの投稿には「カテゴリ」と「タグ」という2種類の分類がありますが、特定のケースでは、管理画面のメニューからタグを非表示にしたい場合があります。この記事では、簡単なコードを使って、投稿のタグを管理メニューから非表示にする方法を紹介します。

スポンサーリンク

方法1:タグ機能ごと無効化する

以下は、functions.phpに追加することで、投稿の編集画面・投稿一覧・管理メニューからタグ関連の項目をまとめて消すコードです。

functions.php:post_tagタクソノミーからpostを切り離す
function hide_tag_from_menu() {
    global $wp_taxonomies;
    foreach ( $wp_taxonomies['post_tag']->object_type as $i => $object_type ) {
        if ( $object_type == 'post' ) {
            unset( $wp_taxonomies['post_tag']->object_type[$i] );
        }
    }
    return true;
}
add_action( 'init', 'hide_tag_from_menu' );

global $wp_taxonomies

このコードはWordPressのグローバル変数である$wp_taxonomiesを使用して、カスタム分類(taxonomy)にアクセスします。

foreachループ

$wp_taxonomies['post_tag']->object_typeの中をループして、'post'というオブジェクトタイプを探します。このオブジェクトタイプが見つかった場合、該当のエントリをunset()で削除します。

add_action()

最後に、initアクションフックを使用して、上記の関数をWordPressに登録します。このフックによって、WordPressが初期化されるタイミングで関数が実行されます。

このコードをfunctions.phpに追加すると、投稿のタグが管理画面のメニューに表示されなくなります。タグ自体は存在し続けますが、投稿の編集画面や投稿リストでのタグフィルタリングなどはできなくなります。

コアの標準関数でもっと簡潔に書ける
上のコードはWordPressコアが提供するunregister_taxonomy_for_object_type()関数とほぼ同じ処理を自前で実装したものです。同じ結果を得たいだけであれば、次のように1行で書けます。
functions.php:コア関数を使った簡潔な書き方
function hide_tag_from_menu() {
    unregister_taxonomy_for_object_type( 'post_tag', 'post' );
}
add_action( 'init', 'hide_tag_from_menu' );

方法2:機能は残したままメニューのリンクだけを消す

「メニューから非表示」と「タグ機能の無効化」は違う
方法1のコードは、管理メニューだけでなく投稿へのタグ付け機能そのものを無効化します。投稿編集画面の「タグ」メタボックスも消え、REST API経由でもタグを設定できなくなります。タグ機能は残したまま、サイドバーの「投稿 > タグ」というメニューのリンクだけを消したい場合は、remove_submenu_page()を使います。
functions.php:メニューのリンクだけを非表示にする
function hide_tag_submenu_link() {
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
}
add_action( 'admin_menu', 'hide_tag_submenu_link' );

この方法では、投稿編集画面のタグメタボックスはそのまま残るため、記事を書きながらタグを付けることはできますが、管理画面の「投稿」メニューを開いたときに「タグ」というサブメニュー項目だけが表示されなくなります。

タグを管理メニューから非表示にしたい場合、この簡単な方法で対応できますが、テーマやプラグインに影響を与える可能性があるため、事前にバックアップを取ることをおすすめします。

関連記事

よくある質問(FAQ)

Qタグを完全に無効化する方法とメニューのリンクだけ消す方法の違いは?
A$wp_taxonomies['post_tag']->object_typeからpostを外す(またはunregister_taxonomy_for_object_type()を使う)方法は、投稿編集画面のタグメタボックスやREST API経由の操作も含めて機能ごと無効化します。remove_submenu_page()は管理メニューのリンクだけを消すため、投稿編集画面からのタグ付けは引き続き可能です。
Qカテゴリを同じ方法で非表示にできますか?
Aはい。タクソノミー名をpost_tagからcategoryに変えるだけで同じ考え方が使えます。ただし投稿には必ず1つ以上のカテゴリが必要な仕様のため、完全に無効化するとデフォルトカテゴリでの投稿保存に影響が出ないか事前に確認してください。
Qこの処理はどのタイミングで実行すればよいですか?
A$wp_taxonomiesを書き換える方法はinitフックで実行します。組み込みのタクソノミーはinitより前に登録が完了しているため、initのタイミングであれば確実に上書きできます。remove_submenu_page()を使う方法は、管理メニューが構築された後に呼び出す必要があるためadmin_menuフックを使います。

まとめ

WordPressの管理画面からタグを非表示にする方法として、タグ機能そのものを無効化する方法と、メニューのリンクだけを消す方法の2通りを紹介しました。運用したい内容に合わせて、適切な方法を選んで実装してください。