管理者WordPressユーザーの権限グループ権限の機能を使い、サイト上で他のユーザーができること/できないことを管理できます。投稿の作成/編集、新たなページの作成、コメントの管理、プラグインのインストール、新たなユーザーの追加などのユーザーのアクションを管理可能です。

ユーザーの権限グループと権限を理解することは、どのようなWordPressサイトを管理する上でも重要です。例えば、クライアント向けのサイトを構築している場合、勝手にインストールされたテーマを変更したり、編集したりしてしまうのを避けたいものです。同様に、複数の著者のいるブログで勝手にプラグインをインストールまたは削除されてしまっては困るでしょう。

WordPressのユーザー権限を賢く管理することで、ワークフローを整理し、サイトの安全性を維持し、サイト全体を包括的に管理することができます。

この詳細ガイドでは、WordPressユーザーの権限グループ、利用できる様々な権限、既存のユーザー権限の編集方法、マルチサイトでのユーザーの管理方法、新たな権限を付与した新しい権限グループの作成方法などをご紹介します。

ご興味は湧いてきたでしょうか?早速詳しく見ていきましょう。

WordPressユーザーの「権限グループ」と「権限」とは?

ユーザーの「権限グループ」と「権限」はWordPressのユーザーアクセス管理において必要不可欠なものです。WordPressユーザーの「権限グループ」について理解するには、まず「権限」について知る必要があります。

WordPressではユーザーが実行できる一つ一つのアクションを権限と呼びます。WordPress内で利用できる権限とコード上の表記の例をいくつかご紹介します。

ほとんどの権限は、その名称から内容が分かります。WordPressコアには70以上の権限がハードコードされています。

権限グループとは、特定のユーザーに割り当てられる複数の権限の総称です。全てのWordPressユーザーに権限グループを割り当てる必要があります。各ユーザーは割り当てられた権限グループで許可されたアクションしか実行できません。

「権限グループ」は複数の「権限」の総称

「権限グループ」は複数の「権限」の総称

上記の図では、Role 1のユーザーは投稿を読むことができますが、投稿を編集することはできません。Role 2のユーザーは投稿を読むことも編集することもできますが、投稿の公開はできません。Role 3のユーザーは投稿を読むこと、編集すること、公開することはできますが、削除することはできませんが、Role 4のユーザーは投稿を削除することもできます。

WordPressダッシュボードの「新規ユーザーを追加」画面

WordPressダッシュボードの「新規ユーザーを追加」画面

WordPressではネイティブな権限を利用しデフォルトの権限グループを定義しています。例えば、管理者、編集者にはpublish_pages(ページの公開)の権限が付与され、購読者、寄稿者には付与されません。

WordPressダッシュボードの「ユーザー」画面

WordPressダッシュボードの「ユーザー」画面

全てのWordPressユーザーは最低限、ユーザー名、パスワード、メールアドレス、権限グループを持ちます。

WPデータベース内の権限が保存されている場所を示すphpMyAdminの画面

WPデータベース内の権限が保存されている場所を示すphpMyAdminの画面

WordPressでは、権限グループに基づいた全ての権限がデータベースに保存されます(連番付きで、wp_user_rolesオプション内、wp_optionsテーブルの中)。WP_Rolesというコアクラスはデータベース内でどのように権限グループと権限を保存するかを定義するのに使われます。

WP_Rolesクラス

WordPressではユーザーロールAPIを使って権限グループや権限を実装しており、その大半はWP_Rolesコアクラスに基づいています。そのソースはwp-includes/class-wp-roles.phpファイルで見ることができます。

データベースを見ると、権限グループは権限グループ名が定義された配列の中に記載されていることが分かります。Rolenameキーは nameキーの値として権限グループ名を保存し、全ての権限は capabilityキーの値として別の配列で保存されます。

array (
     'rolename' => array (
         'name' => 'rolename',
         'capabilities' => array()
     )
)

WP_Rolesクラスは多くのメソッドを定義します。これをコード内の好きなところで呼び出して、ユーザーロールAPIを利用することができます。

補足情報:WordPressにはもう一つのコアクラスWP_Role(「Role」が単数形)も存在します。ユーザーロールAPIを拡張するのに利用します。

wp_user_rolesキーの値をアンシリアライズすると次のようになります。

array (
  'administrator' => 
  array (
    'name' => 'Administrator',
    'capabilities' => 
    array (
      'switch_themes' => true,
      'edit_themes' => true,
      'activate_plugins' => true,
      // [...rest of the lines cut off for brevity...]
    ),
  ),
  'editor' => 
  array (
    'name' => 'Editor',
    'capabilities' => 
    array (
      'moderate_comments' => true,
      'manage_categories' => true,
      'manage_links' => true,
      // [...rest of the lines cut off for brevity...]
    ),
  ),
  'author' => 
  array (
    'name' => 'Author',
    'capabilities' => 
    array (
      'upload_files' => true,
      'edit_posts' => true,
      'edit_published_posts' => true,
      // [...rest of the lines cut off for brevity...]
    ),
  ),
  'contributor' => 
  array (
    'name' => 'Contributor',
    'capabilities' => 
    array (
      'edit_posts' => true,
      'read' => true,
      // [...rest of the lines cut off for brevity...]
    ),
  ),
  'subscriber' => 
  array (
    'name' => 'Subscriber',
    'capabilities' => 
    array (
      'read' => true,
      'level_0' => true,
    ),
  ),
)

すべての権限グループに権限グループ名が割り当てられ、一連の権限が付与された多次元配列です。同様に、WordPressではユーザー毎の権限はwp_usermetaテーブルのwp_capabilitiesメタキーに保存されます。

補足情報:設定によってwp_という接頭辞が異なる場合があります。サイトの wp-config.phpファイルのグローバルプレフィックス$table_prefixの値によって異なります。

権限グループと権限の一覧表

WordPress Codex掲載の「権限グループと権限」の一覧表

WordPress Codex掲載の「権限グループと権限」の一覧表

WordPress Codexにはあまり分かりやすいものではありませんが、シンプルな権限と権限グループの一覧が掲載されています。WordPressのシングルサイト、マルチサイトそれぞれのデフォルトの権限グループで利用できるアクションがまとまっています。権限を決まった数で区切ることで、レベルの高い権限とレベルの低い権限が分かりやすいようになっています。

より分かりやすいWordPressの権限グループと権限の一覧が見たいという場合は Exygyによる一目で分かる一覧をご覧ください

グーテンベルクの再利用ブロックに関連する機能

WordPressのグーテンベルクブロックエディタ再利用ブロックと呼ばれる素晴らしい機能が導入されました。ブロック全体(または複数のブロック)をテンプレートとして保存し、サイトの他の部分で使用することができます。

WordPressのグーテンベルクブロックエディタの新機能「再利用ブロック」を追加する

WordPressのグーテンベルクブロックエディタの新機能「再利用ブロック」を追加する

それに伴い、再利用ブロックに関連する次の新機能も導入されました。

上記の機能の仕組みは投稿関連の機能と似ています。管理者と編集者は、再利用ブロック関連のすべての機能にアクセスできますが、作成者は自分で作成した再利用ブロックしか編集/削除できません。寄稿者は、再利用ブロックを閲覧することしかできません。

特別な権限:ファイルチェックなしのアップロード

ファイルチェックなしのアップロードはデフォルトでは管理者や特権管理者を含めどの権限グループにも付与されていない権限です。この権限が付与されたユーザーはWordPressでサポートしている形式だけでなく、どのような拡張子のファイルでもアップロードすることができます(SVGやPSDなど)。

補足情報:wp_get_mime_types()関数を利用すると、WordPressでサポートしているメディアタイプとファイル拡張子の一覧を確認できます。

この権限を有効にするには、wp-config.phpファイルの下の方に次のコードスニペットを追加する必要があります。「編集が必要な場所はここまでです」という行の直前にコードを追加します。

define( 'ALLOW_UNFILTERED_UPLOADS', true );

この行を挿入すると、WordPressのシングルサイトの全ての権限グループにファイルチェックなしのアップロードの権限を付与できるようになります。しかし、マルチサイトの場合、この権限を付与できるのは特権管理者のみです。

例えば、unfiltered_uploadの権限を編集者に付与したい場合、次のコードをWordPressのコードの好きな場所に追加します(テーマ/プラグインの有効化の際のみ適用するのが理想です)。

<?php

  $role = get_role( 'editor' );
  $role->add_cap( 'unfiltered_upload' );

?>

各権限グループへの権限の付与、調整の仕方については後ほどより詳しくご説明します。

既存の権限とメタ権限

WordPressの権限には大きく分けて2つの種類があります。

例えば、投稿者は自分で作成した投稿についてedit_postsの権限が付与されるため編集することができます。しかしこの権限では他のユーザーの投稿を編集することができません。ここで便利なのがメタ権限です。

WordPressではmap_meta_cap()関数を利用すると、特定のオブジェクトに結びついている既存の権限の配列が返されます。そして、ユーザーが投稿を編集できるかどうか確認するためにユーザーオブジェクトと比較します。

メタ権限には、他にもread_postdelete_postremove_userread_postなどがあります。これらについては、権限のカスタマイズのセクションで詳しくご紹介します。

