Je construis un site multisite dans lequel les administrateurs de site n'ont pas de fonctionnalité "options de gestion". Le problème est que, sans cette limite, ils ne peuvent pas voir l'onglet "identité du site" dans le personnalisateur, où ils peuvent changer l'icône du site (favicon) ainsi que le nom du site.
Existe-t-il un moyen de modifier la capacité requise pour afficher cet onglet et enregistrer son contenu? Sinon, y a-t-il moyen d'afficher les mêmes champs que dans cet onglet mais dans un onglet personnalisé du personnaliseur?
Merci et bonne journée.
C’est ainsi que j’ai interprété à partir de wordpress docs au moins. À l'origine, ces paramètres ont été définis avec add_setting
et c'est là que la capacité a été définie à l'origine. Heureusement, nous pouvons utiliser get_setting
pour modifier cette valeur. Cela semble très bien fonctionner pour votre cas.
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 );
Si, pour une raison quelconque, ils n'ont pas accès au personnalisateur, vous devez d'abord leur attribuer la fonctionnalité 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');
Cela leur donnera accès aux éléments suivants:
Apparence> Widgets
Apparence> Menus
Apparence> Personnaliser si elles sont prises en charge par le thème actuel
Apparence> Contexte
Apparence> En-tête
Si vous préférez masquer toutes ces pages, procédez comme suit:
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);
Toutefois, si vous souhaitez qu’ils aient accès à certaines pages telles que les widgets et les menus, mais pas aux thèmes, procédez comme suit:
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] );
}
}
Vous souhaitez également le faire, puis supprimer la section de changement de thème du personnaliseur:
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 );
Vous pouvez supprimer la section title_tagline
du personnaliseur et ajouter votre propre section avec le contrôle des douanes, qui sont essentiellement une copie de la pièce "Identité du site" ici .
Il vous suffira de modifier la fonctionnalité spécifiée ici avec celle de vos administrateurs.
Vous pouvez vérifier comment utiliser WordPress Customize API Manager dans official doc .