เป็นไปได้ที่จะซ่อน UI ประเภทเมนู / โพสต์ที่กำหนดเองจากบทบาทผู้ใช้เฉพาะหรือไม่


20

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

นี่เป็นสิ่งสำคัญเนื่องจากฉันต้องการให้ลูกค้าแยกแยะประเภทโพสต์ที่กำหนดเองสำหรับร้านค้าอย่างสมบูรณ์และหากพวกเขาสามารถเห็นร้านค้า CPT UI ในแดชบอร์ดก็ยังคงไม่ได้สร้างความแตกต่างหากความสามารถของพวกเขาถูก จำกัด พวกเขาสามารถเพิ่มผลิตภัณฑ์ด้วยตนเองได้อย่างไร

ID ชอบที่จะไม่ใช้ปลั๊กอินนี้ แต่ถ้ามีบางอย่างที่สามารถทำกลอุบายในแบบที่ไม่ป่องๆ

ขอบคุณสำหรับความช่วยเหลือของคุณ SB

คำตอบ:


39

หากต้องการซ่อนรายการเมนูประเภทโพสต์จากผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ:

function wpse28782_remove_menu_items() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page( 'edit.php?post_type=your_post_type' );
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_menu_items' );

your_post_type ควรเป็นชื่อประเภทโพสต์จริงของคุณ

Edit-

หน้าเมนูอื่น ๆ ที่คุณสามารถลบได้:

remove_menu_page('edit.php'); // Posts
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Links
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('themes.php'); // Appearance
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings

แก้ไข 2 -

การลบรายการเมนูปลั๊กอิน

สำหรับปลั๊กอินดูเหมือนว่าคุณต้องการเพียงpage=คิวรี่แบบสอบถาม สิ่งอื่น ๆ admin_menu add_actionที่จะต้องทราบเป็นลำดับความสำคัญซึ่งเป็นอาร์กิวเมนต์ที่สามไป ต้องตั้งค่าให้ต่ำพอ (ยิ่งจำนวนสูงขึ้นมีลำดับความสำคัญต่ำกว่า) เพื่อให้ปลั๊กอินได้เพิ่มตัวเองลงในเมนูแล้ว

function wpse28782_remove_plugin_admin_menu() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page('cart66_admin');
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_plugin_admin_menu', 9999 );

เป็นวิธีที่ง่ายมากขอบคุณมากมันทำงานได้อย่างสมบูรณ์แบบ!
Mr.Brown

อยากรู้อยากเห็นเป็นwpse28782_remove_menu_itemsชื่อฟังก์ชั่นที่คุณเลือกแบบสุ่มหรือเฉพาะกับ WP นี้หรือไม่ .... นอกจากนี้ฉันจะขยายความคิดนี้และกำหนดเป้าหมาย CPT เพิ่มเติมหรือสำหรับเมนู WP ดั้งเดิมอื่น ๆ ได้อย่างไร ขอบคุณอีกครั้งสำหรับความช่วยเหลือ!
Mr.Brown

1
@ Mr.Brown - ชื่อฟังก์ชั่นนั้นขึ้นอยู่กับ id ของคำถามของคุณ (ตรวจสอบ URL) สิ่งที่รับประกันว่าจะไม่ซ้ำกันคุณสามารถตั้งชื่อสิ่งที่คุณต้องการตราบใดที่มันไม่ใช่ฟังก์ชั่นที่มีอยู่ คุณยังสามารถเพิ่มการremove_menu_pageโทรเพิ่มเติมเพื่อลบ CPT อื่น ๆ รวมถึงรายการเมนูอื่น ๆ ดูการแก้ไขของฉัน
Milo

เจ๋งมากขอบคุณอีกครั้ง นี่เป็นทางออกที่น่าอัศจรรย์
Mr.Brown

สิ่งสุดท้ายที่ฉันจะไปเกี่ยวกับการค้นหาชื่อแม่แบบที่ใช้สำหรับเมนูเพิ่มเติมจากปลั๊กอินที่ติดตั้งอยู่ในปัจจุบัน? กล่าวคือ remove_menu_page('cart_plugin');
Mr.Brown

2

คำตอบที่ได้รับการยอมรับสามารถใช้เพื่อซ่อนประเภทโพสต์ที่กำหนดเอง (และรายการสารพันอื่น ๆ ) ตามที่อธิบายไว้ แต่ถ้าคุณต้องการซ่อนเมนูปลั๊กอินCPT UIเองคุณสามารถลบการกระทำที่เพิ่มไปยังเมนูในตอนแรก

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}

1

นอกจากนี้คุณยังสามารถใช้Adminimizeปลั๊กอิน ปลั๊กอินนี้มีตัวเลือกสำหรับโพสต์ทุกประเภทกล่องเมตาและอื่น ๆ อีกมากมายเพื่อซ่อนในบทบาทที่แตกต่างกัน ไม่มีการเข้ารหัส


0

หากคุณต้องการซ่อนเมนูปลั๊กอินนั้นซึ่งชื่อเป็น "Custom Post Type UI" หรือที่รู้จักในชื่อ CPTUI มันเป็นไปไม่ได้ที่จะรวมลิงค์แรกกับ remove_menu_page

สิ่งที่คุณต้องทำคือ;

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');

0

ในการซ่อนเมนูย่อย Woocommerce ภายใต้เมนู "ผลิตภัณฑ์" ระดับบนสุดสำหรับบทบาทผู้ใช้ Shop Manager (Wordpress 5.1.1):

function remove_menus_shopmgr(){

// If the current user is a shop manager
if ( current_user_can('shop_manager') ) {

   //removes Products > Categories submenu 
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&post_type=product' );

   //removes Products > Tags submenu
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );

0

หากremove_menu_pageไม่ได้ผลสำหรับคุณ (ไม่ใช่สำหรับฉัน) จากนั้นแทนที่จะเอาเมนูออกไปอีกทางเลือกหนึ่งคือบอกให้ WordPress ไม่แสดงเมนูสำหรับประเภทโพสต์:

function wpse28782_hide_menu_items() {
    if( !current_user_can( 'administrator' ) ) {
        $post_type = get_post_type_object( 'your_post_type');
        if ($post_type) {
            $post_type->show_in_menu = false;
        }
    }
}
add_action( 'admin_menu', 'wpse28782_hide_menu_items', 99 );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.