💡 Understanding WordPress user roles & capabilities = a more secure site + peace of mind for you and your clients. Learn more 👇Click to Tweet

WordPressの6つのデフォルト権限グループ

WordPressには6つのデフォルトの権限グループが存在します。WordPressをインストールして最初に利用するユーザーにはデフォルトで管理者の権限が付与されます(マルチサイトの場合、特権管理者)。

WordPressは現在の本格的なCMSに発展する前はブログ向けプラットフォームとしてスタートしているため、権限グループの権限の大半はウェブ上にコンテンツを公開することに関するものです。他のデフォルトの権限グループは編集者、投稿者、寄稿者、購読者です。

権限の範囲の大きい順に積み上げたWordPressのデフォルト権限グループ

権限の範囲の大きい順に積み上げたWordPressのデフォルト権限グループ

WordPressのデフォルト権限グループを、様々な権限の範囲を示す円柱を積み重ねたものに例えてみましょう。最も大きな円柱が最も多くの権限が付与されたグループで、二つ目に大きなものが二番目に多くの権限を持ち、一番小さな円柱が最も権限が少ないグループです。

権限グループは優劣の関係ではありません。サイト内でのユーザーの責任を決定するためのものと考えましょう。

権限グループに優劣はなく、各ユーザーに何ができるのかを正確に定義するものです。

それでは早速WordPressのデフォルトの権限グループをそれぞれ詳しく見ていきましょう。

管理者

「管理者」のWordPressダッシュボード

「管理者」のWordPressダッシュボード

WordPressではシングルサイト向けのインストール後初めて利用するユーザーに管理者の権限が付与されます。他の権限グループと比べ最も権限の範囲が広く、WordPressで規定されている全ての機能へのアクセス権限を持ちます。管理者の権限を持つユーザーは次のようなアクションが実行できます。

WordPressに新規ユーザーを追加できるのは管理者のみ

WordPressに新規ユーザーを追加できるのは管理者のみ

管理者は最も強い権限を持つ権限グループなので、信頼のおける人物にしか付与してはいけません。1サイトにつき管理者は一人だけ設定するのが理想です。

WordPressのマルチサイトネットワークにも管理者はありますが少し定義が異なります。マルチサイトネットワークでは、管理者はプラグインやテーマのインストールなど、シングルサイトの管理者には付与される一部の権限が適用されず、 これらは特権管理者にのみ与えられる権限となります。

編集者

「編集者」のWordPressダッシュボード

「編集者」のWordPressダッシュボード

編集者はWordPressサイトのコンテンツの管理を担います。投稿や固定ページの作成、変更、公開、削除ができ、他のユーザーが作成した投稿や固定ページも対象となります。編集者の権限には次のようなものがあります。

編集者はプラグインやテーマのインストールなどサイト管理に関わるアクションはとれません。その主な責任は他の投稿者や寄稿者の仕事を監督するか、一人で何役もこなすコンテンツ担当になることです。

ヒント:一人でWordPressサイトを管理している場合、編集者の権限を持つ自分用のユーザーアカウントを別途作成する方法があります。そうすることで管理と投稿の作業を分けることができます。万が一編集者のアカウントがハッキングされたとしても、管理者のアカウントは守ることができます

投稿者

「投稿者」のWordPressダッシュボード

「投稿者」のWordPressダッシュボード

名前の通り、投稿者の権限を持つユーザーは投稿を作成、編集、公開できます。メディアファイルのアップロードと自分の投稿の削除はできますが、固定ページの作成や他のユーザーの投稿の編集はできません。

投稿者は自分の投稿にタグを追加したり、既存のカテゴリーに投稿を割り当てたりすることができますが、新たなカテゴリーを作成することはできません。編集者と同じように設定、プラグイン、テーマなどの管理に関連する作業はできません。

補足情報:投稿者は公開した後であっても自分の投稿を削除することができます。投稿者の権限を付与する際は、そのユーザーの投稿や削除などを十分管理できていることを確認しましょう。

寄稿者

「寄稿者」のWordPressダッシュボード

「寄稿者」のWordPressダッシュボード

寄稿者は投稿者よりやや権限を軽くした権限グループです。寄稿者は自分の投稿を作成し、下書きを削除することができますが、公開することはできません。

投稿の下書きを保存し、編集者か管理者に確認と公開を依頼するために送信することができます。投稿が公開された後は、寄稿者がその投稿を削除することができません。一方、投稿者は公開後の自分の投稿を削除することができます。

寄稿者の権限は新人の執筆者やゲストの寄稿者にぴったりです。

購読者

「購読者」のWordPressダッシュボード

「購読者」のWordPressダッシュボード

購読者は権限のランクでは最下位にある権限グループです。購読者は自分のプロフィールが編集でき、サイト上の全ての投稿を読むことができます。たったそれだけです。

購読者とログインしているユーザーのみにコンテンツの表示を制限することも可能

購読者とログインしているユーザーのみにコンテンツの表示を制限することも可能

通常は誰でもWordPressサイトのコンテンツを閲覧することができます。しかし、定期購読制会員制サイトではログインユーザーしかコンテンツを閲覧できません。その場合、購読者の権限グループのユーザーのみ投稿を読むことができます。

特権管理者

「編集者」のWordPressマルチサイトネットワークのダッシュボード

「編集者」のWordPressマルチサイトネットワークのダッシュボード

特権管理者はマルチサイト向けのWordPressのみで利用できる権限グループです。この権限グループはマルチサイトネットワーク内のシングルサイトの管理者権限グループよりも上位の権限グループで、高レベルな管理権限にアクセスできます。

特権管理者の利用できるマルチサイト限定の権限には次のようなものがあります。

WordPressマルチサイトネットワークの「サイト」画面

WordPressマルチサイトネットワークの「サイト」画面

特権管理者ダッシュボード内の「テーマ」画面

特権管理者ダッシュボード内の「テーマ」画面

マルチサイトネットワークでは、テーマをインストールし、ネットワーク内で有効化できるのは特権管理者だけです。ネットワーク内の個別のサイトの管理者は特権管理者によってインストール済みのテーマの閲覧と有効化しかできません。

例えば、ネットワーク内に無料のAstraのテーマをインストールして、ネットワーク内でまだ有効化していないとします。その場合、ネットワーク内の個別のサイト管理者のテーマ画面にこのテーマは表示されません。

ネットワーク内の個別のサイトの管理者は新しいテーマをインストールできない

ネットワーク内の個別のサイトの管理者は新しいテーマをインストールできない

上記のスクリーンショットでは、ネットワーク内の個別のサイトの管理者はプラグインのメニューにアクセスできないことがわかります。テーマの場合とは違い、特権管理者はネットワークの設定を変更し、個別のサイト管理者が自分のサイトにプラグインをインストールし有効化できるようにすることができます。

特権管理者は管理者にプラグインの管理権限を付与することが可能

特権管理者は管理者にプラグインの管理権限を付与することが可能

特権管理者はプラグインを「サイトネットワークで有効化」することも可能

特権管理者はプラグインを「サイトネットワークで有効化」することも可能

また、特権管理者はネットワーク内全てのサイトにプラグインが適用されるよう、プラグインをサイトネットワークで有効化することもできます。個別の管理者はネットワークで有効化されたプラグインを無効化することはできません。この設定はネットワーク内で必要不可欠なプラグインを強制的に有効にしたい場合に便利です。

ネットワーク管理画面

ネットワーク管理画面は特権管理者がWordPressのマルチサイトネットワーク権限を管理するためのハブの役割を担います。ネットワークを作成した後、特権管理者の権限を持つユーザーのみアクセスができます。

ネットワーク管理画面にはネットワークを管理するための独自の機能が

ネットワーク管理画面にはネットワークを管理するための独自の機能が

1. ダッシュボード

ネットワーク管理画面はネットワーク内のサイトの詳細情報を管理する中央ハブです。ネットワークに関する全ての設定にアクセスできます。

2. サイト
ネットワーク管理画面の「サイト」画面

ネットワーク管理画面の「サイト」画面

マルチサイトネットワークを構成するサイトを管理するのには「サイト」画面を利用します。ここに表示されるサイトはマルチサイトネットワークをどのように設定したかによって、サブディレクトリもしくはサブドメインになります。

ネットワークには新規サイトを追加したり、既存のサイトを削除したりすることができます。

また、サイトやユーザー、テーマ、ネットワーク全体の設定に関する情報もここで確認できます。最初に作ったサイトがネットワーク内の基本のサイトとなります。ネットワークは最初に作成したサイトの設定を引き継ぎます。

WordPressのマルチサイトネットワークに新しいサイトを追加

WordPressのマルチサイトネットワークに新しいサイトを追加

新規サイトを作成のリンクをクリックすると上記の画面が表示され、マルチサイトネットワークに新しいサイトを追加することができます。新しいサイトの管理者が他にいない場合は、自分自身を管理者として割り当てることもできます。

3. ユーザー
ネットワーク管理画面の「ユーザー」画面

ネットワーク管理画面の「ユーザー」画面

ネットワーク管理画面の「ユーザー」画面ではマルチサイトネットワークのユーザーを管理したり新しいユーザーを追加したりすることができます。ネットワークへのユーザーの追加は特権管理者しかできませんが、特権管理者がネットワーク設定を変更することで、個別のサイトの管理者が自身のサイトにユーザーを追加できるようになります。

