Jak usunąć całe menu administratora?

14

Muszę dostosować panel administracyjny dla mojego użytkownika. Jak mogę usunąć całe menu administratora? Nie usuwaj pozycji menu, to znaczy całkowicie usuń lewy pionowy pasek menu, uwzględnij projekt menu (np. Css, background..etc). Chcę, żeby stało się puste.

Mogę to zrobić przez hack css. Ale wolę użyć do tego haka. Jakieś pomysły?

Dzięki

dev-jim
źródło
Jestem ciekawy. Jeśli użytkownicy nie potrzebują dostępu do żadnego z elementów menu administratora, dlaczego w ogóle potrzebują dostępu do pulpitu nawigacyjnego?
moraleida
Zastanawiasz się nad motywami ... Czy chcesz to ukryć dla określonych ról / użytkowników? Czy tworzysz niestandardowe menu paska administracyjnego (u góry)?
brasofilo
1
Tak, chciałbym dostosować menu administratora. Nie to, że obecne menu administracyjne nie jest wystarczająco dobre, po prostu zbyt „Wordpress”. Moim zdaniem nie nadaje się do budowania marki.
dev-jim
Sprawdź moją poprzednią odpowiedź tutaj; wordpress.stackexchange.com/questions/136058/…
numediaweb

Odpowiedzi:

16

Prawidłowym hakiem jest, admin_menua następnie utwórz funkcję usuwania menu, które chcesz usunąć. Poniższe 2 funkcje usuwają wszystkie menu.

add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );

//Remove top level admin menus
function remove_admin_menus() {
    remove_menu_page( 'edit-comments.php' );
    remove_menu_page( 'link-manager.php' );
    remove_menu_page( 'tools.php' );
    remove_menu_page( 'plugins.php' );
    remove_menu_page( 'users.php' );
    remove_menu_page( 'options-general.php' );
    remove_menu_page( 'upload.php' );
    remove_menu_page( 'edit.php' );
    remove_menu_page( 'edit.php?post_type=page' );
    remove_menu_page( 'themes.php' );
}


//Remove sub level admin menus
function remove_admin_submenus() {
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'themes.php', 'themes.php' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'post-new.php' );
    remove_submenu_page( 'themes.php', 'nav-menus.php' );
    remove_submenu_page( 'themes.php', 'widgets.php' );
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-install.php' );
    remove_submenu_page( 'users.php', 'users.php' );
    remove_submenu_page( 'users.php', 'user-new.php' );
    remove_submenu_page( 'upload.php', 'media-new.php' );
    remove_submenu_page( 'options-general.php', 'options-writing.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-reading.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-media.php' );
    remove_submenu_page( 'options-general.php', 'options-privacy.php' );
    remove_submenu_page( 'options-general.php', 'options-permalinks.php' );
    remove_submenu_page( 'index.php', 'update-core.php' );
}

Zrzut ekranu lewego menu przy użyciu powyższych 2 funkcji:

wprowadź opis zdjęcia tutaj

Chris_O
źródło
3
Znalazłem inny sposób, używając $GLOBALS['menu'] = array();. Nadanie wartości null w tablicy również wykona pracę.
dev-jim
Gdzie to położyłeś?
Czy ktoś zauważył ostatnie szkice z tego zrzutu ekranu? ;)
acSlater
5

Podążając za przykładem /wp-admin/admin-header.php-> /wp-admin/menu-header.phpnie ma na to haka.

Rozwiązaniem jest podłączenie się admin_headi wykonanie CSS + jQuery

add_action('admin_head', 'wpse_52099_script_enqueuer');
function wpse_52099_script_enqueuer(){
    if(!current_user_can('administrator')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#adminmenuback, #adminmenuwrap').remove();
        });     
        </script>
HTML;
    }
}

[aktualizacja]
Jak wyjaśniono w pytaniu, gdzie staje się jasne, że motywacją jest branding obszaru administracyjnego, są to 4 wtyczki, których używam do tego:

brasofilo
źródło
Jeśli pójdziesz tą drogą, to większy sens korzystania wp_enqueue_script()z admin_enqueue_scripthakiem.
mrwweb
1
@mrwweb Nawet jeśli jest to tak mała wstawka? Czy uważasz, że jest godny?
brasofilo
Zgoda. Wstawianie małych skryptów / stylów jest łatwiejsze admin_head.
chrisguitarguy
Nie lubię używać jquery, chyba że nie mam innego wyjścia. Co się stanie, jeśli użytkownicy wyłączą javascript w swojej przeglądarce? Chociaż nie jest to prawdopodobne, ale istnieje taka możliwość. W każdym razie dzięki za radę.
dev-jim
W moim przykładzie będzie to kwestia podwójnego usunięcia poprzez ukrycie również 2 div w CSS.
brasofilo
2

Jedynym przyjaznym dla haczyka sposobem, jaki znam, jest użycie remove_menu_page()do każdego elementu menu. Nawet wtedy nie wiem, co dzieje się z samym lewym paskiem (czy zwinąłby się do szerokości 0 pikseli, czy co). Nawet przy użyciu haków wyobrażam sobie, że w pewnym momencie będziesz chciał przełączyć arkusz stylów administratora, aby wyczyścić resztki stylów znaczników menu.

Byłbym ostrożny przy robieniu tego. Na przykład, jeśli usuniesz „Ustawienia”, nie będzie można uzyskać dostępu do żadnych wtyczek tworzących strony menu w menu „Ustawienia”. Ogólnie zastanawiam się, jak naprawdę zrównoważone jest całkowite usunięcie menu.

mrwweb
źródło
Jestem pewien, że szukał sposobu na usunięcie menu dla zwykłych użytkowników, a nie administratorów. :)
Christine Cooper
1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
kakoma
źródło
Ta odpowiedź jest również bardzo przydatna. Jest krótki i działa jak urok, z wyjątkiem stron menu utworzonych przez wtyczki. (co nie powinno stanowić problemu, ponieważ są widoczne tylko dla administratora)
Charles
Jest to naprawdę poręczne rozwiązanie, ALE warto powiedzieć, że tak naprawdę nie blokuje dostępu do tych stron administracyjnych, po prostu czyni je niewidocznymi na pasku administracyjnym. Jest to oczywiście lepsze niż rozwiązanie CSS do ukrywania elementów, ale wciąż ma wadę pod względem bezpieczeństwa: sprytni użytkownicy nadal mogą uzyskać bezpośredni dostęp do stron administracyjnych, edytując adres URL.
Marcos Buarque,
0

Poprawiam rozwiązanie @brasofilo, ponieważ ma mały błąd - na stronie ponownie załaduj niezbyt najlepsze menu połączenia z Internetem pojawi się na bardzo krótki czas. Aby tego uniknąć, dodałem trochę więcej css:

add_action('admin_head', 'wpse_52099_script_enqueuer');

function wpse_52099_script_enqueuer() {

    if(!current_user_can('administrator')) { 

echo <<<HTML
<style type="text/css">
#wpcontent, #footer { margin-left: 0px !important; }
#adminmenuback, #adminmenuwrap { display: none !important; }
</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
    $('#adminmenuback, #adminmenuwrap').remove();
});
</script>
HTML;

    }
}
romapad
źródło