Thêm một trang quản trị, nhưng không hiển thị nó trên menu quản trị


8

Tôi có một plugin tùy chỉnh 'Biểu đồ' có menu riêng. Trong menu đó là các liên kết đến 3 trang cho plugin - 'Biểu đồ', 'Thêm biểu đồ' và 'Chỉnh sửa biểu đồ'. Tuy nhiên, tôi không muốn hiển thị liên kết đến 'Chỉnh sửa biểu đồ'.

Đây là cách tôi thêm trang đang đề cập -

$this->pagehook = add_submenu_page('charts', __('Edit Chart'), __('Edit Chart'), 'edit_charts', 'edit-chart', array(&$this, 'on_show_page'));

Tôi đã truy cập internet và không thể tìm ra cách để làm điều này (hoạt động). Có thể xóa toàn bộ menu cấp cao nhất (không phải thứ tôi cần) và bạn có thể xóa từng mục riêng lẻ khỏi $submenutoàn cầu (nhưng làm như vậy cũng loại bỏ khả năng đã đăng ký), vì vậy không ai có thể truy cập trang -

global $submenu;
if(!empty($submenu['charts'])) : foreach($submenu['charts'] as $key => $page) :
        if($page[0] === 'Edit Chart') :

            /** Removes all permissions to access the page */
            //unset($submenu['charts'][$key]);              
            /** Removes the title, but the menu entry still exists, so it looks odd */
            $submenu['charts'][$key][0] = '';

        endif;
    endforeach;
endif;

Tôi đã tìm cách ẩn nó thông qua CSS, nhưng không thể thấy cách nào để làm điều đó thông qua HTML mà Wordpress tạo ra -

<li><a href="admin.php?page=edit-chart" tabindex="1">Edit Chart</a></li>

Tôi cũng đã xem xét jQuery, nhưng điều đó có những hạn chế tương tự với tuyến CSS, cộng với tôi không tin rằng tôi là người duy nhất từng muốn làm điều này - phải có một cách, tôi không thể tìm thấy nó!

Bất kỳ gợi ý và lời khuyên đánh giá.

Cảm ơn.


Bạn đang móc chức năng này ở đâu? Bộ lọc / hành động gì?
s_ha_dum

Câu trả lời:


9

Sử dụng một trang menu con như sên cha. Menu quản trị chỉ có hai cấp độ, vì vậy cấp độ thứ ba tưởng tượng sẽ bị ẩn.

Mã mẫu, đã kiểm tra:

add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );

function wpse_73622_register_hidden_page()
{
    add_submenu_page(
        'options-writing.php',
        'Hidden!',
        'Hidden!',
        'exists',
        'wpse_73622',
        'wpse_73622_render_hidden_page'
    );
    # /wp-admin/admin.php?page=wpse_73622
}

function wpse_73622_render_hidden_page()
{
    echo '<p>hello world</p>';
}

Điều này không hoạt động, mặc dù những gì không hoạt động là trạng thái hoạt động trên mục menu cha bị mất, vì vậy menu con đóng lại và không có mục cha mẹ menu nào được chọn trong thanh bên trái.
Lee

25

Từ các tài liệu trên add_submenu_page(), bạn thấy rằng bạn có thể ẩn liên kết menu con của mình khỏi một mục menu cấp cao nhất mà nó thuộc về việc đặt slug(đối số thứ 1) thành null:

add_action( 'admin_menu', 'register_my_custom_submenu_page' );

function register_my_custom_submenu_page() {
    add_submenu_page( 
        null,
        'My Custom Submenu Page',
        'My Custom Submenu Page',
        'manage_options',
        'my-custom-submenu-page',
        'my_custom_submenu_page_callback',
    );
}

Để tô sáng mục menu mong muốn (ví dụ: 'tất cả các biểu đồ' khi truy cập trang 'chỉnh sửa biểu đồ'), bạn có thể thực hiện các bước sau:

add_filter( 'submenu_file', function($submenu_file){
    $screen = get_current_screen();
    if($screen->id === 'id-of-page-to-hide'){
        $submenu_file = 'id-of-page-to-higlight';
    }
    return $submenu_file;
});

Tuyệt, nhưng làm nổi bật không hoạt động chính xác. Nếu tôi đặt submenu_filechúng hiển thị như hiện tại. Nhưng menu cấp cao nhất không được mở. Nhưng nếu tôi đặt parent_file, wp chạy chức năng get_admin_page_parent()sau các bộ lọc và thay đổi lại. Đối với những gì các nhà phát triển wp thêm parent_filebộ lọc nếu dù sao chức năng thay đổi nó trở lại. Bạn có thể giúp không?
DARK_DIESEL

Ngoài ra nếu parent_slugđược đặt là null, page_titlekhông được sử dụng trong tiêu đề.
DARK_DIESEL

Bạn có thể sử dụng 'options.php'thay vì tắt null.
RavanH
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.