4. テーマ
ネットワーク管理画面の「テーマ」画面

ネットワーク管理画面の「テーマ」画面

「テーマ」画面ではサイト管理者がアクセスできるテーマを管理することができます。サイトで使用されているテーマを有効化したり無効化したりすることはできませんが、ネットワーク内のサイトが使用できるテーマを設定することができます。

ネットワーク内のサイトで使用されているテーマを無効化してしまった場合、無効化した後もそのサイト内では引き続き有効であり続けます。しかしそのサイトが別のテーマを使うと、無効化されたテーマはネットワークサイトのテーマ画面に表示されなくなります。

ネットワーク内でのテーマとプラグインの使用方法についてはKinstaのWordPressマルチサイト解説記事をご覧ください。ダッシュボード内でテーマファイルを編集するのにテーマエディタを使用することもできます。

5. プラグイン
ネットワーク管理画面の「プラグイン」

ネットワーク管理画面の「プラグイン」

「プラグイン」の画面では、ユーザーはネットワーク内のプラグインを追加したり削除したりすることができます。プラグインを追加すると、サイトのダッシュボードからそのプラグインを有効化できるようになります。ネットワーク内全てのサイトにプラグインが適用されるようにネットワークで有効化することもできます。

デフォルトでは、個別のサイトの管理者はダッシュボードのプラグインのメニューにはアクセスできません。特権管理者がネットワーク設定を変更することにより、アクセスできるようになります。

全ての子サイトの管理者にプラグイン管理権限を付与

全ての子サイトの管理者にプラグイン管理権限を付与

補足情報:全てのWordPress プラグインがマルチサイトネットワークに対応しているわけではありません。プラグインのドキュメンテーションを確認しマルチサイトで利用できるか確認しましょう。

6. 設定
ネットワーク管理画面の「ネットワーク設定」

ネットワーク管理画面の「ネットワーク設定」

ネットワーク設定画面ではネットワーク全体の設定をしたり変更したりすることができます。ネットワークのデフォルトの設定は最初に作成したサイトに基づいて決定します。ここで変更できる設定には次のようなものがあります。

また、ネットワーク作成時に使用したネットワーク設定情報にもアクセスできます。WordPress Codexのネットワーク管理/設定画面のページでは全ての設定オプションの詳細が確認できます。

7. 更新
ネットワーク管理画面の「更新」

ネットワーク管理画面の「更新」

更新画面ではネットワーク全体と個別のサイトの両方の更新状況を確認できます。更新画面にはWordPressのコア、テーマ、プラグインの全ての利用可能なアップデートが表示されます。WordPressの最新バージョンをインストールするとネットワークをアップグレードの画面からネットワーク上の全てのサイトに適用することができます。

ネットワーク管理画面の「ネットワークをアップグレード」

ネットワーク管理画面の「ネットワークをアップグレード」

補足情報:WordPressのシングルサイトでは、管理者は全ての管理者権限にアクセスできるため実質、特権管理者と同義です。

WordPressのデフォルトの権限を利用して、権限グループをカスタマイズしたりオリジナルの権限グループを作成したりすることもできます。

権限グループと権限を利用するメリット

権限グループと権限はWordPressのユーザー管理を支えるシステムです。そのメリットをいくつかご紹介します。

WordPressの権限グループを効果的に利用する方法

それぞれの権限グループとその権限について理解することは必要不可欠ですが、それらをサイト上で効果的に活用する方法も、知っておく必要があります。全く同じWordPressサイトというものは、この世に存在しませんが、権限グループとその権限を有効に活用するための、基本的なルールは存在します。

ユーザーのアクセス権は全て最低限にする

ユーザーへ付与する権限は必要最低限の範囲にとどめましょう。権限は多すぎるよりも少ない方が良いものです。WordPressの権限グループを限定的にすることはサイトやコンテンツを保護する上で重要です。

各ユーザーへの権限グループの割り当ては慎重に

各ユーザーへの権限グループの割り当ては慎重に

管理者と編集者の数は最低限にする

一般的なルールとして、サイトの管理者は一人に限定し、サイトの中核部分のみを変更するべきです。WordPressでは必要なタスクを実行するのに必要不可欠な権限のみを与えるという「最小権限の原則」に従うことを推奨しています。

例えば、サイトのコンテンツの管理には管理者権限よりも編集者の権限の方が適切です。編集者が2人以上いる場合、大きな権限を与えることになるので信頼がおける人物であることを十分確認しましょう。

投稿者は自分の投稿を公開/削除できるので、その権限は信頼できるコンテンツクリエイターに割り当てましょう。寄稿者は新人のコンテンツクリエイターやゲストの執筆者に適しています。

必要に応じて権限グループをカスタマイズする

WordPressのデフォルト権限グループは便利ですが、全ての場合に適しているとは限りません。例えば、投稿者にコメントの管理権限を与えたい場合などもあるでしょう。

幸い、WordPressでは個別のニーズに合わせて権限グループをカスタマイズしたり、新しいグループを作成したりすることができます。コードを用いて手動で設定することも、WordPressの権限グループのプラグインを用いることも可能です。今回の記事ではその両方の方法をご紹介します。

WordPressマルチサイトネットワークでユーザーを管理する

WordPressマルチサイトでは独自のユーザー管理設定が利用できます。中には分かりやすいものあれば、そうでないものもあります。

詳しく見ていきましょう。

マルチサイトネットワークの登録の設定

デフォルトでは、ネットワークへ新しいユーザーやサイトを追加できるのは特権管理者だけです。しかし、ユーザーが子サイトの購読者としてネットワークにアカウントを登録することを許可することはできます。

有効にするには「ネットワーク管理者」>「ネットワーク設定」>「登録の設定」>「新規登録の許可」を開き「ユーザーアカウントの新規登録を許可する」の項目にチェックを入れます。

ユーザーがネットワークにアカウントを登録することを許可

ユーザーがネットワークにアカウントを登録することを許可

ここでは、ログイン中のユーザーによる新規サイト登録を許可することもできます。サイトを作成する権限をあなたの設定したユーザーのみに制限したい場合、この項目にチェックを入れます。

最後の項目では、ネットワーク内でユーザーがアカウントを登録することとサイトを作成することの両方を許可します。ネットワーク内にサイトを作成したユーザーには子サイトの管理者権限が付与されます。

一つのユーザーアカウントでネットワーク全体にアクセス

ネットワーク内にユーザーアカウントを作成する時やユーザーがネットワーク内のサイトにアカウントを新規で登録する時、その新規ユーザーはログイン後、ネットワーク内の全てのサイトを閲覧できます。一つのアカウントを作成すれば同じユーザープロフィールで全てのグループにアクセスでき、サブレディットを閲覧できるFacebookやRedditなどのソーシャルネットワークを想像するとわかりやすいでしょう。

これはWordPressのマルチサイトを利用する主なメリットの一つです。一つのアカウントに登録するだけでユーザーはネットワーク内の全てのサイトにアクセスできます。

サイト管理者に追加の権限を付与する

「新規ユーザーの追加」にチェックを入れることで、サイト管理者は自分のサイトにユーザーを追加することを許可できます。

サイト管理者が自分の子サイトに新規ユーザーを追加するのを許可する

サイト管理者が自分の子サイトに新規ユーザーを追加するのを許可する

上述の通り、「ネットワーク設定」>「メニュー設定」で「管理メニューを有効化」>「プラグイン」からサイトの管理者に子サイト内のプラグインの管理権限を付与することができます。

子サイト単位でのユーザー登録

WordPressのマルチサイトのインストールでは、デフォルトではネットワーク全体のユーザー登録しかできません。子サイトの一つだけにユーザーを登録することができません。そこでNetwork Subsite User Registrationというプラグインを使います。

「Network Subsite User Registration」プラグイン

「Network Subsite User Registration」プラグイン

このプラグインを使用すると、子サイトの管理者は自分のサイトへのアクセスのみ許可された子サイト内限定のユーザーの登録ができるようになります。新しく追加されたユーザーはデフォルトで購読者の権限が付与されますが、プラグインの設定で変更することも可能です。

子サイトのみへアクセス可能なアカウントの登録を全てのユーザーに許可

子サイトのみへアクセス可能なアカウントの登録を全てのユーザーに許可

同一ユーザーを複数の子サイトに割り当て

同一のユーザーを複数のサイトに割り当て、個別の権限を付与することも可能です。ユーザーがサイトの管理画面にログインすると、「参加サイト」の画面で全てのサイトの管理画面にアクセスできます。

WordPressのマルチサイトネットワーク上の複数のサイトに同一のユーザーを割り当てられる

WordPressのマルチサイトネットワーク上の複数のサイトに同一のユーザーを割り当てられる

他のユーザーに特権管理者の権限を付与する

特権管理者は自分の権限を他のユーザーと共有することも可能です。ただしこの機能は信頼できる人物にのみ慎重に利用しましょう。

ネットワークの特権管理者の権限を他のユーザーに付与

ネットワークの特権管理者の権限を他のユーザーに付与

