2023年8月11日

WordPressの管理画面で特定の記事やカスタム投稿タイプの編集画面のみ一部のメニューを非表示にする

WordPressの管理画面はカスタムフィールドやプラグインの使用により様々なカスタマイズが可能ですが、「この記事の編集画面で、ここだけ非表示にしたい」といった事、ありませんでしょうか。

具体的にあった事例として、「SEO SIMPLE PACK」のプラグインで記事編集画面に title や description 等を入力する欄があるものの、トップページ用として指定している固定ページの編集画面だけは「SEO SIMPLE PACK」の入力内容が反映されないため非表示にしたい、という事例がありました。ここではその事例を元に対応策を書いてみます。

PostIDを指定して特定の記事編集画面の「SEO SIMPLE PACK」を非表示にする

PostIDを指定して特定の記事編集画面の「SEO SIMPLE PACK」を非表示にするには、 functions.php に、下記のように記述します。この場合、PostID = 2 の記事の編集画面にのみ反映されます。

※事前に必ずバックアップを取ってから実施してください

add_action('current_screen','hide_admin_edit_menu');
function hide_admin_edit_menu(){

/**
 * PostID指定
 */
    if(filter_input(INPUT_GET, 'post') !== null && filter_input(INPUT_GET, 'post') == 2) {

        echo '';

    }

}

説明
「 hide_admin_edit_menu 」という名称は任意で変更可能です。

「 if(filter_input(INPUT_GET, ‘post’) !== null && (filter_input(INPUT_GET, ‘post’) == 2)) 」という記述で、対象となる記事を指定しています。投稿記事や固定ページ等の編集画面のURLは「 /wp-admin/post.php?post=xxx&action=edit 」という形式になっていまして、この「 xxx 」にある数字がPostIDです。PostIDはカスタム投稿や固定ページを問わず、全ての投稿に一意で持っているIDですので、どの編集画面でも確認できます。

また、上記の例では PostID = 2 の記事にのみ適用されますが、複数の記事編集画面に適用したい場合は、「 if(filter_input(INPUT_GET, ‘post’) !== null && (filter_input(INPUT_GET, ‘post’) == 2 || filter_input(INPUT_GET, ‘post’) == 10)) 」というように条件を追加することで、指定したPostIDの記事編集画面に適用することが出来ます。

あとは、指定したPostIDの記事編集画面に style タグを出力している、という処理になっています。今回の事例でいう「SEO SIMPLE PACK」の入力欄はID名が「 #ssp_metabox 」となっていますので、これを display: none; で非表示にしている、という処理としています。他にも非表示としたい箇所があれば、ブラウザの検証機能等で対象のID名もしくはclass名を確認しましょう。

特定のカスタム投稿タイプの記事編集画面で「SEO SIMPLE PACK」を非表示にする

先ほどはPostIDごとの適用例でしたが、PostTypeを指定することで、特定のカスタム投稿タイプの記事編集画面すべてに適用することも出来ます。同じく functions.php への記述で、下記のような書き方になります。

add_action('current_screen','hide_admin_edit_menu');
function hide_admin_edit_menu(){

/**
 * カスタム投稿タイプ単位の指定
 */
    $current_screen = get_current_screen();

    if(isset($current_screen) && $current_screen->post_type === 'news') {

        echo '';

    }

}

この書き方の場合、スラッグが「 news 」であるカスタム投稿タイプの記事編集画面すべてに対して、 style タグを出力する、という処理になります。

応用
今回は「特定の記事やカスタム投稿タイプの編集画面のみ一部のメニューを非表示にしたい」という目的だったので、 style タグで display: none; とするのみでしたが、「 style タグを出力している」という事を応用すれば、非表示にするだけでなく、特定の箇所の文字色や背景色を変える、といったことも出来ます。

また、「SEO SIMPLE PACK」の入力欄を事例としてあげましたが、「プレビューボタンを非表示にしたい」「アイキャッチ画像の登録枠を非表示にしたい」など、思わぬ要望が出たときにも応用できます。

管理画面のカスタマイズは「Wordpressの仕様なんで」と言って納得してもらえれば一番シンプルなのですがと思いつつですが。Wordpressの管理画面で特定の記事やカスタム投稿タイプの編集画面のみ一部のメニューを非表示にする方法でした。

コメントを残す

メールアドレスが公開されることはありません。