機能のグループ:複数の役割を持つユーザー?


9

WordPressで設定されているロールと機能を理解していると確信しています。ユーザーに割り当てることができるロールにグループ化された、きめ細かい機能です。コードでは、ロールではなく詳細な機能をチェックする必要があります(特定のロールの機能が変更される可能性があるため)。役割は必ずしも階層的ではありません(ただし、デフォルトの役割は階層的です)。

ユーザーに複数の役割を割り当てる方法はありますか?あるいは、いくつかの機能グループを持ち、1つ以上のグループをユーザーに関連付けていますか?私のサイトの動作には、Webページの更新、フォーラムのモデレート、イベントカレンダーの更新など、多くの明らかな責任があります。各責任には、それに関連付けられたタスクを実行するために必要な機能のグループがあります。ユーザーが1つ以上の責任を実行できるようにしたいのですが。したがって、ユーザーAはWebページとイベントカレンダーを更新できますが、フォーラムをモデレートできません(十分に十分なタクトではありません)。

可能な責任の組み合わせごとに役割を定義する以外に、これを行う方法はありますか?


役割Scoperプラグインは、あなたが探しているものを達成できる可能性があります。
Devin Humbert

それはページごとまたは投稿ごとのほうが多いと思います。これは、私が探しているものではありませんが、もう少し詳しく調査させていただきます。ありがとうございます。
lpryor 2011

@lpryor-Role Scoperには複数のオプションがあり、ユーザーまたはグループのページごとおよび投稿ごとだけでなく、カテゴリごと、分類ごと、投稿ごとのタイプも制御できるため、目的を達成できるようです。これで後です。
ミロ2011

これを試してみてくださいgist.github.com/nikolov-tmw/7808046複数のチェックボックスを役割の選択に追加
OzzyCzech

回答:


3

基になるWP_Userクラスが複数のロールをサポートしているため、複数のロールがないことは長い間私を苛立たせてきました。代替のソフトウェアソリューションを探すことも検討しました。@lpryor-あなたの投稿を読んだ後、私はそれを自分で実装することに再び動機付けられました。

私のために別のプラグインを作成するのが面倒なので、users.phpファイルをハックする必要がありましたが、驚くほど短い行数で完了しました。明らかにこれは間違った方法ですので、もし私が将来十分にやる気があれば、私はそれを適切にやろうとするかもしれません。

WordPressの最新バージョンにアップグレードできることを気にしない場合(必要です)-以下のコードスニペットを使用して複数のロールを実装できます。私はワードプレスの専門家ではないことを覚えておいてください。私は関連ファイルを開いて変更を加えただけで、自分が行っていることの完全な影響を理解しようとはしていません。コードは私には理にかなっているように見えますが、私はそれを私の人生で信用しません。

(私は3.2を使用しているため、行番号が異なる場合があります)150行目の直前のclass-wp-users-list-table.phpに、次のような行を追加します。

<div class="alignleft actions">
    <label class="screen-reader-text" for="remove_role"><?php _e( 'Remove role &hellip;' ) ?></label>
    <select name="remove_role" id="remove_role">
        <option value=''><?php _e( 'Remove role &hellip;' ) ?></option>
        <?php wp_dropdown_roles(); ?>
    </select>
    <?php submit_button( __( 'Remove' ), 'secondary', 'changeit', false ); ?>
</div>

次に、current_account関数を次のように変更します

function current_action() {
    if ( isset($_REQUEST['changeit']) ) {
        if ( !empty($_REQUEST['new_role']) )
            return 'promote';
        elseif ( !empty($_REQUEST['remove_role']) )
            return 'remove_role';
    }

    return parent::current_action();

}

71.76行目でusers.phpをコメントアウトします。

/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
    $update = 'err_admin_role';
    continue;
}
*/

83行目のset_roleをadd_roleに置き換えます

$user->add_role($_REQUEST['new_role']);

92行目に次の行を追加します(これは、プロモートアクションからのわずかに編集されたコピー&ペーストです-私は、promote_user機能がロールの削除に適切かどうかを確認していません)

case 'remove_role':
    check_admin_referer('bulk-users');

    if ( ! current_user_can( 'promote_users' ) )
            wp_die( __( 'You can&#8217;t edit that user.' ) );

    if ( empty($_REQUEST['users']) ) {
            wp_redirect($redirect);
            exit();
    }

    $editable_roles = get_editable_roles();
    if ( empty( $editable_roles[$_REQUEST['remove_role']] ) )
            wp_die(__('You can&#8217;t remove that role'));

    $userids = $_REQUEST['users'];
    $update = 'remove_role';
    foreach ( $userids as $id ) {
            $id = (int) $id;

            if ( ! current_user_can('promote_user', $id) )
                    wp_die(__('You can&#8217;t edit that user.'));
            // The new role of the current user must also have promote_users caps
            // Need to think this through
            /*
            if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
                    $update = 'err_admin_role';
                    continue;
            }
            */

            // If the user doesn't already belong to the blog, bail.
            if ( is_multisite() && !is_user_member_of_blog( $id ) )
                    wp_die(__('Cheatin&#8217; uh?'));

            $user = new WP_User($id);
            $user->remove_role($_REQUEST['remove_role']);
    }

    wp_redirect(add_query_arg('update', $update, $redirect));
    exit();

370行目に次の行を追加します

case 'remove_role':
    $messages[] = '<div id="message" class="updated"><p>' . __('Removed role.') . '</p></div>';
    break;

@ adi-eyal、これは素晴らしいですね、どうもありがとう!私はそれを通して自分の道を進み、それを試します。
lpryor

@lpryorねえ、WPコアコードをハックすることなく複数のロールを実装できたのかと思っていただけですか?知っていただければ嬉しいです!プラグインは見つかりませんでしたが、コアWPコードをハックしたくありません。ありがとう!
dashaluna '18年

@dashalunaこれにはまだ到達できていませんが、リストのトップに近づいています!
lpryor

5
このようなコアをハッキングすることは、進むべき道ではありません。これは、WordPressコアの更新時削除されます。フックするか忘れる-申し訳ありませんが、これは(たとえ動作しても)推奨されるものではありません。
カイザー

コアの更新は良い習慣ではありません。代わりにアクション/フィルターフックを使用してください。
тнєスーフィー

3

ユーザーロールエディタープラグインは、ユーザーの複数のロールを処理します。

インストール後、[ユーザー]> [各ユーザーの下]に[機能]オプションがあります。UREは、最初のWPロールを「プライマリロール」として扱い、「その他のロール」を追加できるようにします。


0

メンバープラグインを使用しますをカスタム作成機能と一緒ます。

1人のユーザーに複数の役割を割り当てることはできませんが、任意の役割を作成して、その役割が持つ機能を指定することができます。

tempaltesでは、current_user_can()のようなものを使用できます。


はい、わかりました。しかし、考えられる責任の組み合わせごとに個別の役割を定義する必要がない方法があるのか​​と思っていました。組合せ論は、それをあまり楽しくなく、間違いを起こしやすくするかもしれません。
lpryor 2011

グーグルはあまり見つかりませんでした。私が得た最も近いものはこのスレッドでした:wordpress.org/support/topic/multiple-roles-for-a-user
スティーブン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.