WordPressマルチサイトの全てのユーザー管理設定を理解することでより効率的にネットワークを管理することができます。WordPressマルチサイト向けの他の便利なプラグインをお探しの方はWordPressレポジトリを見てみるか、KinstaのおすすめのWordPressマルチサイトプラグインをご覧ください。

既存のWordPressの権限グループをカスタマイズする方法

既存の権限グループに権限を追加し、アクセス権を広げることもできます。例えば、編集者にプラグインを管理する権限を付与することができます。もしくは寄稿者に自分の投稿のコメントを管理する権限を付与することもできます。その方法を詳しくご紹介します。

補足情報:コードを扱いたくないという方は手動の方法を飛ばして、そのあとの権限グループと権限のプラグインに関するセクションへお進みください。または、WordPress開発者を雇用してもいいでしょう。

権限グループに権限を追加する方法

WordPressのadd_cap()関数を利用して権限グループや特定のユーザーに権限を追加することができます。Customize User Roleと名付けたカスタムプラグインを利用して、編集者にプラグインを管理する権限を付与する方法をご紹介します。

<?php

/*
Plugin Name:  Customize User Role
Version:  1.0
Description:  Demonstrating how to customize WordPress User Roles.
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  customize-user-role
*/

この設定はデータベース(wp_optionsテーブルのwp_user_rolesフィールド)に保存されるため、WordPressではこの関数はプラグインかテーマを有効化した時に実行することを推奨しています。ページを読み込む度にこの関数を実行するのは(データベーステーブルが毎回上書きされることになるので)非効率的です。

ここではプラグインを使用しているので、register_activation_hook()関数を使ってプラグインを有効化した時に実行される関数を登録します。他にも様々な方法がありますが、干渉が起きないように、堅牢なクラスベースの方法で実装します。

