WordPressのカスタム投稿タイプで権限を指定するやり方です。
やりたいこと
カスタム投稿タイプで、投稿者は公開できないようにする
デフォルトの挙動
カスタム投稿タイプは通常の投稿と同様、投稿者は自分で公開することができる
コード
LPというカスタム投稿タイプを作ってみます。
add_action( 'init', 'create_post_type' );
function create_post_type() {
$lp_capabilities = array(
'edit_posts' => 'edit_lps', // 自分の投稿を編集する権限
'edit_others_posts' => 'edit_others_lps', // 他のユーザーの投稿を編集する権限
'publish_posts' => 'publish_lps', // 投稿を公開する権限
'read_private_posts' => 'read_private_lps', // プライベート投稿を閲覧する権限
'delete_posts' => 'delete_lps', // 自分の投稿を削除する権限
'delete_private_posts' => 'delete_private_lps', // プライベート投稿を削除する権限
'delete_published_posts' => 'delete_published_lps', // 公開済み投稿を削除する権限
'delete_others_posts' => 'delete_others_lps', // 他のユーザーの投稿を削除する権限
'edit_private_posts' => 'edit_private_lps', // プライベート投稿を編集する権限
'edit_published_posts' => 'edit_published_lps', // 公開済みの投稿を編集する権限
);
register_post_type('lp', [
'labels' => [
'name' => 'LP',
'singular_name' => 'lp',
],
'public' => true,
'has_archive' => true,
'menu_position' => 8,
'show_in_rest' => true,
'capability_type' => 'lp',
'capabilities' => $lp_capabilities,
'map_meta_cap' => true
]);
}
lp_capabilitiesという変数は、カスタム投稿タイプ個別の権限を作成しています。
例えば、「publish_posts」というのが投稿を公開する権限ですが、LPのカスタム投稿タイプの場合は「publish_lps」という名前で定義します。
アンダーバーの後ろの部分がカスタム投稿タイプの名前(複数形)になっています。
専用の権限を定義しておいて、register_post_type関数でカスタム投稿タイプを作成する時に、「capabilities」で指定して登録します。
投稿者に個別の権限を設定する
ここから先はWordPressのプラグイン「User Role Editor」を使用するのが簡単です。
カスタム投稿タイプ「LP」は独自の権限を定義したので、「User Role Editor」で見ると以下のように上記で指定した名前の権限となっています。
このうち、以下のように「publish_lps」(投稿を公開する権限)のチェックを外して更新すると、権限の設定が完了です。