Làm thế nào để loại bỏ toàn bộ menu admin?


14

Tôi cần tùy chỉnh bảng quản trị cho người dùng của mình. Vậy làm cách nào để xóa toàn bộ menu admin? Không xóa mục menu, ý tôi là loại bỏ hoàn toàn thanh menu dọc bên trái, bao gồm thiết kế của menu (ví dụ: css, background..etc). Tôi muốn nó trở nên trống rỗng.

Tôi có thể làm điều đó bằng cách hack css. Nhưng tôi thích sử dụng hook để làm điều đó. Có ý kiến ​​gì không?

Cảm ơn


Tôi tò mò. Nếu người dùng của bạn không cần quyền truy cập vào bất kỳ mục menu quản trị viên nào, tại sao họ lại cần quyền truy cập vào bảng điều khiển?
moraleida

Tự hỏi về động cơ ... Bạn có muốn ẩn nó cho các vai trò / người dùng cụ thể không? Bạn đang tạo một menu Admin Bar tùy chỉnh (ở trên cùng)?
brasofilo

1
Có, tôi muốn tùy chỉnh menu quản trị. Không phải là menu quản trị hiện tại không đủ tốt, nó chỉ cảm thấy quá 'wordpress'. Không tốt cho việc xây dựng thương hiệu, theo ý kiến ​​của tôi.
dev-jim

Vui lòng kiểm tra câu trả lời trước của tôi ở đây; wordpress.stackexchange.com/questions/136058/ từ
numediaweb

Câu trả lời:


16

Móc chính xác để sử dụng là admin_menuvà sau đó tạo một chức năng để loại bỏ các menu bạn muốn loại bỏ. 2 chức năng sau đây loại bỏ tất cả các 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' );
}

Ảnh chụp màn hình của menu bên trái bằng 2 chức năng trên:

nhập mô tả hình ảnh ở đây


3
Tôi đã tìm một cách khác bằng cách sử dụng $GLOBALS['menu'] = array();. Cho null trong mảng cũng sẽ làm việc.
dev-jim

Nơi nào bạn đặt điều này?

Bất cứ ai cũng nhận thấy các bản nháp gần đây từ ảnh chụp màn hình đó? ;)
acSlater

5

Theo sự dẫn dắt của /wp-admin/admin-header.php->/wp-admin/menu-header.php không có móc để làm điều đó.

Một giải pháp là nối vào admin_headvà thực hiện một số 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;
    }
}

[cập nhật]
Theo như làm rõ cho câu hỏi, nơi rõ ràng rằng động lực là xây dựng thương hiệu cho khu vực quản trị, đây là 4 plugin mà tôi sử dụng cho điều đó:


Nếu bạn đi theo con đường này, nó có ý nghĩa hơn để sử dụng wp_enqueue_script()với admin_enqueue_scripthook.
mrwweb

1
@mrwweb Ngay cả khi nó là một chèn nhỏ như vậy? Bạn có nghĩ là xứng đáng?
brasofilo

Đã đồng ý. Các đoạn mã nhỏ / kiểu chèn được thực hiện dễ dàng hơn admin_head.
chrisguitarguy

Tôi không thích sử dụng jquery trừ khi tôi không có lựa chọn nào khác. Điều gì xảy ra nếu khách truy cập vô hiệu hóa javascript trên trình duyệt của họ? Mặc dù, không có khả năng xảy ra, nhưng có khả năng ở đó. Dù sao cũng cảm ơn lời khuyên của bạn.
dev-jim

Trong ví dụ của tôi, đó cũng sẽ là vấn đề loại bỏ gấp đôi bằng cách ẩn cả 2 div trong CSS.
brasofilo

2

Cách duy nhất thân thiện với hook mà tôi biết là sử dụng remove_menu_page() cho mọi mục menu. Thậm chí sau đó, tôi không biết điều gì xảy ra với thanh bên trái (liệu nó có thu gọn xuống chiều rộng 0px hay không). Ngay cả khi sử dụng các hook, đôi khi tôi sẽ muốn liệt kê một biểu định kiểu quản trị viên để dọn sạch những gì còn lại của các kiểu đánh dấu menu.

Tôi sẽ cẩn thận về việc này. Ví dụ: nếu bạn xóa "Cài đặt" thì không thể truy cập bất kỳ plugin nào tạo các trang menu trong menu "Cài đặt". Nói chung, tôi tự hỏi làm thế nào bền vững để loại bỏ hoàn toàn menu.


Tôi chắc chắn anh ấy đang tìm cách để xóa menu cho người dùng thông thường, không phải quản trị viên. :)
Christine Cooper

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

function remove_admin_menus(){
    global $menu;
    $menu = array();
}

Câu trả lời này cũng rất tiện dụng. Nó ngắn và hoạt động như một bùa mê, ngoại trừ các trang menu được tạo bởi các plugin. (không phải là vấn đề vì chúng chỉ hiển thị cho quản trị viên)
Charles

Đó thực sự là một giải pháp hữu ích, NHƯNG điều đáng nói là nó sẽ không thực sự chặn quyền truy cập vào các trang quản trị đó, nó sẽ khiến chúng vô hình trong thanh quản trị. Tất nhiên, nó tốt hơn một giải pháp CSS để ẩn các mục, nhưng vẫn còn thiếu sót về mặt bảo mật: người dùng thông thái vẫn có thể truy cập trực tiếp vào các trang quản trị bằng cách chỉnh sửa URL.
Marcos Buarque

0

Tôi cải thiện giải pháp của @brasofilo vì nó có một lỗi nhỏ - tải lại trên trang với trình đơn kết nối internet không tốt nhất sẽ xuất hiện trong thời gian rất ngắn. Để tránh nó, tôi đã thêm một chút 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;

    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.