【WordPress】ユーザーに特定のカスタム投稿機能のみ権限を与える方法

今回のブログは特定の投稿機能に関するユーザー権限について。

WordPressでホームページ制作を行った際、制作会社とクライアントで管理画面を共有する場面もあるかと思います。
また、「クライアント用のアカウントではブログやお知らせなどの投稿機能のみ触れるようにしたい」といった場合もありますよね。

管理画面内にある投稿機能を利用できるようにする場合は、ユーザー内の権限を「投稿者」にすることで制約できます。

しかし、特定の投稿機能だけ権限を与えたい場合はこの方法では実現できません。

たとえば、上の画像の「お知らせ専用投稿ユーザー」のように、カスタム投稿タイプで作成した特定の投稿機能のみの権限を付与したい場合。
これは、functions.phpとプラグインを利用して実装する方法があります。

なぜ投稿機能単位で権限を付与できないの?

投稿機能の権限はデフォルトですべて「post」という権限が付与されます。
「投稿者」に設定されているユーザーは、この「post」という権限を与えられていることになります。

特定の投稿機能のみを付与する場合はその投稿機能の権限を「post」から別の権限名に変更し、任意の権限グループ(先ほどの画像でいえば「お知らせ投稿専用ユーザー」)に指定してあげる必要があります。

今回は画像の例に沿って説明をしていきます。
流れをざっくり言えばこんな感じです。

  1. 管理画面からプラグイン「User-Role-Editor」を有効化 「User-Role-Editor」の権限グループから「お知らせ投稿専用のユーザー」を新規追加
  2. 投稿機能に独自権限名を指定する内容をfunction.phpに記述する
  3. お知らせ投稿専用のユーザーに独自権限「news」のついた投稿機能を指定

それでは順を追って説明していきましょう。

【手順1】プラグイン「User-Role-Editor」を有効化

管理画面から「User-Role-Editor」を新規追加し、有効化します。

すると、「ユーザー」の中に「User-Role-Editor」が出現。

設定画面は下の画像のとおり。
各メニューに関して、編集・削除・公開など細かい項目ごとに権限がチェックボックスで設定できるようになっています。

ちなみに、このままでは投稿機能一括での権限設定しかできません。
投稿機能の権限はすべて「post」の状態ですので、複数の投稿機能の権限が一括で変更されてしまう状態。

権限グループを追加する

権限グループは「投稿者」「寄稿者」「エディター」「購読者」の4つが選択できます。
ここに新たに「お知らせ投稿専用ユーザー」を追加しましょう。

権限を追加する

お知らせ投稿用の権限「news」を新規追加。

現時点では権限IDを作っただけで”お知らせの投稿機能の権限がnewsである”という紐づけはできていていない状態。
これをきちんと紐づけるために、お次はfunctions.phpへの記述を行います。

【手順2】独自権限を付与する内容をfunctions.phpに記述する

functions.phpに以下の記述をします。

<?php
    function my_custom_post_type() {
    register_post_type(
        'ptname',
        array(
            'label' => 'カスタム投稿タイプのスラッグ名',
            'public' => true,
            'capability_type' => 'ptauth',
            'has_archive' => true,
            'menu_position' => 5,
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields' ,'comments' )
        )
    );
    $rm = new WP_Roles();
        $rm->add_role("authid", "権限名" );
    foreach( array( "authid",  "administrator" ) as $rid ) {
        $role = $rm->get_role($rid);
        $role->add_cap("read");
        $role->add_cap("add_ptauth");
        $role->add_cap("add_ptauths");
        $role->add_cap("edit_ptauth");
        $role->add_cap("edit_ptauths");
        $role->add_cap("delete_ptauth");
        $role->add_cap("delete_ptauths");
        $role->add_cap("publish_ptauths");
    }
    $role->add_cap("delete_others_ptauths");
    $role->add_cap("edit_others_ptauths");
}
add_action( 'init', 'my_custom_post_type', 0 );
?>

【手順3】 「User-Role-Editor」で権限グループと権限を指定

カスタム投稿タイプと独自権限の紐づけが完了したら、再び「ユーザー」→「User-Role-Editor」を選択。
対象となる権限グループを選択し、functions.phpで独自権限を与えたカスタム投稿タイプの権限設定を行います。

先ほどとは違い、【お知らせ】のみ権限が付与できているのがわかります。

【手順4】 新規ユーザーを追加しアカウント作成

最後に管理アカウント用のメールアドレスを登録し、管理画面へのログインアカウントとパスワードを作成すれば完了です。

まとめ

少々分かりにくい内容のような気がしますが、仕組みを理解するとやっていることは案外簡単。
管理画面を複数企業や複数人で扱う場合など、実装が必要な場面もあると思うので知っておくといいでしょう。