web-dev-qa-db-ja.com

WordPressサイトで現在利用可能な役割のリストを取得しますか?

WordPressのプラグインを書くとき、サイト上のどの役割が特定の機能やコンテンツにアクセスできるかのオプションを設定する必要がしばしばあります。これを行うには、プラグイン開発者は、オプションで使用するためにサイト上に存在するロールのリストを取得する必要があります。カスタムロールを作成できるので、デフォルトロールだけが使用可能であるとは限りません。

リストを取得するための最良の方法は何ですか?

39
jerclarke

ロールはグローバル変数$wp_rolesに格納されています。

理想的な関数は get_editable_roles()から/wp-admin/includes/user.phpです

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

"editable"の部分は、admin以外の誰かが'edit_users'特権を持っている場合に他のプラグインにリストをフィルタリングする機会を提供するためです(したがって「admin」をリストから削除する必要があります。管理者)。カスタムロールを作成するために使用されるロール管理プラグインは、そのフィルタを使用するものです。それ以外の場合、この関数は本質的にget_roles()です(これは存在しません)

おそらくあなたのプラグインは問題の設定ページを'manage_options'のような管理者レベルの機能を持ち、基本的にすべてのロールにアクセスできる管理者である誰かにしか提供しないので、フィルタはあなたに影響を与えるべきではありません。

<option>リスト<select>フィールドとしての役割を与える wp_dropdown_roles()もあります(ただし、チェックボックスは、誰かにアクセス権を与える人を選択する多くのシナリオではより効果的です)

45
jerclarke

これを試して:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

PSええと、その説明と返信を逃した、あまりにも速く私:)

12
Rarst

多言語サイト、機能を持っている人のために

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

このようにローカライズされた配列を返します(ロール名はスロバキア語です):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)
0
Jasom Dotnet

プラグインや関数を使わずにロールのリストを見つける方法は次のとおりです。 http://screencast.com/t/uaWsGLAR3Sh

0
Manuel Costales