こんにちは、ryohei(@ityryohei)です!

本記事では、WordPressの管理画面で特定のカスタム投稿のパーマリンクの項目を非表示にする方法をご紹介しています。

カスタム投稿タイプは作りたいけど、詳細ページが必要ないパターンって、Web制作をしているとちょいちょいあります。例えば、キービジュアルのスライダー画像だけを設定したり、お知らせを一覧だけ出したり、外部のAPI等で引っ張ったデータに紐づけたり。

こういった使い方をする場合、投稿の編集画面に表示される「パーマリンク」や「プレビュー」といった項目は必要なくなります。詳細ページがないわけですから。かといってファイルをごりごり編集して消すほどでもないし、別にあっても困らないけど、いらないものだから簡単にできるなら非表示にしたい!

本記事は、そういった方に向けた内容のご紹介となります。パーマリンクの要素を消すのではなく非表示にする方法となりますので予めご了承ください。

では、解説していきます。

実際にパーマリンクの項目を非表示するスクリプト

本記事でご紹介する内容をまとめると下記のスクリプトが完成します。下記の内容をテーマの中にある「functions.php」に追記して「if文」の中の「post_type_name」の部分を実際に使用しているカスタム投稿名に変えれば投稿編集画面の「パーマリンク」の項目は表示されなくなります。

functions.php

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

    $current_screen = get_current_screen();

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

        $style = '<style>#edit-slug-box {display: none !important; }</style>';

        echo $style;
    }
}

一応コピペしてカスタム投稿名を修正すればそのまま使用してもらえるのですが、念のためもう少し詳しく解説していきます。

スクリプトがやっていること

上記でご紹介したスクリプトの処理内容をざっくりと箇条書きでまとめてみます。

  • current_screen」にアクションフックする
  • アクションフックに指定した関数を実行する
  • 現在のページ情報を取得して「指定したカスタム投稿タイプ」であれば「style」でパーマリンクを非表示にする

もう少し簡潔にまとめると、管理画面の指定したカスタム投稿タイプの編集ページにアクセスがあった場合、スタイルを追加して「パーマリンク」の項目を非表示にする、です。管理画面で特定の関数を実行するためにはフックを利用します。

アクションフックとは

WordPressはページの読み込みが始まってから多くの段階を踏んで動的にページを構築していきます。

アクションフックは、引数に指定したタイミングがやってくると、予め指定した関数を実行してくれるWordPressの機能です。「add_action()」という関数を使ってアクションフックを登録します。指定することができるタイミング(フック)は多くありますが、今回は「current_screen」というフックを使用します。

current_screen」は下記のタイミングで実行する関数を指定することができます。

current_screen 管理画面で読み込まれるページの情報にアクセスすることができます。

後はアクションフックで実行する関数を作成していきます。

アクションフックで実行する関数

関数内の処理は単純です。現在アクセスがあるページの情報を取得して、そのページが指定したカスタム投稿タイプと一致すればスタイルを出力するだけです。

現在アクセスがあるページの情報は下記のWordPressの関数で取得することができます。

get_current_screen();

実行すると下記の「WP_Screen」というオブジェクトを取得することができます。ダンプを確認する下記のような値を持っていることがわかります。

object(WP_Screen)#8569 (18) {
    ["action"]=>
    string(0) ""
    ["base"]=>
    string(4) "post"
    ["columns":"WP_Screen":private]=>
    int(0)
    ["id"]=>
    string(2) "id"
    ["in_admin":protected]=>
    string(4) "site"
    ["is_network"]=>
    bool(false)
    ["is_user"]=>
    bool(false)
    ["parent_base"]=>
    NULL
    ["parent_file"]=>
    NULL
    ["post_type"]=>
    string(2) "post_type_name"
    ["taxonomy"]=>
    string(0) ""
    ["_help_tabs":"WP_Screen":private]=>
    array(0) {
    }
    ["_help_sidebar":"WP_Screen":private]=>
    string(0) ""
    ["_screen_reader_content":"WP_Screen":private]=>
    array(0) {
    }
    ["_options":"WP_Screen":private]=>
    array(0) {
    }
    ["_show_screen_options":"WP_Screen":private]=>
    NULL
    ["_screen_settings":"WP_Screen":private]=>
    NULL
    ["is_block_editor"]=>
    bool(false)
}

オブジェクトの詳細については下記のページで解説してあります。英語ページですが翻訳すれば理解できる内容となっています。

WP_Screen Reference

多くの情報を取得することができますが、今回は「カスタム投稿タイプ名」だけを取得すればいいので下記のように記述します。

$current_screen = get_current_screen();
$current_screen->post_type;

これで現在アクセスがあるページのカスタム投稿名を取得することができます。後はこれを比較して、指定したカスタム投稿名と一致した場合に「style」を出力することで特定のページ内にある「パーマリンク」の項目を非表示にすることができます。

最後に

いかがでしたでしょうか。

本記事でご紹介した内容はかなりニッチなものですが、知っておくと管理画面を自由にカスタマイズできるようになるため、オリジナルのテーマ作成などに役立つのでおすすめです!

以上、WordPressの管理画面で特定のカスタム投稿のパーマリンクを非表示にする方法のご紹介でした!