// this code runs only during plugin activation and never again
function sal_customize_user_role() {
    require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-user-role.php';   
    Sal_Customize_User_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_user_role' );

上記のコードは、プラグイン有効時にのみ1度だけ実行されます。フックの対象となる関数sal_customize_user_roleは Sal_Customize_User_Roleというカスタムクラスを参照します。

このクラスはclass-sal-customize-user-role.phpという名前の別のファイルで定義し、プラグインのルートフォルダの中のincludesというサブフォルダーに保存しましたが、名前は何でも構いません。

<?php

class Sal_Customize_User_Role {
    public static function activate() {
        // get the Editor role's object from WP_Role class
        $editor = get_role( 'editor' );

        // a list of plugin-related capabilities to add to the Editor role
        $caps = array(
                  'install_plugins',
                  'activate_plugins',
                  'edit_plugins',
                  'delete_plugins' 
        ); 

        // add all the capabilities by looping through them
        foreach ( $caps as $cap ) {
            $editor->add_cap( $cap );
        }
    }
}

上記のコードの詳しい説明は次の通りです。

プラグインファイルを全て保存し、管理者画面からプラグインを有効化します。編集者の管理画面にログインすると変化が分かります。

編集者が管理画面からプラグインの管理ができるように

編集者が管理画面からプラグインの管理ができるように

プラグイン関連の権限を権限グループに追加すると、編集者の管理画面にプラグインメニューが表示されるようになります。

編集者の管理画面上に「プラグインを追加」の画面が表示される

編集者の管理画面上に「プラグインを追加」の画面が表示される

WordPressサイトデータベース内のwp_optionsテーブルに保存されているwp_user_rolesキーの値を見ると、各権限グループに割り当てられた権限を確認することができます。

編集者に割り当てられた権限は次のように表示されます。

'editor' => 
  array (
    'name' => 'Editor',
    'capabilities' => 
    array (
      'moderate_comments' => true,
      'manage_categories' => true,
      // [...lines cut off for brevity...]
      'install_plugins' => true,
      'activate_plugins' => true,
      'edit_plugins' => true,
    ),
  ),

最後の3行を見ると編集者にプラグインの管理権限が付与されていることがわかります。

権限を削除したい場合は、register_deactivation_hook()関数にフックし、 remove_cap()関数を利用し、先程プラグインの有効化の際に権限を追加したのと同じように、プラグイン無効化時に権限を削除することができます。

権限グループに権限を追加する方法は既に学んだので、今後は権限グループの権限を削除する方法を見てみましょう。

補足情報:アクションフックafter_switch_themeを利用して、テーマ(または子テーマ)有効化の際にコードを適用することも可能です。その場合、コードはテーマもしくは子テーマ(推奨)のfunctions.phpファイルに含めます。

権限グループから権限を削除する

時に権限グループから権限を削除したいこともあります。権限グループ、または特定のユーザーから権限を削除するにはremove_cap()関数を利用します。例えば、投稿者からdelete_published_postsの権限を削除したいとします。

実際にやってみましょう。

まずはCustomize Author Roleという名前の新しいカスタムプラグインを作成します。前回と同じように、このコードはregister_activation_hook()関数にフックして一度だけ実行します。

<?php

/*
Plugin Name:  Customize Author Role
Version:  1.0
Description:  Demonstrating how to customize WordPress Author Role.
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  customize-author-role
*/

// this code runs only during plugin activation and never again
function sal_customize_author_role() {
    require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-author-role.php';
    Sal_Customize_Author_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_author_role' );

次に、class-sal-customize-author-role.phpファイル内で Sal_Customize_Author_Roleクラスを定義します。上記のメインプラグインファイルで両方のリソースを参照しました。

<?php
class Sal_Customize_Author_Role { 
    public static function activate() {
        // get the Editor role's object from WP_Role class
        $author = get_role( 'author' );
 
        // remove the capability to delete published posts from an Author role
        $author->remove_cap( 'delete_published_posts' );
    }
}

remove_cap( 'delete_published_posts' )関数によって投稿者の公開済みの投稿を削除する権限が削除されます。

投稿者はデフォルトでは自分の公開済みの投稿を削除することが可能

投稿者はデフォルトでは自分の公開済みの投稿を削除することが可能

全てのプラグインファイルを保存しプラグインを有効化します。投稿者の管理画面にログインすると変化が分かるでしょう。

投稿者は自分の公開済みの投稿を削除することができなくなる

投稿者は自分の公開済みの投稿を削除することができなくなる

投稿者の公開した投稿のゴミ箱のオプションが利用できなくなっています。ただし、下書きもしくはレビュー待ちステータスの未公開の記事は削除することができます。

投稿者は未公開の投稿であれば削除可能

投稿者は未公開の投稿であれば削除可能

この権限も削除したいという場合は、投稿者の権限からdelete_postsの権限も削除する必要があります。

特定のユーザーの権限を追加/削除する

権限グループ全体ではなく、特定のユーザーに権限を追加したい場合、WP_User::add_cap()クラス関数を利用します。

// get the user object by their ID
$user = new WP_User( $user_id ); 

// add the capability to the specific user
$user->add_cap( $cap );

get_user_by()関数を使用してユーザーのメールアドレス、ログインユーザー名、スラッグを利用してIDを呼び出すことができます。

同様にWP_User::remove_cap()クラス関数を利用すると特定のユーザーの権限を削除することができます。

// get the user object by their ID
$user = new WP_User( $user_id );

// add the capability to the specific user
$user->add_cap( $cap );

先程と同じように、コードの最適化のために、このコードはプラグイン、またはテーマを有効化した時のみ実行するようにしましょう。

補足情報:add_cap()remove_cap()WP_Roleクラスのオブジェクトメソッドです。コードで直接呼び出すことはできません。 get_role() 関数、もしくはグローバル変数$wp_rolesのいずれかを使用してアクセスする必要があります。

権限グループを複製する

既存の権限グループを全てコピーして新たな権限グループを作成することもできます。その方法は次の通りです。

add_role( 'clone', 'Clone', get_role( 'administrator' )->capabilities );

上記の例では、管理者と同じ権限を持つCloneという新たな権限グループを作成しています。テーマやプラグインを有効化する際にこのコードを実行することで、この複製された権限は一度だけ追加されます。

WordPressでオリジナルの権限グループを作る方法

既存のユーザーの権限を編集するのが、権限をカスタマイズする一番手っ取り早い方法です。しかし、多くの権限を編集したい場合は、新たな権限グループを一から作るのがよいでしょう。そうすることで、サイト上で必要な全てのユーザーの権限を正確に設定することができます。

新しい権限グループを作成するにはadd_role() 関数を使用します。この関数には3つのパラメーターが利用できます。

add_role(  $role, $display_name, $capabilities );

最初の2つのパラメーターは関数を実行するために必ず定義しなければなりません。それぞれ新しい権限グループの名前と表示名です。最後のパラメーターは任意の設定で、配列でなければなりません。これを使って、新たな権限グループの全ての権限を割り当てることができます。

ここではサイト上全てのコメントの管理、投稿の編集ができるCommunity Managerというオリジナルの権限グループを作成してみましょう。実際にやり方をご説明します。

<?php

/*
Plugin Name:  Add Community Manager Role
Version:  1.0
Description:  Add a Custom User Role called 'Community Manager'
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  add-community-manager-role
*/

// this code will run only once on plugin activation and never again
function add_community_manager_role() {
    add_role(
         'community_manager',
         __('Community Manager', 'add-community-manager-role'), 
         array( 
              'read' => true,
              'moderate_comments' => true,
              'edit_posts' => true,
              'edit_other_posts' => true,
              'edit_published_posts' => true
         )
    );
}
register_activation_hook( __FILE__, 'add_community_manager_role' );

先程と同じように、add_role()関数はプラグイン有効化の時にのみ一度だけ実行されます。ファイルを保存しプラグインを管理者の画面から有効化します。新規ユーザー、既存ユーザーの両方にCommunity Managerの権限を付与できるようになっているはずです。

新規ユーザーにオリジナルの権限グループを割り当てる

新規ユーザーにオリジナルの権限グループを割り当てる

既存ユーザーにオリジナルの権限グループを割り当てる

既存ユーザーにオリジナルの権限グループを割り当てる

また、データベース内wp_optionsテーブルのwp_user_rolesフィールドの値を見ると、この新たな権限グループに付与された権限を確認することもできます。私のサイトのデータベースでは次のようになっています。

array (
  'administrator' => 
    // [...]
  'editor' => 
    // [...]
  'author' => 
    // [...]
  'contributor' => 
    // [...]
  'subscriber' => 
    // [...]
  'community_manager' => 
  array (
    'name' => 'Community Manager',
    'capabilities' => 
    array (
      'read' => true,
      'moderate_comments' => true,
      'edit_posts' => true,
      'edit_other_posts' => true,
      'edit_published_posts' => true,
    ),
  ),
)  

コードの最後尾に先程追加した新しい権限グループとその権限が記載されています。この権限グループに権限を追加/削除することでさらにカスタマイズすることもできます。

新規の権限グループを試してみる

新たな権限グループを実際のユーザーに割り当てる前に、思った通りに機能するかどうか試してみる必要があります。テストの際にチェックするべき項目は次の通りです。

  1. 新たな権限グループを割り当てるためのテストユーザーアカウントを作成します。
  2. テストユーザーのアカウントにログインし、全ての権限が思った通りに機能するかどうか確認します。例えば、公開済みの投稿を編集する権限を付与した場合、任意の投稿を開き、編集できるかどうか確認します。付与した権限が多いほど、テストにかかる時間は長くなるでしょう。
  3. 次に、ブラウザから直接、上位の権限グループのリンクへ試しにアクセスしてみます。WordPressの設定画面に直接アクセスしようと試みたところ、予想通りアクセスできませんでした。「denied access(アクセス拒否)」のメッセージが表示されます。
  4. テストが完了したらテストユーザーアカウントを削除します。

たったのこれだけです!問題なければサイトのユーザーに実際に新たな権限グループを割り当てましょう。

User SwitchingView Admin Asプラグインを使用するとワンクリックで簡単にサイト上の様々なユーザーに切り替えることができます。複数のユーザーの権限を確認するのに大変便利です。これについては、後ほど詳しくご説明します。

WordPressマルチサイトでオリジナルの権限グループを作成する

WordPressマルチサイトでは、シングルサイトと権限グループの扱いが若干異なります。先程ご説明したadd_role()関数でオリジナルの権限グループを作成する方法は利用できますが、新しい権限グループはネットワークのメインサイト(最初に作成したサイト)にしか適用できず、ネットワーク上の他の子サイトには適用されません。

コールバック関数内のコードが確実にネットワーク上の全てのサイトに適用されるようにするには、ネットワーク上のサイト一つ一つについてループ処理をして、強制的に実行させる必要があります。今回は例として、プラグインを管理するための全ての権限を付与したPlugin Managerという新しい権限グループを作成しました。

<?php

/*
Plugin Name:  Add Plugin Manager Role
Version:  1.0
Description:  Add a custom user role named Plugin Manager in a WordPress Multisite Installation
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  add-plugin-manager-role
*/

/* 
make the code run on every site in the network
when the plugin is Network Activated
*/
function add_plugin_manager_role( $network_wide ) {
 
     if ( is_multisite() && $network_wide ) { 
         // run the code for all sites in a Multisite network
         foreach ( get_sites(['fields'=>'ids']) as $blog_id ) {
             switch_to_blog( $blog_id );
                 add_role(
                      'plugin_manager',
                      __('Plugin Manager', 'add-plugin-manager-role'),
                      array( 
                           'install_plugins' => true,
                           'activate_plugins' => true,
                           'edit_plugins' => true,
                           'delete_plugins' => true
                      )
                 );
             }
             restore_current_blog();
     }
     else {
         add_role(
              'plugin_manager',
              __('Plugin Manager', 'add-plugin-manager-role'),
              array( 
                   'install_plugins' => true,
                   'activate_plugins' => true,
                   'edit_plugins' => true,
                   'delete_plugins' => true
              )
         );
     }
}
register_activation_hook( __FILE__, 'add_plugin_manager_role' );

上記のコードを詳しく見ていきましょう。

プラグインファイルを保存し、「サイトネットワーク管理」>「プラグイン」画面からカスタムプラグインを「ネットワークで有効化」します。その後、任意のサイトの「ユーザー」タブを開き、新しい「Plugin Managerという権限グループが利用できるかどうか確認しましょう。

既存のサイトユーザーの権限を新たな権限グループに変更

既存のサイトユーザーの権限を新たな権限グループに変更

子サイトの新規ユーザーにオリジナルの権限グループを割り当てる

子サイトの新規ユーザーにオリジナルの権限グループを割り当てる

この新たな権限グループがネットワーク内の他のサイトでも利用可能かどうかを確認したところ問題ありませんでした。

子サイトの既存のユーザーに新しい権限グループを割り当てる

子サイトの既存のユーザーに新しい権限グループを割り当てる

サイトのデータベースを覗くと、新しい権限グループを確認することができます。ただし、シングルサイトとは異なり、WordPressのマルチサイトでは、各子サイトに個別のwp_optionsテーブルが作成されます。

WordPressのマルチサイトデータベースで権限グループが保存されている場所

WordPressのマルチサイトデータベースで権限グループが保存されている場所

子サイト専用のテーブルはwp_2_optionswp_3_optionswp_4_optionsとして表示されます。同じように、権限グループと権限はそれぞれのフィールドにwp_2_user_roleswp_3_user_roleswp_4_user_rolesとして表示されます。

これでネットワーク内全てのサイトで利用できる権限グループを定義できましたが、これから新規で作成するサイトはどうなるのでしょうか?ネットワーク内に新規で作成されたサイトにもこのオリジナルの権限グループが適用されるようにするには、プラグインに次のコードを付け足しましょう。

// run the code once again when a new site is created
function add_custom_user_role_new_site( $blog_id ) { 
    // check whether the plugin is active for the network
    if ( is_plugin_active_for_network( 'add-custom-user-role/add-custom-user-role.php' ) ) {
        switch_to_blog( $blog_id );
        add_role(
             'plugin_manager',
             __('Plugin Manager', 'add-plugin-manager-role'),
             array( 
                  'install_plugins' => true,
                  'activate_plugins' => true,
                  'edit_plugins' => true,
                  'delete_plugins' => true
             )
        );
        restore_current_blog();
    }
}
add_action( 'wpmu_new_blog', 'add_custom_user_role_new_site' );

WordPressから権限グループを削除する方法

remove_role( ) 関数を使用するとWordPressの権限グループを削除できます。引数として指定できるのは権限グループ名のみです。例えば、サイト上の任意の場所に次のコードを記述すると寄稿者の権限グループを削除することができます。

remove_role( 'contributor' );

プラグインかテーマの有効化と同時に実行しないとデータベースが毎回アップデートされてしまうadd_role()関数とは異なり、remove_role()関数は該当の権限グループが存在する場合のみ実行されます。引数として渡された権限グループは一度実行されると必ず削除されるので、この関数を実行する場所について悩む必要はありません。

ただし、将来的に不具合が発生するのを防ぐため、権限グループがデータベースから削除されたら、このコードは削除してしまいしょう。

WordPressでカスタム権限を作成する

大抵の場合は既存の権限グループを編集するか、WordPressのデフォルトの権限を利用して新しい権限グループを作成するかで事足りるでしょう。しかし時には、(プラグインやテーマを使用して)独自のカスタムコードで導入した機能のために新たな権限を定義したいこともあるかもしれません。

その場合はカスタム権限を利用して新たな権限グループを定義したり、既存の権限グループに追加したりすることができます。

例えば、WooCommerceでは膨大なeコマースの機能とともにカスタム権限が利用できます。カスタム権限には次のようなものがあります。

これらの権限を利用し、2つの新たな権限グループ「Customerと「Shop Managerが追加されます。

WooCommerceでは独自の権限グループが追加される

WooCommerceでは独自の権限グループが追加される

Customerの権限は、自分のアカウント情報を編集でき、現在/過去の注文情報を閲覧できるという点を除いては、購読者とほとんど同じです。Shop Managerには編集者に付与された全ての権限に加え、WooCommerceに関する権限が全て付与されます。

カスタム権限/権限グループを導入しているプラグインには他にもThe Events CalendarVisual PortfolioWPMLWP ERPなどがあります。

これらのプラグインのドキュメンテーションを見ると、ほとんど全てのカスタム権限はそれぞれのプラグインで定義されるカスタム投稿タイプと結びついていることが分かります。WooCommerceの場合、商品注文のカスタム投稿タイプで、他のプラグインではそれぞれ、イベントポートフォリオ翻訳顧客となります。

続いては、カスタム投稿タイプに紐づいたカスタム権限を作成する方法をご紹介します。

まず、プラグインを設定し、必要なカスタム投稿タイプを登録します。ここでは、Storiesという新たなカスタム投稿タイプを登録しました。

<?php

/*
Plugin Name:    Custom Post Type and Capabilities
Version:        1.0
Description:    Register a custom post type and define custom capabilities tied into it.
Author:         Salman Ravoof
Author URI:     https://www.salmanravoof.com/
License:        GPLv2 or later
License URI:    https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:    custom-post-type-capabilities
*/

// register a custom post type, in this case it's called "story" //
function cpt_story_init() {
    $labels = array(
        'name'                  => _x( 'Stories', 'custom-post-type-capabilities' ),
        'singular_name'         => _x( 'Story', 'custom-post-type-capabilities' ),
        'menu_name'             => _x( 'Stories', 'Admin Menu text', 'custom-post-type-capabilities' ),
        'name_admin_bar'        => _x( 'Story', 'Add New on Toolbar', 'custom-post-type-capabilities' ),
        'add_new'               => __( 'Add New', 'custom-post-type-capabilities' ),
        'add_new_item'          => __( 'Add New Story', 'custom-post-type-capabilities' ),
        'new_item'              => __( 'New Story', 'custom-post-type-capabilities' ),
        'edit_item'             => __( 'Edit Story', 'custom-post-type-capabilities' ),
        'view_item'             => __( 'View Story', 'custom-post-type-capabilities' ),
        'all_items'             => __( 'All Stories', 'custom-post-type-capabilities' ),
        'search_items'          => __( 'Search Stories', 'custom-post-type-capabilities' ),
        'parent_item_colon'     => __( 'Parent Stories:', 'custom-post-type-capabilities' ),
        'not_found'             => __( 'No stories found.', 'custom-post-type-capabilities' ),
        'not_found_in_trash'    => __( 'No stories found in Trash.', 'custom-post-type-capabilities' ),
        'featured_image'        => _x( 'Story Cover Image', 'custom-post-type-capabilities' ),
        'set_featured_image'    => _x( 'Set cover image', 'custom-post-type-capabilities' ),
        'remove_featured_image' => _x( 'Remove cover image', 'custom-post-type-capabilities' ),
        'use_featured_image'    => _x( 'Use as cover image', 'custom-post-type-capabilities' ),
        'archives'              => _x( 'Story archives', 'custom-post-type-capabilities' ),
        'insert_into_item'      => _x( 'Insert into story', 'custom-post-type-capabilities' ),
        'uploaded_to_this_item' => _x( 'Uploaded to this story', 'custom-post-type-capabilities' ),
        'filter_items_list'     => _x( 'Filter stories list', 'custom-post-type-capabilities' ),
        'items_list_navigation' => _x( 'Stories list navigation', 'custom-post-type-capabilities' ),
        'items_list'            => _x( 'Stories list', 'custom-post-type-capabilities' ),
    );
 
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'menu_icon'          => 'dashicons-book',   
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'story' ),
        'capability_type'    => array ( 'story', 'stories' ),
        'map_meta_cap'       => true,
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 6,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
        'show_in_rest'       => true,
    );
 
    register_post_type( 'story', $args );
}
 
