Nhận mục menu con quản trị viên tùy chỉnh để tô sáng khi kích hoạt


9

Tôi có một loại bài đăng tùy chỉnh, Jobs, với 3 nguyên tắc phân loại trong menu Admin.

Một trong những nguyên tắc phân loại là Trạng thái, là Hoạt động hoặc Đóng. Tôi muốn một mục menu dưới Jobs cho Active Jobs. Tôi đã tạo nó với mã này

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&jobstatus=67'
);

Điều này hoạt động hoàn hảo, ngoại trừ mục menu Jobs vẫn được tô sáng khi tùy chọn menu Active Jobs hoạt động. Xem ảnh chụp màn hình

ví dụ về hiển thị menu con

Tôi đã đọc trong bài viết này Lớp hiện tại trên menu quản trị bằng cách sử dụng add_submenu_page () để không bao gồm sên cha làm tham số đầu tiên. Tôi không biết làm thế nào để menu con xuất hiện trong phần điều hướng chính xác khi tôi xóa sên tên tệp.

Tại thời điểm này tôi không sử dụng chức năng gọi lại, tôi chỉ đơn giản thực hiện cùng một URL với tùy chọn menu con Công việc mặc định, ngoại trừ với các tham số truy vấn lọc các bài đăng được hiển thị. Nếu chuyển cái này thành một hàm gọi lại sẽ giải quyết vấn đề, tôi có thể làm điều đó. Nhưng tôi không biết những gì nên đi trong chức năng gọi lại. Tôi muốn hiển thị trang chỉnh sửa loại bài đăng tùy chỉnh tiêu chuẩn, chỉ với một bộ lọc phân loại. cảm ơn vì đã giúp đỡ


Tôi muốn biết những giải pháp nào cho việc này vì nó có vẻ khó thực hiện. Cách 'WordPress' sẽ là thêm menu bộ lọc thả xuống như trong ảnh chụp màn hình của bạn.
Stephen Harris

Bạn có một lỗi trong url 'edit.php?&post_type=jobs&jobstatus=67' ... trước tiên &không nên có, theo sau ?..
Mark Duncan

Đánh dấu - bạn là chính xác, và tôi đã thay đổi điều đó trong mã trong bài viết ở trên và trên trang web trực tiếp. Tuy nhiên, điều đó không giải quyết được vấn đề. Cảm ơn bạn đã chỉ ra rằng.
stvwlf

Câu trả lời:


5

Tôi đã thực hiện công việc này bằng cách sử dụng các menu Bài viết và trạng thái Dự thảo. Nó dựa vào jQuery để sửa đổi các lớp mục danh sách. Thích nghi để làm việc với loại bài đăng và URL của bạn.

Đây là kết quả:
dự thảo thêm mục phụ

add_action( 'admin_menu', 'wpse_44270_menu_admin' );
add_action( 'admin_head-edit.php', 'wpse_44270_highlight_menu_item' );

function wpse_44270_menu_admin() 
{
    add_submenu_page(
        'edit.php',
        'Drafts', 
        '<span id="my-draft-posts">Drafts</span>', 
        'edit_pages', 
        'edit.php?post_status=draft&post_type=post'
    );
}

function wpse_44270_highlight_menu_item()
{
    global $current_screen;

    // Not our post type, exit earlier
    if( 'post' != $current_screen->post_type )
        return;

    if( isset( $_GET['post_status'] ) && 'draft' == $_GET['post_status'] )
    {       
        ?>
        <script type="text/javascript">
            jQuery(document).ready( function($) 
            {
                var reference = $('#my-draft-posts').parent().parent();

                // add highlighting to our custom submenu
                reference.addClass('current');

                //remove higlighting from the default menu
                reference.parent().find('li:first').removeClass('current');             
            });     
        </script>
        <?php
    }
}

5

Đây là một giải pháp tôi vừa đưa ra mà không sử dụng jQuery:

Có một bộ lọc parent_filetrong wp-admin/menu-header.phpđó chạy ngay trước khi xuất menu. Các bình luận nội tuyến nói:

Đối với các plugin để di chuyển các tab menu phụ xung quanh.

Nó chỉ là một bộ lọc trên biến toàn cục $parent_filevà tôi không chắc nó làm gì nhưng chúng tôi sẽ sử dụng bộ lọc này để thay đổi biến toàn cục $submenu_filethay vào đó, thiết lập menu con được tô sáng. Vì vậy, đây sẽ là giải pháp trong trường hợp của bạn:

add_filter('parent_file', 'wpse44270_parent_file');

function wpse44270_parent_file($parent_file){
    global $submenu_file;
    if (isset($_GET['jobstatus']) && $_GET['jobstatus'] == 67) $submenu_file = 'edit.php?post_type=jobs&jobstatus=67';

    return $parent_file;
}

Bạn có thể điều chỉnh điều này với bất kỳ định dạng url. Ví dụ: tôi sử dụng định dạng admin.php?page=my_plugin_slug&action=myactioncho các menu phụ của plugin, vì vậy tôi đã sử dụng định dạng này để làm nổi bật các menu phụ của mình:

add_filter('parent_file', 'wpse44270_1_parent_file');

function wpse44270_1_parent_file($parent_file){
    global $submenu_file;
    if (isset($_GET['page']) && isset($_GET['action'])) $submenu_file = $_GET['page'] . '&action=' . $_GET['action'];

    return $parent_file;
}

PS: Tôi cũng đã thử hành động admin_menuđể thiết lập $submenu_filevà nó đã hoạt động trong trường hợp của tôi (trang plugin / slug tùy chỉnh) nhưng không cho edit.phpcác menu phụ (trường hợp của bạn). Vì vậy, tôi đã tìm kiếm một hành động / bộ lọc khác chạy sau đó và đó là bộ lọc parent_file.


0

tôi phát hiện ra rằng bạn cũng cần sử dụng các thực thể html cho liên kết của mình. kể từ khi bạn có

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&jobstatus=67'
);

bạn có thể thử và thay đổi ký hiệu và tương đương với thực thể html của nó

&amp;

vì vậy bạn sẽ có

add_submenu_page(
    'edit.php?post_type=jobs',
    'Active Jobs',
    'Active Jobs',
    'manage_options',
    'edit.php?post_type=jobs&amp;jobstatus=67'
);

điều này làm việc cho tôi ... tôi cũng đã kiểm tra chuỗi đầu ra cho menu con và menu cha và kiểm tra xem chúng có khớp không. đây có thể là một chức năng nhỏ để kiểm tra những thứ này

add_filter( 'parent_file', 'test_taxonomy_highlight' );
function test_taxonomy_highlight( $parent_file ){
   global $submenu_file;
   echo '<pre>', var_dump( $submenu_file, htmlentities( $submenu_file ) ), '</pre>';
   echo '<pre>', var_dump( $parent_file, htmlentities( $parent_file ) ), '</pre>';
   return $parent_file;
}
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.