如何手动设置选择的自定义管理子菜单?

Mus*_*ari 4 wordpress

我正在开发我的第一个 Wordpress 插件。假设它有以下管理页面:

  • 通用设置
  • 添加新供应商
  • 供应商
  • 编辑供应商

我不想从中显示菜单中的编辑供应商,并希望使用供应商页面中的链接使其可访问。我的菜单和供应商页面是: 在此处输入图片说明

生成菜单的代码:

function nes_general_settings_view () { 
    require_once("views/admin/general_settings.php");
}

function nes_vendor_view () { 
    require_once("views/admin/vendor.php");
}

function nes_vendor_new_view () {
    require_once("views/admin/vendor_new.php");
}

function nes_vendor_edit_view () {

    require_once("views/admin/vendor_edit.php");
}

add_action("admin_menu", function () {
    add_menu_page(
        "Service",  
        "Service",  
        "manage_options",            
        "nes_general_settings",      
        "nes_general_settings_view", 
        null,                        
        4                            
    );

    add_submenu_page( "nes_general_settings", "General Settings", "General Settings", 0, "nes_general_settings", "nes_general_settings_view");      
    add_submenu_page( "nes_general_settings", "Vendors", "Vendors", 0, "nes_vendor", "nes_vendor_view");
    add_submenu_page( "nes_general_settings", "New Vendor", "New Vendor", 0, "nes_vendor_new", "nes_vendor_new_view");
    add_submenu_page( "nes_fake_id", "Edit Vendor", "Edit Vendor", 0, "nes_vendor_edit", "nes_vendor_edit_view");       
});
Run Code Online (Sandbox Code Playgroud)

以及生成编辑供应商页面链接的代码:

<a href="<?=admin_url("admin.php?page=nes_vendor_edit")?>">Edit</a>
Run Code Online (Sandbox Code Playgroud)

但是当我在编辑供应商页面时,我的菜单没有被选中。 在此处输入图片说明

当我在Edit Vendor上时,如何设置Service > Vendors子菜单被选中?

小智 5

如果您的子菜单是自定义帖子类型,您可以通过将“show_in_menu”的自定义帖子类型参数设置为您在创建自定义帖子时定义的 slug,轻松地将它们定义为自定义菜单的子菜单项- 后类型。这样做将保留默认菜单打开/关闭和管理菜单中当前子菜单项的突出显示。

例如:

/* ————————————————————————— */
/* Content Types Menu Item
/* ————————————————————————— */

add_menu_page(
    'Content Types',
    'Content Types',
    'manage_options',
    'custom-content', // menu slug
    'ds_create_new_submenu',
    'dashicons-editor-table',
    null
);
Run Code Online (Sandbox Code Playgroud)

然后在您的自定义帖子类型参数中定义 show_in_menu 以匹配菜单段。

$args = array(
    'labels'                => $labels,
    'menu_icon'             => 'dashicons-format-status',
    'capability_type'       => 'manage_options',
    'show_in_menu'          => 'custom-content'
);
Run Code Online (Sandbox Code Playgroud)

为简单起见缩短了代码示例


bra*_*ilo 4

这必须使用 jQuery 来完成,以将适当的类添加到管理菜单中。

使用以下命令打印脚本:

# Grab the slug to print only in this screen
$hook = add_submenu_page( 
    null, # better than fake id
    "Edit Vendor", 
    "Edit Vendor", 
    'manage_options', # IMPORTANT, don't use levels (0-9), they're deprecated
    "nes_vendor_edit", 
    function() {
        echo '<h1>nes_vendor_edit_view</h1>';
    }
);

add_action( "admin_footer-$hook", function()
{
    # http://stackoverflow.com/questions/5673269/what-is-the-advantage-of-using-heredoc-in-php
    echo <<<HTML
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#toplevel_page_nes_general_settings')
                .addClass('current wp-has-current-submenu wp-menu-open');
        });     
        </script>
HTML;
});
Run Code Online (Sandbox Code Playgroud)