web-dev-qa-db-ja.com

異なる管理テーマ - 役割に基づいて?

ユーザーの役割に基づいて管理テーマを変更する方法を考えています。現在、私はプラグインを使用して管理テーマを変更することができます(例: Blue Admin ) - しかし、役割に基づいてそれらの変更を加える方法がわかりません(加入者など).

特定の役割のためだけに特定のメニュー項目などを表示させたい場合もあります。

私はfunctions.phpやこれを達成するのに必要と思われる何か他のものに飛び込むのに問題はありません - 最初に正しい方向に向けられることを望みます。

2
Daniel

あなたはできる セット 関数を介して特定の管理配色プロユーザー役割を強制します。
個人的には、profile.php(バックエンドユーザー/あなたのプロフィール)からスキームを選択するオプションを最初に外します

以下は、特定のユーザーロールに特定の配色を設定する単なる関数例です。
この関数を追加する前に、まずfunctions.phpのバックアップを作成してください。

/**
 * Set Admin Color Scheme by Role
 * Codex:   {@link https://codex.wordpress.org/Roles_and_Capabilities}
 *          {@link https://codex.wordpress.org/Function_Reference/wp_get_current_user}
 * @version WordPress 4.6 
 */
add_filter( 'get_user_option_admin_color', 'wpse_238039_set_admin_color' );
function wpse_238039_set_admin_color()
{
    $current_user = wp_get_current_user();

    // Check for the user role
    if ( user_can( $current_user, 'subscriber' ) )
    {
        // Remove the Admin Color Scheme picker
        remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

        // Set the Admin Color Scheme you want for this role
        return 'light';
    }

    if ( user_can( $current_user, 'contributor' ) )
    {
        remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
        return 'coffee';
    }

} // end function

もちろん、それらの行を関数から削除することで、ユーザーのプロファイルページの[Admin Color Scheme]オプションをそのままにすることもできます。

特定の役割のためだけに特定のメニュー項目などを表示させたい場合もあります。

同じ種類のIFステートメントブロックを使用して、別の関数内で項目を追加または削除することができます。特定の関数で何をしたいのかを知り、正しい フックを使うこと

注:上記の関数の@link URLを参照してください。

2
Charles

管理配色はuser_metaadmin_colorとして格納されます(デフォルトは 'fresh')。

user_registrationで起動するコールバックを書くことができます。

add_action( 'user_register', 'wpse_registration_save', 10, 1 );

function wpse_registration_save( $user_id ) {
   # ...get the user role
   # ...write switch statement based on role
   # ... update_user_meta($user_id, 'admin_color', 'funky');

}

Blue Adminでこれがどのように機能するかはわかりませんが、プラグインを使用せずにこれを実行する方法になるでしょう。それが賢い場合、Blue Adminはそのテーマ情報をuser_metaにも格納するので、どちらの方法でも非常によく似たアプローチかもしれません。

0
Jeremy Ross