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' );