public => falseなカスタム投稿タイプのとき、更新時に出る記事へのリンクを消す

投稿画面(公開後)

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' );
  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。