権限グループと権限は、WordPress の2つの重要な側面で、ユーザー権限をコントロールできます。
WordPress は、権限グループとその権限を、テーブル options
のキー user_roles
の下に格納します。
権限グループ
権限グループは、ユーザーの一連の権限を定義します。たとえば、ユーザーが自分のダッシュボードで何を見たり、何をしたりできるかです。
デフォルトでは、WordPress には6つの権限グループがあります:
- 特権管理者 (Super Admin)
- 管理者 (Administrator)
- 編集者 (Editor)
- 投稿者 (Author)
- 寄稿者 (Contributor)
- 購読者 (Subscriber)
権限グループを追加したり、デフォルトの権限グループを削除できます。
権限グループの追加
add_role()
を使用して、新しい権限グループを追加し、権限を割り当てられます。
function wporg_simple_role() {
add_role(
'simple_role',
'Simple Role',
array(
'read' => true,
'edit_posts' => true,
'upload_files' => true,
),
);
}
// Add the simple_role.
add_action( 'init', 'wporg_simple_role' );
add_role()
をコールすると、権限グループと権限がデータベースに格納されます !
連続してコールしても、権限リストの変更も含めて、何もしません。これはあなたが期待している動作ではないかもしれません。
remove_role()
を使って権限グループを削除し、add_role()
を使って新しい権限を追加します。
必ず、権限が期待しているものと異なる場合 (つまり、このような状態) にのみ実行してください。さもないと、パフォーマンスが著しく低下します !
権限グループの削除
remove_role()
で権限グループを削除します。
function wporg_simple_role_remove() {
remove_role( 'simple_role' );
}
// Remove the simple_role.
add_action( 'init', 'wporg_simple_role_remove' );
remove_role()
をコールすると、権限グループと権限がデータベースから削除されます !
連続してコールしても、何もしません。
- 管理者と特権管理者の権限グループを削除することは おすすめしません !
- WordPress の将来のアップデートで、削除した権限グループが再び追加される可能性があるため、プラグイン / テーマのコードは必ず保管しておいてください。
- WordPress のデフォルト権限グループである
subscriber
を削除する場合には、update_option('default_role', YOUR_NEW_DEFAULT_ROLE)
を実行します。
権限
権限とは、「権限グループ」ができること、できないことを定義するものです: 投稿の編集、投稿の公開、等。
権限の追加
権限グループに新しい権限を定義できます。
get_role()
を使って権限グループオブジェクトを取得し、そのオブジェクトの add_cap()
メソッドを使って新しい権限を追加します。
function wporg_simple_role_caps() {
// Gets the simple_role role object.
$role = get_role( 'simple_role' );
// Add a new capability.
$role->add_cap( 'edit_others_posts', true );
}
// Add simple_role capabilities, priority must be after the initial role definition.
add_action( 'init', 'wporg_simple_role_caps', 11 );
WordPress のデフォルトの管理画面では、これらは何の効果もありませんが、カスタムの管理画面やフロントエンドの領域には使用できます。
権限の削除
権限グループから権限を削除できます。
実装は「権限の追加」と似ていますが、違いは権限グループオブジェクトに remove_cap()
メソッドを使うことです。
権限グループと権限の使用
権限グループの取得
get_role()
で、その権限グループのすべての権限を含む、権限グループオブジェクトを取得します。
ユーザーのできること
ユーザーが指定された「権限グループ」または「権限」を持っているかどうかを user_can()
でチェックします。
user_can( $user, $capability );
例: 投稿 ID を渡して、特定の投稿の権限をテストする。
現在のユーザーのできること
current_user_can()
は user_can()
のラッパー関数で、現在のユーザーオブジェクトをパラメータ $user
として使用します。
これは、バックエンドとフロントエンドの領域が、アクセスや変更に一定レベルの権限を必要とするシナリオで使用します。
current_user_can( $capability );
例
ここでは、ユーザーが適切な権限を持っている場合に、テンプレート・ファイルに編集リンクを追加する実用的な例を示します:
if ( current_user_can( 'edit_posts' ) ) {
edit_post_link( esc_html__( 'Edit', 'wporg' ), '<p>', '</p>' );
}
マルチサイト
current_user_can_for_blog()
関数は、現在のユーザーが特定のブログで特定の「権限グループ」または「権限」を持っているかどうかをテストするために使用されます。
current_user_can_for_blog( $blog_id, $capability );
参考資料
ユーザーの権限グループと権限のドキュメント。