จะลบเมนูผู้ดูแลระบบทั้งหมดได้อย่างไร


14

ฉันต้องการกำหนดพาเนลผู้ดูแลระบบเองสำหรับผู้ใช้ของฉัน ดังนั้นฉันจะลบเมนูผู้ดูแลระบบทั้งหมดได้อย่างไร ไม่ลบรายการเมนูฉันหมายถึงลบแถบเมนูแนวตั้งด้านซ้ายอย่างสิ้นเชิงรวมถึงการออกแบบเมนู (เช่น css, background .. เป็นต้น) ฉันต้องการให้มันว่างเปล่า

ฉันสามารถทำได้โดยการแฮ็ก CSS แต่ฉันชอบที่จะใช้เบ็ดเพื่อทำมัน ความคิดใด ๆ

ขอบคุณ


ฉันอยากรู้. หากผู้ใช้ของคุณไม่ต้องการเข้าถึงรายการเมนูผู้ดูแลระบบทำไมพวกเขาจึงต้องเข้าถึงแผงควบคุมได้เลย
moraleida

สงสัยในแรงจูงใจ ... คุณต้องการซ่อนไว้สำหรับบทบาท / ผู้ใช้เฉพาะหรือไม่ คุณกำลังสร้างเมนู Admin Bar แบบกำหนดเอง (ที่ด้านบน) หรือไม่?
brasofilo

1
ใช่ฉันต้องการปรับแต่งเมนูผู้ดูแลระบบ ไม่ว่าเมนูผู้ดูแลระบบในปัจจุบันไม่ดีพอมันแค่รู้สึก 'wordpress' เช่นกัน ไม่ดีสำหรับการสร้างแบรนด์ในความคิดของฉัน
dev-jim

โปรดตรวจสอบคำตอบก่อนหน้าของฉันที่นี่; wordpress.stackexchange.com/questions/136058/…
numediaweb

คำตอบ:


16

เบ็ดที่ถูกต้องที่ใช้คือadmin_menuสร้างฟังก์ชันเพื่อลบเมนูที่คุณต้องการลบ ฟังก์ชัน 2 ต่อไปนี้ลบเมนูทั้งหมด

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

สกรีนช็อตของเมนูด้านซ้ายโดยใช้ 2 ฟังก์ชั่นด้านบน:

ป้อนคำอธิบายรูปภาพที่นี่


3
$GLOBALS['menu'] = array();ฉันไม่พบวิธีอื่นโดยใช้ การให้ null ในอาร์เรย์จะใช้งานได้เช่นกัน
dev-jim

คุณใส่สิ่งนี้ไว้ที่ไหน?

มีใครสังเกตเห็นร่างล่าสุดจากภาพหน้าจอนั้นบ้าง ;)
acSlater

5

หลังจากทำตาม/wp-admin/admin-header.php-> /wp-admin/menu-header.phpไม่มีสิ่งที่ต้องทำ

