zezwolić redaktorom na edycję menu?

46

Chciałbym móc udzielić moim redaktorom uprawnień do zmiany menu, czy można to zrobić?

Karta wyglądu nie wydaje się być opcją, czy mogę to zrobić?

Łagodny Fuzz
źródło

Odpowiedzi:

53

dodaj to do motywu 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
źródło
1
czy get_role jest klasą?
Łagodny Fuzz
4
@Mild Fuzz - nie sam nie, ale zwraca instancjęWP_Role
TheDeadMedic
8
Prawdopodobnie nie powinieneś tego robić przy każdym żądaniu, ponieważ powoduje to zapisanie bazy danych, o ile rozumiem. Lepsze admin_initi tylkoif !$role_object->has_cap('edit_theme_options')
jsphpl
To ustawienie jest zapisywane w bazie danych (w tabeli wp_options, pole wp_user_roles), więc może być lepiej uruchomić to po aktywacji kompozycji / wtyczki. Zobacz codex.wordpress.org/Function_Reference/add_cap
Pim Schaaf
Możesz też dodać go do functions.php, uruchomić go raz, a następnie usunąć
d79
18

EDYCJA: aktualizacja WP 4.9 i ukrywanie tylko elementów menu dla Edytora

Jeśli chcesz, aby użytkownicy mogli zmieniać menu nawigacji, ale nie inne wyświetlane opcje: użyj tego

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

Możesz odkomentować cały ten kod po odświeżeniu panelu administratora, ponieważ powyższy kod spowoduje trwałe zmiany w bazie danych.

Wszystkie edytowane opcje są teraz widoczne. Możesz ukryć inne opcje, takie jak:

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');

Ostatnie 3 wiersze hide_menu()funkcji są specyficzne dla mojego motywu. Drugi parametr można znaleźć, klikając podmenu, które chcesz ukryć, w panelu administracyjnym. Twój adres URL będzie wtedy taki jak: example.com/wp-admin/themes.php?page= yiw_panel

Tak więc w tym przykładzie drugim parametrem remove_submenu_page()funkcji będzieyiw_panel

Jules
źródło
1
ukrywa to również motywy itp. dla administratorów.
JorgeLuisBorges
12

W WordPress 3.8 byłby to lepszy kod niż obecnie akceptowana odpowiedź.

/**
 * @var $roleObject WP_Role
 */
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
    $roleObject->add_cap( 'edit_theme_options' );
}
BenFreke
źródło
3

Kiedy patrzę na strukturę menu administratora, wydaje się, że nav-menus.phplink jest związany z funkcjąedit_theme_options . Czy możesz zmodyfikować rolę edytora, aby uwzględnić tę funkcję? Dałoby im to również możliwość edycji widżetów. Nie wiem, czy to jest problem? Wszystkie funkcje Ajax w menu są ograniczone przez tę funkcję, więc zmiana możliwości menu administratora do edycji menu prawdopodobnie nie będzie działać.

Jan Fabry
źródło
3

zainstaluj wtyczkę „User Role Editor” - włącz opcję edit_theme_options - zainstaluj wtyczkę Administruj - wyłącz „Widżety” i „Przełącz motyw” dla redaktorów;)


źródło
0

Przekonałem się, że twoje menu będzie działało w ten sposób: zainstaluj wtyczkę „ User Role Editor ” i tam możesz edytować warunki roli edytora i inne. Włącz opcję edit_theme_options. Ale teraz: zobaczysz opcję „menu” pod „tematami”, „widżetami”. Dla mnie: Po kliknięciu „menu” (jako edytor) nie widziałem wypełnionych opcji, ale były puste. Więc dezaktywowałem wtyczkę „User Role Editor”, a wypełnione opcje dla „menu” pojawiają się poprawnie. Pamiętaj, że dezaktywacja wtyczki „User Role Editor” pozostaje warunkiem aktywnej pracy edytora! Dobrze dla mnie, może ci też pomoże


źródło