web-dev-qa-db-ja.com

メインサイトユーザが更新されたときにネットワーク全体のユーザロールを更新する

私は、 Multi Site User Management プラグインを少し修正したコピーを使用して、マルチサイトネットワークでユーザーを同期させていますが、1つ問題があります。ユーザーの役割がメインサイトで更新されても、その役割はサブサイトでは更新されません。すべてが正しく機能するためには、ユーザーの役割が同期していなければなりません。

私は成功せずに見てきました、それでは、ユーザーが更新されたときに実行されるアクションはありますか? profile_updateとwp_update_userの関数/フックについては知っていますが、ユーザーロールが外部関数を介して更新されるため、どちらも機能しません。だから私は常にユーザーの役割を同期させる新しい方法が必要です。

何か案は?

1
Pippin

私は問題を回避する方法を見つけました。これは「修正」ではなく、同期化されたユーザーロールが必要という問題を回避するための方法です。すべてのユーザー役割を一致させるのではなく、メインサイトのユーザー役割のみを確認することにしました。私がどのようにしたかについては、以下の私の機能を見てください。

/*
* Function to check a specified user from a subsite against
* the role of that same user on the main site
*
* @param int $site_to_check the id of the site to check the user's role from
* @param int $user_id the user's id to check
*/
function cgc_check_for_citizen($site_to_check = 1, $user_id = null) {
    if(!isset($user_id)) {
        return false;
    }
    $citizen = false;

    global $blog_id;

    if($blog_id == 1) { // we're on the main site
        if(user_can($user_id, 'read_citizen')) {
            $citizen = true;
        }
    } else {
        switch_to_blog($site_to_check);
            if(user_can($user_id, 'read_citizen')) {
                $citizen = true;
            }
        restore_current_blog();
    }
    return $citizen;
}
2
Pippin

あなたがそれを理解することができないならば、私は考えています、だれもできません。 ;((

とにかく、このプラグインは自動的にメインサイトに基づいてサブサイトのためのユーザロールを更新します。だから多分あなたはコードを抽出することができます:

http://wordpress.org/extend/plugins/user-role-editor/

1
WPExplorer

こんにちは私はこのプラグインがあなたを助けるかどうかわからない。しかしそれを試してみてください。 scribuの proper-network-activation プラグインをお試しください

0
Giri