วิธีแก้ไขคือเชื่อมต่อadmin_headและทำ 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]
ตามคำอธิบายของคำถามที่ชัดเจนว่าแรงจูงใจคือการสร้างแบรนด์ให้กับพื้นที่ admin นี่คือปลั๊กอิน 4 ตัวที่ฉันใช้:

  • จัดการ (ซ่อนชิ้นส่วนใหญ่ของส่วนต่อประสาน WordPress, กรองตามบทบาท)
  • เมนูผู้ดูแลระบบOzh 'เมนูแบบเลื่อนลง (เมนูผู้ดูแลระบบทั้งหมดในเมนูแบบเลื่อนลง CSS ขับเคลื่อนตามแนวนอน)
  • Admin Menus Fixed (สหายที่สมบูรณ์แบบสำหรับ Ozh's)
  • Admin Tweaks (ฉันเป็นผู้เขียนสิ่งนี้และมันมีจุดประสงค์หลักคือการปรับแต่งส่วนต่าง ๆ ของส่วนต่อประสานผู้ดูแลระบบ)

ถ้าคุณไปเส้นทางนี้มันสมเหตุสมผลกว่าที่จะใช้wp_enqueue_script()กับadmin_enqueue_scripthook
mrwweb

1
@mrwweb แม้ว่ามันจะเป็นการแทรกขนาดเล็ก? คุณคิดว่ามีค่าหรือไม่
brasofilo

ตกลง สคริปต์ขนาดเล็ก / admin_headแทรกสไตล์ทำได้อย่างง่ายดายมากขึ้นด้วย
chrisguitarguy

ฉันไม่ชอบใช้ jquery ยกเว้นว่าฉันไม่มีทางเลือกอื่น ถ้าผู้เข้าชมปิดการใช้งานจาวาสคริปต์ในเบราว์เซอร์ของพวกเขา? แม้ว่าจะไม่น่าจะเกิดขึ้น แต่มีความเป็นไปได้ที่นั่น อย่างไรก็ตามขอขอบคุณสำหรับคำแนะนำ
dev-jim

ในตัวอย่างของฉันมันจะเป็นเรื่องของการลบสองครั้งด้วยการซ่อน 2 divs ใน CSS เช่นกัน
brasofilo

2

วิธีเดียวที่เป็นมิตรกับตะขอที่ฉันรู้คือใช้remove_menu_page()สำหรับทุกรายการเมนู ถึงอย่างนั้นฉันก็ไม่รู้ว่าเกิดอะไรขึ้นกับแถบด้านซ้ายเอง (ไม่ว่ามันจะยุบลงถึงความกว้าง 0px หรืออะไรก็ตาม) แม้จะใช้ตะขอผมก็ยังนึกถึงบางจุดที่คุณต้องการจัดคิวสไตล์ผู้ดูแลระบบเพื่อล้างสิ่งที่ยังคงอยู่ของสไตล์มาร์กอัปเมนู

ฉันจะระมัดระวังเกี่ยวกับการทำเช่นนี้ ตัวอย่างเช่นหากคุณลบ "การตั้งค่า" จะไม่สามารถเข้าถึงปลั๊กอินที่สร้างหน้าเมนูในเมนู "การตั้งค่า" โดยทั่วไปแล้วฉันสงสัยว่าการลบเมนูอย่างแท้จริงนั้นยั่งยืนเพียงใด


ฉันแน่ใจว่าเขากำลังมองหาวิธีลบเมนูสำหรับผู้ใช้ทั่วไปไม่ใช่ผู้ดูแลระบบ :)
Christine Cooper

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

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

คำตอบนี้มีประโยชน์มากเช่นกัน มันสั้นและใช้งานได้อย่างมีเสน่ห์ยกเว้นหน้าเมนูที่สร้างขึ้นโดยปลั๊กอิน (ซึ่งไม่ควรเป็นปัญหาเพราะผู้ดูแลระบบสามารถมองเห็นได้เท่านั้น)
ชาร์ล

มันเป็นวิธีแก้ปัญหาด้วยมือจริง ๆ แต่มันก็คุ้มที่จะบอกว่ามันจะไม่ปิดกั้นการเข้าถึงหน้าผู้ดูแลระบบเหล่านั้น แต่มันจะทำให้มองไม่เห็นในแถบผู้ดูแลระบบ มันดีกว่าโซลูชัน CSS สำหรับการซ่อนรายการแน่นอน แต่ยังมีข้อบกพร่องด้านความปลอดภัย: ผู้ใช้ที่มีปัญหายังสามารถเข้าถึงหน้าผู้ดูแลระบบได้โดยตรงโดยแก้ไข URL
Marcos Buarque

0

ฉันปรับปรุงวิธีการแก้ปัญหาของ @brasofilo เนื่องจากมีข้อผิดพลาดเล็ก ๆ - ในการโหลดซ้ำหน้าเว็บด้วยเมนูการเชื่อมต่ออินเทอร์เน็ตที่ไม่ดีที่สุดจะปรากฏขึ้นในเวลาอันสั้น เพื่อหลีกเลี่ยงมันฉันเพิ่ม 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;

    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.