子菜单中显示的自定义邮件类型的集合

时间:2016-10-06 作者:klewis

我有WordPress 4.6.1。我现在有了创建自定义帖子类型的经验,并可以在管理UI控制台中看到它们堆叠在一起。但是,我如何在菜单中创建一个堆栈所有自定义帖子类型,以便当我转到wp admin时,在左侧看到一个名为My Post Types, 如果我将鼠标悬停在它上面,它会以列表格式显示我的所有自定义帖子类型。

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

我假设当你说你“将鼠标悬停在它上面,它会显示列表中显示的自定义帖子类型”时,你指的是子菜单。以下使用admin_menu 要创建一个空白的父菜单,我们将遍历公共帖子类型,将其显示为子菜单:

/**
 * Add an Admin Menu which contains submenus of public post types
 * - https://codex.wordpress.org/Plugin_API/Action_Reference/admin_menu
 * - https://developer.wordpress.org/reference/hooks/admin_menu/
 *
 * @return void
 */
function wpse_q_241760() {

    $post_types = get_post_types( array(
        \'public\'    => true,
    ), \'objects\' );

    if( ! empty( $post_types ) ) {
        add_menu_page(
            \'Post Types\',           // Page Title ( doesn\'t matter )
            \'Post Types\',           // Menu Title
            \'edit_posts\',           // Capability to view this menu item
            \'javascript:void(0);\',  // URL ( slug )
            \'\',                     // Callback Function
            \'dashicons-book\',       // Dashicon
            24                      // Menu Position
        );

        foreach( $post_types as $type ) {
            add_submenu_page(
                \'javascript:void(0);\',      // Parent URL Slug
                $type->labels->name,        // Page Title ( doesn\'t matter in this case )
                $type->labels->name,        // Menu Title
                \'edit_posts\',               // Cability to view
                "edit.php?post_type={$type->name}"  // URL ( slug )
            );
        }

        remove_submenu_page( \'javascript:void(0);\', \'javascript:void(0);\' );
    }
}
add_action( \'admin_menu\', \'wpse_q_241760\' );
以上add_menu_page() 需要传递某种链接-因为我们在该链接上没有任何可显示的内容(没有post_type 绑定到此页面,这是一个虚拟页面)我选择链接到javascript:void(0); 相反,它告诉我们的浏览器不要在任何地方导航。这允许我们将菜单项悬停,然后单击其中一个帖子类型链接。它还添加了一个同名的子菜单,但我们不需要它,所以我们在函数调用结束时将其删除。

这个get_post_types() 函数有几个参数要过滤public 对你的案子不起作用。

相关推荐