WordPressサイトで現在利用可能なロールのリストを取得していますか?


38

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

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


6
注:この質問はもともとwp-hackersメーリングリストでRyan Bileskyが尋ねたもので、私から回答がありました。それは、人々がグーグル:)頼むかもしれないことをベストプラクティスの質問のクリアケースですので、私はここにこれを追加しました
jerclarke

1
こんにちは@Jeremy Clarke-ここに参加してくれて本当にうれしいです。これらはまさに私たちがここで探しているものです。ベストプラクティスも明らかにできる一般的な質問に関連する回答。称賛!
MikeSchinkel

回答:


47

ロールはグローバル変数に保存されます$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;
}

「編集可能」、それは他のプラグインを管理者が持っている以外の場合、誰かにリストをフィルタリングする機会提供していますので、一部ではある'edit_users'(ユーザーが自ら管理者にすることができ、他のことを、リストから削除されるので、「管理者のニーズ)権限を。カスタムロールの作成に使用されるロール管理プラグインは、そのフィルターを使用するプラグインです。それ以外の場合、この関数は本質的にget_roles() (存在しません)です。

おそらく、プラグインは、管理者レベルの機能を'manage_options'持ち、基本的にすべてのロールへのアクセス権を持つ管理者である人にのみ問題の設定ページを提供するため、フィルターは影響しません。

またwp_dropdown_roles()<option><select>リストのフィールドとしてロールを提供します(ただし、チェックボックスは、誰が何かにアクセスできるかを選択する多くのシナリオでうまく機能する可能性があります)


3
注:WPをより安全にするために、この関数をパッチの一部として作成しました。そのため、偏りがあります;)
jerclarke

14

これを試して:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PSねえ、その説明と返信を見逃した、速すぎる私:)


0

プラグインや機能なしでロールのリストを見つける方法は次のとおりです http://screencast.com/t/uaWsGLAR3Sh


6
このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
ガブリエル

0

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

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

これは、WordPressで既存のすべてのユーザーロールの配列と各ロールの機能を取得する方法です。画面に出力したくない場合は、最後の行を省略します。2行目の$ roles変数には、ユーザーと機能の配列が保持されるため、必要に応じて使用できます。返される配列の例については、以下を参照してください。

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.