Bagaimana cara menghapus seluruh menu admin?

14

Saya perlu menyesuaikan panel admin untuk pengguna saya. Jadi bagaimana cara menghapus seluruh menu admin? Tidak menghapus item menu, maksud saya sepenuhnya menghapus bilah menu vertikal kiri, termasuk desain menu (misalnya, css, background..etc). Saya ingin itu menjadi kosong.

Saya bisa melakukannya dengan css hack. Tapi saya lebih suka menggunakan kait untuk melakukannya. Ada ide?

Terima kasih

dev-jim
sumber
Saya penasaran. Jika pengguna Anda tidak memerlukan akses ke item menu admin, mengapa mereka perlu akses ke dasbor sama sekali?
moraleida
Ingin tahu tentang motif ... Apakah Anda ingin menyembunyikannya untuk peran / pengguna tertentu? Apakah Anda membuat menu Admin Bar kustom (di atas)?
brasofilo
1
Ya, saya ingin menyesuaikan menu admin. Bukan berarti menu admin saat ini tidak cukup baik, itu terlalu terasa 'wordpress'. Tidak bagus untuk branding, menurut saya.
dev-jim
Silakan periksa jawaban saya sebelumnya di sini; wordpress.stackexchange.com/questions/136058/…
numediaweb

Jawaban:

16

Kait yang benar untuk digunakan adalah admin_menudan kemudian membuat fungsi untuk menghapus menu yang ingin Anda hapus. 2 fungsi berikut menghapus semua 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' );
}

Cuplikan layar menu kiri menggunakan 2 fungsi di atas:

masukkan deskripsi gambar di sini

Chris_O
sumber
3
Saya menemukan cara lain dengan menggunakan $GLOBALS['menu'] = array();. Memberi null dalam array juga akan melakukan pekerjaan.
dev-jim
Di mana Anda meletakkan ini?
Adakah yang memperhatikan draft terbaru dari tangkapan layar itu? ;)
acSlater
5

Mengikuti petunjuk /wp-admin/admin-header.php-> /wp-admin/menu-header.phptidak ada kaitan untuk melakukannya.

Solusinya adalah dengan menghubungkan admin_headdan melakukan beberapa 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;
    }
}

[update]
Sesuai klarifikasi untuk pertanyaan, di mana menjadi jelas bahwa motivasi adalah branding area admin, ini adalah 4 plugin yang saya gunakan untuk itu:

  • Administrasi (menyembunyikan sebagian besar antarmuka WordPress, memfilter menurut peran)
  • Menu Drop-down Admin Ozh ' (semua menu admin dalam menu drop down CSS yang didorong secara horizontal)
  • Admin Admin Tetap (pendamping sempurna untuk Ozh)
  • Admin Tweaks (Saya penulisnya yang ini, dan tujuan utamanya adalah menyesuaikan banyak area antarmuka admin)
brasofilo
sumber
Jika Anda pergi rute ini, akan lebih masuk akal untuk menggunakan wp_enqueue_script()dengan admin_enqueue_scriptkail.
mrwweb
1
@ mrwweb Bahkan ketika itu adalah penyisipan kecil? Apakah menurut Anda layak?
brasofilo
Sepakat. Penyisipan skrip / gaya kecil lebih mudah dilakukan admin_head.
chrisguitarguy
Saya tidak suka menggunakan jquery kecuali saya tidak punya pilihan lain. Bagaimana jika pengunjung menonaktifkan javascript di browser mereka? Padahal, tidak mungkin terjadi, tetapi ada kemungkinan di sana. Pokoknya terima kasih atas sarannya.
dev-jim
Dalam contoh saya, ini akan menjadi masalah menghapus ganda dengan juga menyembunyikan 2 div di CSS juga.
brasofilo
2

Satu-satunya cara ramah kait yang saya tahu adalah menggunakan remove_menu_page()untuk setiap item menu. Bahkan kemudian, saya tidak tahu apa yang terjadi pada bilah kiri itu sendiri (apakah akan runtuh ke lebar 0px atau apa). Bahkan dengan menggunakan pengait, saya membayangkan di beberapa titik Anda akan menginginkan enqueue stylesheet admin untuk membersihkan apa yang tersisa dari gaya markup menu.

Saya akan berhati-hati melakukan ini. Misalnya, jika Anda menghapus "Pengaturan," maka plugin apa pun yang membuat halaman menu di menu "Pengaturan" tidak dapat dijangkau. Secara umum, saya bertanya-tanya seberapa berkelanjutan itu benar-benar menghapus menu.

mrwweb
sumber
Saya yakin dia mencari cara untuk menghapus menu untuk pengguna biasa, bukan admin. :)
Christine Cooper
1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
kakoma
sumber
Jawaban ini juga sangat berguna. Ini pendek dan berfungsi seperti pesona, kecuali untuk halaman menu yang dibuat oleh plugin. (yang seharusnya tidak menjadi masalah karena hanya dapat dilihat oleh administrator)
Charles
Ini adalah solusi yang mudah, memang, TETAPI layak dikatakan bahwa itu tidak akan benar-benar memblokir akses ke halaman admin itu, itu hanya akan membuat mereka tidak terlihat di bar admin. Ini lebih baik daripada solusi CSS untuk menyembunyikan item, tentu saja, tetapi masih cacat dalam hal keamanan: pengguna yang cerdas masih bisa mendapatkan akses langsung ke halaman admin dengan mengedit URL.
Marcos Buarque
0

Saya meningkatkan solusi @brasofilo karena memiliki bug kecil - pada halaman reload dengan menu koneksi internet tidak terbaik akan muncul untuk waktu yang sangat singkat. Untuk menghindarinya saya menambahkan sedikit lebih banyak 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
sumber