Editoren erlauben, Menüs zu bearbeiten?

46

Ich möchte meinen Redakteuren die Möglichkeit geben, das Menü zu ändern. Ist dies möglich?

Die Registerkarte "Darstellung" scheint überhaupt keine Option zu sein. Kann ich das auch tun?

Milder Flaum
quelle

Antworten:

53

füge dies zu deinem Thema hinzu functions.php:

// add editor the privilege to edit theme

// get the the role object
$role_object = get_role( 'editor' );

// add $cap capability to this role object
$role_object->add_cap( 'edit_theme_options' );
Jan Fabry
quelle
1
Ist get_role eine Klasse?
Mild Fuzz
4
@ Mild Fuzz - nicht selbst nein, aber es gibt eine Instanz vonWP_Role
TheDeadMedic
8
Sie sollten dies wahrscheinlich nicht bei jeder Anfrage tun, da dies einen DB-Schreibvorgang nach meinem Verständnis verursacht. Besser auf admin_initund nurif !$role_object->has_cap('edit_theme_options')
jsphpl
Diese Einstellung wird in der Datenbank gespeichert (in Tabelle wp_options, Feld wp_user_roles), daher ist es möglicherweise besser, diese Einstellung bei der Aktivierung des Themes / Plugins auszuführen. Siehe codex.wordpress.org/Function_Reference/add_cap
Pim Schaaf
Oder Sie könnten es zu functions.php hinzufügen, es einmal ausführen und dann entfernen
d79
18

BEARBEITEN: Update für WP 4.9 und nur das Ausblenden von Menüpunkten für den Editor

Wenn Sie möchten, dass Ihre Benutzer das Navigationsmenü ändern können, aber nicht die anderen angezeigten Optionen: Verwenden Sie diese Option

// Do this only once. Can go anywhere inside your functions.php file
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );

Sie können den gesamten Code auskommentieren, nachdem Sie Ihr Admin-Panel aktualisiert haben, da der obige Code dauerhafte Änderungen an der Datenbank vornimmt.

Sie haben jetzt alle Optionen im Erscheinungsbild für die Redakteure sichtbar. Sie können die anderen Optionen wie folgt ausblenden:

function hide_menu() {

    if (current_user_can('editor')) {

        remove_submenu_page( 'themes.php', 'themes.php' ); // hide the theme selection submenu
        remove_submenu_page( 'themes.php', 'widgets.php' ); // hide the widgets submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php' ); // hide the customizer submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php&autofocus%5Bcontrol%5D=background_image' ); // hide the background submenu


        // these are theme-specific. Can have other names or simply not exist in your current theme.
        remove_submenu_page( 'themes.php', 'yiw_panel' );
        remove_submenu_page( 'themes.php', 'custom-header' );
        remove_submenu_page( 'themes.php', 'custom-background' );
    }
}

add_action('admin_head', 'hide_menu');

Die letzten 3 Zeilen in der hide_menu()Funktion sind themenspezifisch für mein Thema. Sie finden den zweiten Parameter, indem Sie im Admin-Bereich auf das Untermenü klicken, das Sie ausblenden möchten. Ihre URL lautet dann etwa: example.com/wp-admin/themes.php?page=yiw_panel

In diesem Beispiel ist also der zweite Parameter für die remove_submenu_page()Funktionyiw_panel

Jules
quelle
1
Dadurch werden Themen usw. auch für Administratoren ausgeblendet.
JorgeLuisBorges
12

In WordPress 3.8 wäre dies ein besserer Code als die aktuell akzeptierte Antwort.

/**
 * @var $roleObject WP_Role
 */
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
    $roleObject->add_cap( 'edit_theme_options' );
}
BenFreke
quelle
3

Wenn ich mir die Admin-Menüstruktur anschaue, scheint der nav-menus.phpLink an die Funktionalität gebunden zu seinedit_theme_options . Können Sie die Editorrolle ändern, um diese Funktion einzuschließen? Dies würde ihnen auch die Möglichkeit geben, Widgets zu bearbeiten . Ich weiß nicht, ob dies ein Problem ist. Das gesamte Ajax-Menü wird durch diese Funktion eingeschränkt, sodass es wahrscheinlich nicht funktioniert, nur die Admin-Menüfunktion zum Bearbeiten von Menüs zu ändern.

Jan Fabry
quelle
3

installiere das Plugin "User Role Editor" - schalte edit_theme_options ein - installiere das Plugin Adminimize - schalte "Widgets" und "Switch Theme" für Editoren aus;)


quelle
0

Ich habe festgestellt, dass Ihr Menü so funktioniert: Installieren Sie das Plugin " User Role Editor " und dort können Sie die Bedingung für die Editorrolle und andere auch bearbeiten. Schalten Sie edit_theme_options ein. Aber jetzt: Sie sehen "Menü" -Option unter "Themen", "Widgets". Für mich: Nach Klick auf "Menü" (als Editor) sehe ich keine ausgefüllten Optionen sondern leere. Daher deaktiviere ich das Plugin "User Role Editor" und die ausgefüllten Optionen für "Menü" werden korrekt angezeigt. Beachten Sie, dass das Deaktivieren des Plugins "User Role Editor" weiterhin Bedingungen für den aktiven Editor sind! Gut für mich, vielleicht hilft es dir auch


quelle