WPで権限ごとにカスタム投稿タイプを扱う

複数権限ユーザーを扱うWPサイトでACFを使ったカスタム投稿タイプを設定したサイトがあったとして、特定のユーザー権限だけはカスタム投稿タイプにアクセスできないようにしたかったのですが、普通ではできなかったので調べました。
そもそもはACF Proを使うと簡単にできるらしいのですが、有料でしかも買い切りじゃないのでハードルが高いです。
今回はカスタム投稿タイプで作った「お知らせ」と、通常の「投稿」とがあり、特定ユーザーだけ「お知らせ」を表示したくないのだけど、どちらかを非表示にすると、両方が表示されてしまうので、それを解決します。
ということでまずは必要なものです。
- ACFプラグイン
- User Role Editorプラグイン
まずはACFでカスタム投稿タイプを作り、User Role Editorで特定の権限を作って分けます。
ACFでの手順は通常通りですので省きます。
次にUser Role Editorです。
左サイドメニューから「ユーザー > User Role Editor」をクリックし、「権限グループを追加」をクリックします。

これで新規の権限が選べるようになりました。

この作業(新しい権限をつくる)をする理由は、カスタム投稿タイプと通常の投稿の権限が同じ扱いなので、カスタム投稿タイプを消したら、通常の投稿も消えてしまうためです。
なので、カスタム投稿タイプだけにしか影響しない権限を作る必要があるんです。
例えば「お知らせ」というカスタム投稿タイプがある場合はこんな感じです。

投稿タイプは通常の投稿で、お知らせがカスタム投稿タイプです。デフォルトだと上の画像のように同じ権限なので、どちらかのメニューを消すと両方消えてします。お互いに影響しないようにするには下の画像のように権限を別にする必要があったんです。
User Role Editorでの作業は以上です。
次にfunctions.phpに以下を追記します。
/**
* 事業所ユーザーの権限設定
*/
function modify_custom_post_capabilities($args, $post_type) {
if ($post_type === 'news') { // 変更するカスタム投稿タイプを指定
$args['capability_type'] = 'test-user'; // 独自の権限グループを設定
$args['map_meta_cap'] = true; // メタ権限を適用
}
return $args;
}
add_filter('register_post_type_args', 'modify_custom_post_capabilities', 10, 2);
「post_type === ‘news’」を指定したいカスタム投稿タイプを入れ、「capability_type」の部分に適用したい権限を入れます。
これで権限別の表示が無事完了しました。
今回は以上です!