add_action( 'init', 'cpt_story_init' );

詳しい説明は次の通りです。

次に、Storiesというカスタム投稿タイプにアクセスできる権限グループにカスタム権限を追加する必要があります。ここでは、管理者と編集者にこの権限を付与します。

クライアントサイト向けに、高速、安全、開発者に優しいホスティングが必要ですか?KinstaはWordPress開発者を念頭に置き構築されており、豊富なツールと強力なダッシュボードが搭載されています。まずは、当社のホスティングプランをご覧ください。

// add the custom capabilities to the desired user roles 
$roles = array( 'editor','administrator' );

foreach( $roles as $the_role ) {      
    
    $role = get_role($the_role);
            
            $role->add_cap( 'read' );
            $role->add_cap( 'read_story');
            $role->add_cap( 'read_private_stories' );
            $role->add_cap( 'edit_story' );
            $role->add_cap( 'edit_stories' );
            $role->add_cap( 'edit_others_stories' );
            $role->add_cap( 'edit_published_stories' );
            $role->add_cap( 'publish_stories' );
            $role->add_cap( 'delete_others_stories' );
            $role->add_cap( 'delete_private_stories' );
            $role->add_cap( 'delete_published_stories' );
}

ファイルを保存しプラグインを有効化します。すると、管理者と編集者の管理画面上にStoriesのリンクと画面が表示されるはずです。

WordPress管理画面上の「Stories」のカスタム投稿タイプ画面

WordPress管理画面上の「Stories」のカスタム投稿タイプ画面

サイト上で利用できる権限を確認すると、追加した全てのstories関連の権限が表示されているはずです。ここではView Admin Asプラグインを使って権限をチェックします。

「Stories」カスタム投稿タイプに関連したカスタム権限

「Stories」カスタム投稿タイプに関連したカスタム権限

こちらのGistからこのプラグインの完全版をダウンロードできます。ここではカスタム権限を指定したProjectsというカスタム投稿タイプを登録しています。そしてそれをStudentsTeachersという2つの権限グループに付与することで、教育関連のサイトが作れるようになっています。

権限グループに応じてプラグインの設定へアクセスできるカスタム権限を定義する方法も存在します。その方法については、今回の記事の主旨から外れてしまうのでここではご紹介しませんが、気になる方はStackExchangeのこちらのスレッドをご覧ください。

おすすめのWordPress権限グループ/権限関連プラグイン

コードを利用してユーザーグループ権限や権限を調整する方法を知っているに越したことはありませんが、全員がコードを使いこなせるわけではありません。適正にコードを記述しないと、大変なことになりかねません。しかし、プラグインを使用する場合でも、WordPressの権限グループと権限の仕組みを知っておくことは非常に重要です。

ここからは簡単に権限グループと権限を管理できる人気のWordPressプラグインをご紹介します。権限グループと権限を簡単にテストできる便利なプラグインも合わせていくつかご紹介します。

User Role Editor(開発者:Vladimir Garagulia)

WordPressプラグイン「User Role Editor」

WordPressプラグイン「User Role Editor」

User Role EditorはWordPressのレポジトリで最も人気な、権限グループ、権限管理プラグインです。ワンクリックで誰でも簡単に権限グループや権限を編集できるシンプルなインターフェースのプラグインです。

プラグインをインストール、有効化したら、管理画面の「ユーザー」>User Role Editorを開きメインインターフェースにアクセスします。

User Role Editorの管理画面

User Role Editorの管理画面

上記の管理画面の概要は以下の通りです。

  1. ドロップダウンメニューからカスタマイズしたい権限グループを選択します。デフォルトの権限グループだけでなく、データベースに存在する全ての権限グループが表示されます。権限を定数ではなく概説で表示することも可能です。WordPressの最新バージョンでは非推奨となっている権限も表示するオプションも選べます。
  2. User Role Editorでは全ての権限が左側にカテゴリー毎に表示されます。コアカテゴリーには全てのデフォルトの権限が含まれます。私の場合WooCommerceをサイトにインストールしているので、それに紐づいたカスタム投稿タイプの権限も表示されます。User Role Editor自体のカスタム権限も表示されます。
  3. 右側には全ての権限が一覧で表示されます。ALLのグループを選択しているため全ての権限が表示されていますが、左側のグループをクリックすることでフィルターをかけることもできます。Granted Onlyのオプションにチェックを入れると、いずれの権限グループにも使用されていない権限を隠すことができます。
  4. また権限グループの追加権限グループ名変更権限の追加権限の削除もここからできます。一番下には権限グループのHide admin bar(管理バーを非表示にする)オプションも選択できます。
権限を概説で表示

権限を概説で表示

権限グループをカスタマイズしたいときは必要な権限にチェックを入れたり外したりして、更新ボタンを押すだけで変更を保存できます。このようにとても簡単です。

User Role Editorで新しい権限グループを追加

User Role Editorで新しい権限グループを追加

新しい権限グループを作成するには権限グループの追加をクリックします。一から権限グループを作成することもできますし、ドロップダウンメニューのコピー元を選んで複製することもできます。

「表示する権限名」を簡単に変更

「表示する権限名」を簡単に変更

