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ć?

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

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


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


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.