在/作为子菜单中插入和排序自定义帖子类型

时间:2017-01-13 作者:Cerere

TLDR: 在后端,我想在菜单页面中添加自定义帖子类型(我可以这样做)。但我无法排序生成的子菜单页。

我有3 custom post types “A”,“B”,“C”,我想:

  1. Group 3个目录under one menu page 当我单击“我的自定义页”时,称为“我的自定义页”,即redirected to the content “我的自定义页面”,以及not one of the custom post types.

    add_menu_page(\'My Custom Page\', \'My Custom Page\', \'manage_options\', \'my-top-level-slug\');
    
    然后,我将每个自定义帖子类型设置为:

    \'show_in_menu\'=> \'my-top-level-slug\'
    
    这使我能够在一个菜单页下成功地将我的3种自定义帖子类型分组。和here lies the problem: 如果我单击“我的自定义页面”,我会被重定向到第一个自定义帖子类型(取决于包含顺序)-我想单击“我的自定义页面”,并被重定向到所述页面(我计划在其中显示统计信息、查看次数最多的帖子等),但会打开一个自定义帖子类型,这是我不想要的。

    我想我可以添加一个子菜单页,但我添加的任何子菜单页都会包含在自定义帖子类型之后(因此在子菜单页列表的底部)。所以我想知道是否有办法给这些子页面分配一个顺序,这样如果我点击“我的自定义页面”,它就不会显示自定义的帖子类型。

    <小时>

    UPDATE

    经过一番搜索,我在抄本上找到了以下文章:https://developer.wordpress.org/reference/functions/add_submenu_page/ . 通过遵循此示例并嵌入此代码:

    function wpdocs_register_my_custom_submenu_page() {
    add_submenu_page(
        \'my-menu\',
        \'My Custom Submenu Page\',
        \'My Custom Submenu Page\',
        \'manage_options\',
        \'edit.php?post_type=CPT-NAME\',
        false
    );
    }
    
    add_action(\'admin_menu\', \'wpdocs_register_my_custom_submenu_page\');
    
    我能够完成上面的两点(这样分组就可以了,当我点击时,我会被重定向到一个评论页面)。但是,通过这样做,一旦我进入一篇帖子(创建或编辑一篇,无所谓)内menu page does\'t result active 再次:如果我将鼠标悬停在菜单页上,它将以白色标记为处于活动状态,否则菜单将显示(&;子菜单已折叠/关闭。

    以前的解决方案工作正常(菜单状态),但不允许我将自定义页面分配给“我的自定义页面”。至于第二种解决方案,反之亦然(在帖子中,菜单状态为非活动状态,但我可以显示“我的自定义页面”)。

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

我找到了答案。简而言之:

解决方案1如果您想简单地向菜单项添加自定义帖子类型,请使用解决方案1(包括使用add_menu_page和设置\'show_in_menu=>\' 到菜单页slug)。它可以工作,但如果您单击新创建的菜单页面,您将被重定向到第一个CPT(任何子页面都将被推到列表的末尾)。

解决方案2

如果要将自定义帖子类型分组,请单击菜单页上的子页面,然后选择解决方案2(请参见上面的更新):set\'show_in_menu=> false\', 然后创建如下函数:

function create_menupages_252428() {

// https://developer.wordpress.org/reference/functions/add_menu_page/

add_menu_page(
    \'Page\', // Page title
    \'Page\', // Menu title
    \'manage_options\', // Capability
    \'page\', // Slug
    \'mycustompage\', // Function name
    \'dashicons-format-aside\', // Slug
    1 // Order
);

// https://developer.wordpress.org/reference/functions/add_submenu_page/

add_submenu_page(
    \'page\', // Parent slug
    \'subpage\', // Page title
    \'subpage\', // Menu title
    \'manage_options\', // Capability
    \'edit.php?post_type=CPT\',  // Slug
    false // Function
);
}
add_action(\'admin_menu\', \'create_menupages_252428\');
完成后,如果要在操作自定义帖子类型时将菜单页显示为活动状态,

function menu_active_252428() {
global $parent_file, $post_type;
if ( $post_type == \'CPT\' ) {
    $parent_file = \'page\';
}
}
add_action( \'admin_head\', \'menu_active_252428\' );
如果您有机会找到更好的方法,请随时添加/更正我的解决方案!

SO网友:Rodrigo García

更新:现在您只需使用以下内容创建菜单页:

function create_home_menu(){
    add_menu_page(
        \'Página de Inicio\',
        \'Inicio/Home\',
        \'manage_options\',
        \'my_home_menu\',
        \'mycustompage\',
        \'dashicons-admin-home\',
        2
    );
}
add_action(\'admin_menu\', \'create_home_menu\');
然后确保在创建帖子类型add时\'show_ui\'=>true\'show_in_menu\'=>\'my_home_menu\' 其中“my\\u home\\u menu”是您对之前创建的菜单所做的调整。

“显示UI”使其可见,可以进行编辑和更改,“显示在菜单中”默认情况下将其作为子菜单添加到菜单中。现在,在编辑帖子类型时,不需要添加额外的功能来使父菜单显示为选中状态。

相关推荐

Order Admin sub-menu items?

我正在使用向CPT管理菜单添加项目add_submenu_page 这很好,但它们被添加到CPT选项后的子菜单底部。我希望能够将它们放在最上面,但我想这个问题也可以应用于订购所有基于管理员的子菜单项。我所尝试的(不起作用,我尝试了几种变体),function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( \'edi