web-dev-qa-db-ja.com

カスタマイザで「サイトID」タブに必要な機能を変更する方法

私は、サイト管理者が「管理オプション」機能を持たないマルチサイトを構築しています。問題は、この上限がないとカスタマイザーの「サイト識別」タブが見えず、そこでサイトアイコン(favicon)とサイト名を変更できることです。

このタブを表示してその内容を保存するために必要な機能を変更する方法はありますか?そうでない場合は、このタブと同じフィールドをカスタマイザのカスタムタブに表示する方法はありますか。

ありがとう。良い一日を。

1
ChrisPlaneta

これが私がwordpress のドキュメント から少なくとも解釈した方法です。もともとこれらの設定はadd_settingで作られていて、それは機能が最初に設定されたところです。幸い、その値を変更するためにget_settingを使用することができます。あなたの場合はとてもうまくいくようです

function wpseo_206907_add_back_customizer_controls_for_not_admins( $wp_customize ) {
    $wp_customize->get_setting( 'blogname' )->capability = 'edit_theme_options'; // or edit_posts or whatever capability your site owner has
}
add_action( 'customize_register', 'wpseo_206907_add_back_customizer_controls_for_not_admins', 1000 );



何らかの理由でカスタマイザにアクセスできない場合は、最初にedit_theme_options機能を付与する必要があります。

function wpseo_206951_add_capability_for_non_admin() {
    $roleObject = get_role( 'editor' ); // whoever should have access to theme changes
    if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
        $roleObject->add_cap( 'edit_theme_options' );
    }
}
add_action( 'admin_init', 'wpseo_206951_add_capability_for_non_admin');


これにより、次のものにアクセスできるようになります。
外観>ウィジェット
外観>メニュー
外観>現在のテーマでサポートされている場合はカスタマイズします
外観>背景
外観>ヘッダー


これらのページをまとめて非表示にする場合は、次の手順を実行します。

function wpseo_206907_remove_by_caps_admin_menu() {
    if ( !current_user_can('manage_options') ) {
            remove_menu_page('themes.php'); // Appearance Menu on Admin
            remove_submenu_page( 'themes.php', 'widgets.php' );
            remove_submenu_page( 'themes.php', 'nav-menus.php' );
            remove_submenu_page( 'themes.php', 'theme-editor.php' );
    }
}
add_action('admin_menu', 'wpseo_206907_remove_by_caps_admin_menu', 999);


ただし、ウィジェットやメニューなどの特定のページにアクセスできるようにしたいが、テーマにはアクセスしたくない場合は、代わりに次のようにします。

add_action( 'admin_init', 'wpseo_206907_lock_theme' );  
function wpseo_206907_lock_theme() {
    global $submenu, $userdata;
    get_currentuserinfo();

    if ( $userdata->ID != 1 ) { 
        unset( $submenu['themes.php'][5] );
        unset( $submenu['themes.php'][15] );
    }
}


その後、カスタマイザからテーマ変更セクションセクションを削除するためにもこれを実行したいと思います。

function wpseo_206951_remove_customizer_controls_all( $wp_customize ) { 
   if ( !current_user_can('manage_options') ) {

   $wp_customize->remove_section("themes"); // Removes Themes section from backend

   // To remove other sections, panels, controls look in html source code in chrome dev tools or firefox or whatever and it will tell you the id and whether it's a section or panel or control. 
   //Example below (uncomment to use)

   // $wp_customize->remove_section("title_tagline");
   // $wp_customize->remove_panel("nav_menus");
   // $wp_customize->remove_panel("widgets");
   // $wp_customize->remove_section("static_front_page");

   }
}
add_action( 'customize_register', 'wpseo_206951_remove_customizer_controls_all', 999 );
1
Bryan Willis

カスタマイザからtitle_taglineセクションを削除し、税関管理を使用して独自のセクションを追加することができます。これは基本的に「Site Identity」の一部 のコピーです

ここで指定された機能を、管理者が持っているものと変更するだけで済みます。

WordPress Customize API Managerの使い方は 公式ドキュメント で確認できます。

0
Pavel Selitskas