register_post_type でカスタム投稿タイプを定義するとき、public => false とすることで「この投稿タイプでユーザーインターフェースを表示しない(show_ui=false)、post_type クエリがフロントエンドで実行できない(publicly_queryable=false)、検索結果からこの投稿タイプを除外する(exclude_from_search=true)、ナビゲーションメニューで post_type を選択候補から外す(show_in_nav_menus=false)」が設定される。このとき、さらに show_ui => true とすることで「フロントエンドで実行はできないが、ユーザーインターフェース(管理画面)は表示する」という状態にすることができる。
register_post_type( 'contacts',array( 'public' => false, 'show_ui' => true, 'supports' => array( 'title' ) );
上記のような設定にすることで、表に出す必要はないが内部的に管理したいデータの管理画面を作成することができる。例えば「お問い合せ管理」や「顧客管理」などの用途が考えられる。
public => false, show_ui => ture で作成したカスタム投稿タイプの管理画面は以下。
一覧画面ではクイック編集部分の「表示」リンクが表示されなくなり、投稿画面では「投稿のプレビュー」、更新後の「投稿を表示ボタン」が表示されなくなる。ただ、なぜか更新後メッセージ表示部分の「投稿を表示する」だけは表示が残っている。
そこで、下記のコードを用いて更新後メッセージ表示部分の「投稿を表示する」を非表示にしてみた。コードは functions.php へ追記すればOK。
function cpt_public_false() { // カスタム投稿タイプのときだけ実行 $cpts = get_post_types( array( '_builtin' => false, ) ); $pt = get_post_type(); if ( ! in_array( $pt, $cpts ) ) return; // カスタム投稿タイプオブジェクトを取得 $pto = get_post_type_object( get_post_type() ); // public => false のとき if ( isset( $pto->public ) && $pto->public == false ) { ?> <style type="text/css"> // 更新時の記事リンク .post-php #message a { display: none; } // 抜粋表示の続きを読む .wp-list-table .post-title span.more-link { display: none; } </style> <?php } } add_action( 'admin_head', 'cpt_public_false' );