権限グループ名変更からは表示する権限名を変更することができます。ただし、権限グループ名(IDは変更できません。そのため、権限グループ名を変更したい場合は、元の権限グループを複製して、変更してから削除するとよいでしょう。

User Role Editorで新しい権限を追加

User Role Editorで新しい権限を追加

権限の追加ボタンからは新しい権限を追加できます。

割り当てられていないユーザー権限を簡単に削除

割り当てられていないユーザー権限を簡単に削除

権限の削除からはどのユーザーにも割り当てられていないカスタム権限グループを削除することができます。

補足情報:User Role EditorではWordPressのデフォルトの権限グループや権限を削除することはできません。また、いずれかのユーザーに割り当てられているカスタム権限グループや、管理者以外の権限グループに割り当てられている権限も削除することはできません。

User Role Editorの「権限の削除」ボタン

User Role Editorの「権限の削除」ボタン

権限の削除ボタンは、その権限が管理者以外のユーザーに割り当てられていない場合のみ表示されます。割り当てられている場合は表示されません。

同じユーザーに複数の権限グループを割り当てることも、一つも割り当てないこともできます。

ユーザーから権限グループを奪う

ユーザーから権限グループを奪う

ユーザーに複数の権限グループを割り当てるには管理画面のユーザーを開き、ユーザー名にマウスを当てると下に表示される権限のリンクをクリックします。

同じユーザーに複数の権限グループを割り当てる

同じユーザーに複数の権限グループを割り当てる

管理者画面の「設定」>User Role Editorを開くと、User Role Editorプラグインの他のオプションも選べます。

User Role Editorの「一般設定」

User Role Editorの「一般設定」

ここではプラグインの一般設定の変更、追加モジュールのインストール、新規ユーザーに割り当てられるデフォルトの権限グループの変更、さらには権限グループと権限をデフォルトに戻すこともできます。

追加モジュールではUser Role Editorの機能の拡張が可能

追加モジュールではUser Role Editorの機能の拡張が可能

新規ユーザーのデフォルト権限グループを設定

新規ユーザーのデフォルト権限グループを設定

権限グループと権限をデフォルト設定にリセット

権限グループと権限をデフォルト設定にリセット

多くの場合はUser Role Editorの無料版で十分ですが、有料版 ではWordPressマルチサイトでの権限グループや権限の管理機能など、より多くの機能が利用できます。

MemberPress提供のMembers

MemberPress提供のWordPressプラグイン「Members」

MemberPress提供のWordPressプラグイン「Members」

Membersは会員制サイトに特化したWordPress向け権限グループ/権限プラグインです。元々はシンプルな権限グループ/権限管理用のプラグインとして開発されましたが、その後、方向転換し、会員制サイトの機能に重点を置くようになりました。

Membersの「Roles」画面

Membersの「Roles」画面

プラグインをインストールし有効化したら、管理画面の「Members>Roles からサイト上の全ての権限グループを閲覧できます。

Membersでは管理者、そして、新規ユーザーにデフォルトで付与される権限グループ(「Default Role」と表示される)を除き、WordPressの標準の権限グループを含めて全ての権限グループを削除することができます。また、権限グループの編集複製の他、特定の権限グループを割り当てられたユーザーの一覧を表示することもできます。

Membersの「Edit Role」画面

Membersの「Edit Role」画面

Edit Role画面ではチェックボックスのチェックを入れたり外したりすることで、特定の権限グループに対して権限を追加/削除することができます。また、ここから権限グループに対してカスタム権限を付与することもできます。

Membersの「Add New Role」画面

Membersの「Add New Role」画面

Add New Roleをクリックすると同じような画面に移動し、表示名、ID、付与する権限を指定して新たな権限グループを作成することができます。

Membersの「General Settings」画面

Membersの「General Settings」画面

User Role Editorと同じように、Membersでもユーザーに複数の権限グループを割り当てることができます。また、特定の権限グループに属するユーザーのみにコンテンツの閲覧を限定する、コンテンツの閲覧制限も設定できます。

Membersでは「Private Site」モードも利用できる

Membersでは「Private Site」モードも利用できる

サイトとフィードをプライベートの設定にすることもできます。さらに、アクセス認証を要求することで、外部からのWordPressのREST APIへのアクセスを制限することもできます。

Membersプラグインの様々なアドオン

Membersプラグインの様々なアドオン

Membersは素晴らしいアドオンが揃っているという点が他の権限関連のプラグインと異なります。ユーザープライバシーや個人情報管理(GDPR)、タグやカテゴリーに関する権限の追加、権限グループのヒエラルキーの構築など、様々な機能を追加することができます。

Membersは人気のWordPressプラグインと連携可能

Membersは人気のWordPressプラグインと連携可能

またMembersは人気のWordPressプラグインとシームレスに連携することができます。例えば、Advance Custom Fields (ACF) プラグイン用のカスタム権限を作成、管理するのに利用できます。他にもEasy Digital Downloads、GiveWP、Meta Box、WooCommerceなどとも連携できます。

Members会員制サイト専用アドオン(支払い、定期購読、メールマーケティング、詳細コンテンツ保護ルール)が利用できるのは有料版のみです。

WPFront User Role Editor

プラグイン「WPFront User Role Editor」

プラグイン「WPFront User Role Editor」

WPFront User Role Editorは、WordPressサイトでの権限グループの作成、編集、削除をサポートしてくれるプラグインです。主な機能はこれまでご紹介してきたプラグインと似ていますが、特筆すべき独自の機能が2つあります。

特定の権限グループの全てのユーザーを別の権限グループに全員移行

特定の権限グループの全てのユーザーを別の権限グループに全員移行

WPFront User Role Editorをインストールし有効化したら、管理画面から「ユーザー」>Assign / Migrateへ移動し、特定の権限グループに属する全てのユーザーを別の権限グループに移行することができます。さらに、ユーザーに2つ目の権限グループを割り当てることもできます。

大勢のユーザーを特定の権限グループから移行する必要がある場合、この機能は非常に便利です。

WPFront User Role Editorの「Login Redirect」設定

WPFront User Role Editorの「Login Redirect」設定

もう一つのWPFront User Role Editorの便利な機能は、権限グループに基づいたLogin Redirect(ログイン時のリダイレクト)機能です。例えば、投稿者がログインした時に直接投稿画面にリダイレクトすることができます。また、/wp-adminページへのアクセスと、フロントエンドツールバーの閲覧をブロックするオプションも利用できます。

Advanced Access Manager

「Advanced Access Manager」プラグイン

「Advanced Access Manager」プラグイン

Advanced Access Manager(AAM)はサイトのほとんど全ての要素をコントロールできる強力なWordPressプラグインです。200以上の独特な機能が備わっていて、権限グループや権限の仕組みを熟知している上級者向けの設計になっています。

これまでご紹介したプラグインと比べるとAAMにはかなり多くの機能が備わっていますが、開発者向けのプラグインなので、初級者〜中級者にとってはそれほど使いやすくはありません。

Advanced Access Managerのメインの管理画面

Advanced Access Managerのメインの管理画面

AAMのメインの管理画面は4つのセクションに分けられます。上の図に振った番号に該当する概要の説明は以下の通りです。

  1. 一番上のエリアには現在検討中の対象が表示されます。ここでは「Role: Administrator」(権限グループ:管理者)ですが、特定のユーザー、匿名の訪問者、全員に適用されるデフォルトの設定の場合もあります。
  2. メインの画面のタイトルの下のエリアには、対象となるグループやユーザーのサイト上の様々なアクセス権を管理できる全ての設定が表示されます。
  3. 3つ目のエリアはユーザー/権限グループを管理するエリアです。タブのアイコンで管理したいアクションを選択できます。権限グループでしょうか、特定のユーザーでしょうか、匿名の訪問者でしょうか、それとも全員へ適用されるデフォルトのアクセス権限でしょうか?
  4. 4つ目のエリアはAAM設定の管理、有料アドオンのインストール、サポートへの問い合わせのエリアです。
Advanced Access Managerの「Settings」画面

Advanced Access Managerの「Settings」画面

AAMではその動作と目的に応じて設定を5つのグループに整理しています。

Advanced Access Managerの「Add-ons」画面

Advanced Access Managerの「Add-ons」画面

AAMはシンプルな権限グループ/権限用のプラグインを超える開発者向けのプラグインです。各権限グループがサイト上でできること、できないことを細かく設定することができます。

サイトの安全性を維持するために「Access Policy」をインストール

サイトの安全性を維持するために「Access Policy」をインストール

サイトのアクセスとセキュリティのポリシー を設定するのにAAMを利用することもできます。どの権限グループがどのような状況下でサイトのリソースにアクセスできるかを定義できます。すぐに始めたいという方はアクセスポリシーをAAM Access Policy Hubからインストールすることができます。

フロントエンドにログインフォームを追加する「AAM Secure Login」ウィジェット

フロントエンドにログインフォームを追加する「AAM Secure Login」ウィジェット

AAMでは一時的なユーザーアカウント/権限グループを作成することができます。これはアカウントを外部のリソースと共有する安全な方法です。一時的なユーザーアカウントは設定した期限が到来すると期限切れになります。一時的な権限グループが付与されている場合、設定された期限が到来するとそのユーザーからは該当する権限が奪われます。

AAMの全ての機能をご紹介すると記事の主旨から外れてしまうので省略しますが、その豊富な機能の詳細をもっと知りたいという方はAdvanced Access Managerのドキュメンテーションをご覧ください。

ヒント:Advanced Access Managerの代替ツールにはUser Access Managerがあります。ただし、機能はAAMより少なく、アップデートも頻繁に行われていません。

User Switching

WordPressプラグイン「User Switching」

WordPressプラグイン「User Switching」

User Switchingもまた、ワンクリックでWordPressユーザーアカウントを切り替えられるプラグインです。たくさんの権限グループや権限を試す場合このプラグインを使えばかなりの時間を節約できます。User SwitchingはWordPressに元から備わっているクッキー認証システムを利用して切り替える前のアカウントを記憶し、すぐに戻すことができる仕組みです。

プラグインをインストール、有効化した後に、管理画面の「ユーザー」メニューを開きます。各ユーザーのところに「切り替え」というリンクが表示されます。クリックすると好きなユーザーに切り替えることができます。

好きなユーザーに切り替えるには「切り替え」をクリック

好きなユーザーに切り替えるには「切り替え」をクリック

管理画面もしくはユーザープロフィール画面に表示される「に戻す」というリンクをクリックすると元のアカウントに戻すことができます。

元のアカウントに簡単に切り替え可能

元のアカウントに簡単に切り替え可能

切り替えを元に戻す」をクリックすると管理者アカウントを一時的に切り替え、訪問者にフロントエンドがどのように表示されるかを確認できます。

アカウントをワンクリックで切り替え

アカウントをワンクリックで切り替え

安全策として、ユーザーを編集する権限を持つユーザーしかユーザーアカウントの切り替えができません。デフォルトでこの権限を持つのは、WordPressの、シングルサイトの場合は管理者のみで、マルチサイトの場合は特権管理者のみです。

さらに切り替え作業を簡素化するためにはAdmin Bar User Switchingという拡張機能をインストールして、管理バーに「Switch to user」リンクが表示されるようにすることもできます。

管理バーに「Switch to user」のリンクを表示

管理バーに「Switch to user」のリンクを表示

View Admin As

WordPressプラグイン「View Admin As」

WordPressプラグイン「View Admin As」

View Admin Asは権限グループ/権限管理の機能も備えた上級者向けの切り替えプラグインです。User Switchingとは異なり、管理バーにユーザー切り替えメニューを表示するのに拡張機能のインストールは必要ありません。View Admin Asでは、デフォルトで管理バーに全てのメインメニュー項目が表示されます。

管理バーに「View As」メニューを表示

管理バーに「View As」メニューを表示

その権限グループのユーザーが存在しない場合でも、既存のユーザーや権限グループ間を(権限を引き受けて)切り替えることができます。「Site visitorのリンクをクリックすると、サイトのフロントエンドが表示され、ブラウザのタブを離れず通常のユーザーとしてサイトの機能を試せます。

View Admin Asでは一時的に自分の権限を変更することができます。従来の権限を破壊することなく切り替え、元の権限は失われません。

現在のユーザーの権限を一時的にカスタマイズ

現在のユーザーの権限を一時的にカスタマイズ

特定のユーザーアカウントに切り替えた後、画面の設定を直接メニューから編集することができます。フロントエンドとバックエンドの言語/地域を別々に切り替えることも可能です。

様々なオプションを組み合わせ同時に適用することができるため、特定の1つの閲覧方法に限定されません。

View Admin Asでは必要に応じて2つのオプションモジュールを有効にすることができます。

View Admin Asの設定とオプションモジュール

View Admin Asの設定とオプションモジュール

1つ目のモジュールでは全ての権限グループにデフォルトの画面を設定できるRole Defaults機能が追加できます。これを権限グループや個別のユーザー、将来的な新規ユーザーに適用することが可能です。

2つ目のモジュールではRole Manager機能を追加できます。このモジュールで加えた権限グループや権限への変更は永続的なものとなります。他の権限グループ編集のプラグインと異なり、このモジュールではユーザーを自動で他の権限グループに移行することで、ユーザーに付与された権限グループを削除できます。

この拡張機能についてもっと知りたい方はView Admin Asのドキュメンテーションをご参照ください。

MyKinstaの権限グループ

MyKinstaのマルチユーザー機能では、同一ユーザーアカウントで複数のユーザー権限を作成、管理しKinstaアカウントの独自の機能やKinstaでホストしている特定のサイトへのアクセス権を付与することができます。

様々な権限グループを選ぶことができ、ニーズに応じてユーザーのアクセス権限をカスタマイズできます。

MyKinstaダッシュボードの「ユーザー管理」画面

MyKinstaダッシュボードの「ユーザー管理」画面

最初のユーザーにはデフォルトで「企業の所有者」権限が付与されます。これは、最も権限の大きな権限グループであり、「企業の管理者」の全ての権限が付与されます。

「企業の所有者」は一度に一人しかなれませんが、必要に応じて他の「企業の管理者」に権限グループを移譲することはできます。そうすることで同時に、新しい(元々は「企業の管理者」である)「企業の所有者」にKinstaアカウントの所有権を譲渡することになります。

Kinstaにアカウントの削除を依頼できるのは「企業の所有者」だけです。

他の権限グループも大きく2つの権限グループカテゴリーに分けることができます。

企業レベルの権限グループはKinstaアカウントの企業レベルの情報にアクセスできます。一方、サイトレベルの権限グループは、ユーザーに割り当てられた特定のサイトにのみアクセスできます。新しいユーザーを招待する時や、既存のユーザーを編集する時に最初に考慮すべきは「企業」レベルのアクセスを付与するか、「サイト」レベルのアクセスを付与するかです。

MyKinstaにユーザーを招待する際に権限グループの種類を選択

MyKinstaにユーザーを招待する際に権限グループの種類を選択

企業レベルの権限グループ

企業の管理者

MyKinstaの「企業の管理者」の管理画面

MyKinstaの「企業の管理者」の管理画面

企業の管理者はMyKinstaでもっとも高い権限レベルのグループです。Kinstaのアカウントと全てのサイトに対する完全な管理権限を持ちます。この権限グループは信頼できる人物にしか付与してはいけません。

企業の開発者

MyKinstaの「企業の開発者」の管理画面

MyKinstaの「企業の開発者」の管理画面

企業の開発者サイトの削除を含め全てのサイトの管理権限が付与されています。MyKinstaの権限グループはヒエラルキーに基づいているので、企業の開発者はサイトレベルのユーザーの管理権限も持ちます。ただし、企業の開発者は、企業の設定や支払い情報にはアクセスできません。

企業の課金担当者

MyKinstaの「企業の課金担当者」の管理画面

MyKinstaの「企業の課金担当者」の管理画面

企業の課金担当者には、企業の支払い情報と設定画面のみへのアクセス権が付与されます。いずれのサイトへのアクセス権も持ちません。企業の課金担当者の権限グループのユーザーは請求書の確認、自動請求メールの有効化、 所在地や連絡先など企業情報の変更が可能です。

サイトレベルの権限グループ

サイトの管理者

MyKinstaの「サイトの管理者」の管理画面

MyKinstaの「サイトの管理者」の管理画面

サイトの管理者には、サイトに紐づいた全ての環境(本番、ステージング)を含め、特定のサイトの完全なアクセス権が付与されます。ただし、企業のアカウントからサイトを削除することはできません。同一のユーザーを複数のサイトにおけるサイトの管理者として割り当てることも可能です。

サイトの開発者

MyKinstaの「サイトの開発者」の管理画面

MyKinstaの「サイトの開発者」の管理画面

サイトの開発者は割り当てられたサイトのステージング環境にのみアクセスできます。ステージング環境ではなんでもできますが、ステージング環境を削除したり、変更点を本番環境に反映したりすることはできません。サイトの管理者と同じように、同一のユーザーに、複数のサイトにおける、サイトの開発者という権限を付与することも可能です。

サイトの開発者は割り当てられたサイトのステージング環境にアクセス可能

サイトの開発者は割り当てられたサイトのステージング環境にアクセス可能

またサイトの開発者はMyKinsta管理画面内の分析、ユーザー管理、活動記録機能にもアクセスできません。

MyKinstaの権限グループとWordPressの権限グループ

MyKinstaとWordPressの権限グループの間に重複はありません。それぞれ独立して利用することができます。

KinstaアカウントのオーナーにとってはMyKinstaのマルチ権限グループ機能は管理者、開発者、経理担当者のチームの管理にとても便利です。ウェブ開発エージェンシーにとっては、一つの充実した管理画面で全ての顧客のサイトを簡単に管理できる非常に便利なツールです。

Get control of your WordPress site and streamline your workflow with clearly defined user roles & capabilities 😌Click to Tweet

まとめ

WordPressの権限グループと権限はユーザーアクセス管理を支える基本的なコンセプトです。サイト上のユーザーがどのような行動をとれるかをコントロールすることができます。また多くのプラグインやテーマにも使われていて、WordPressのコアに非常に便利な機能を加えています。

WordPressにはデフォルトで権限グループと権限が設定されていますが、さらに柔軟性が必要な場合はそれらをカスタマイズしたり、独自のものを作成したりすることも可能です。コードを自分で記述することも、外部のプラグインを活用することもできます。

権限グループと権限について理解し、その管理の仕方を知ることはWordPressをマスターする上で重要なステップです。今すぐ覚えて活用しましょう!


この記事が面白いと思った方は、KinstaのWordPressホスティングプラットフォームも大好きでしょう。ウェブサイトをスピードアップし、当社のベテランのWordPressチームからの24時間365日のサポートを是非ご利用ください。Google Cloudを使用したインフラストラクチャは、自動スケーリング、パフォーマンス、およびセキュリティに重点を置いています。Kinstaの魅力をご案内させてください。当社のプランをご確認ください。