访问控制台子菜单页面不会展开其父菜单项

时间:2021-12-07 作者:Artem

*我已将自定义贴子分类移到另一个菜单项

//created a post type that does not appear in admin menu, therefore its taxonomy does not, too
    $args = array(
            \'label\'                 => \'Item\',
            \'description\'           => \'Store items\',
            \'labels\'                => $labels,
            \'supports\'              => array( \'title\', \'editor\', \'thumbnail\', \'comments\', \'revisions\' ),
            \'taxonomies\'            => array( \'store-category\' ),
            \'hierarchical\'          => false,
            \'public\'                => true,
            \'show_ui\'               => true,
            \'show_in_menu\'          => false,
            \'menu_position\'         => 5,
            \'menu_icon\'             => \'dashicons-cart\',
            \'show_in_admin_bar\'     => true,
            \'show_in_nav_menus\'     => true,
            \'can_export\'            => true,
            \'has_archive\'           => true,
            \'exclude_from_search\'   => false,   
            \'publicly_queryable\'    => true,
            \'capability_type\'       => \'post\',
            \'rewrite\'               => array(\'slug\' => \'product\')
        );
    register_post_type( \'tdlrm_store_item\', $args );

//registered a taxonomy
$args = array(
        \'labels\'                     => $labels,
        \'hierarchical\'               => true,
        \'public\'                     => true,
        \'show_ui\'                    => true,
        \'show_admin_column\'          => true,
        \'show_in_nav_menus\'          => true,
        \'show_tagcloud\'              => false,
        \'rewrite\'                    => array(\'slug\' => \'group\')
    );
    register_taxonomy( \'store-category\', array( \'tdlrm_store_item\' ), $args );     

//added a submenu page for the taxonomy into another menu item
   add_action(\'admin_menu\', \'tdlrm_configure_admin_menu1\',10);
   function tdlrm_configure_admin_menu1(){
      add_submenu_page(\'TDLRM\', \'category_redirect\', \'Categories\', \'administrator\',  \'edit-tags.php?taxonomy=store-category&post_type=tdlrm_store_item\');
   }
当我访问页面时,没有菜单项展开,我希望TDLRM项(以前创建的)展开。

*我为具有特定角色的用户创建了一个子菜单页。当我访问该页面时,它会展开“用户”菜单项。

add_action(\'admin_menu\', \'tdlrm_configure_admin_menu2\',10);
function tdlrm_configure_admin_menu2(){
    add_submenu_page(\'TDLRM\', \'store_users_redirect\', \'Store users\', \'administrator\',  \'users.php?role=tdlrm_store_user\');
}
我希望TDLRM项目可以扩展。

在写这个问题时,我也解决了一个类似的问题,尽管解决方案不适用于其他两个问题。

我已经创建了一个自定义帖子类型,它的slug是“fp-striser”。它创建了一个带有以下slug的管理菜单项:“编辑”。php?post\\u类型=fp摘要\'。

然后,我将新菜单项移动到另一个菜单项下,如下所示:

add_action(\'admin_menu\', \'tdlrmm__menu_edit\', 20);
function tdlrmm__menu_edit(){
    // removing the page from top-level menu
    remove_menu_page( \'edit.php?post_type=fp-teaser\');
    
    // creating the page under My-menu
    // (My-menu is a page I created earlier.)
    add_submenu_page(\'My-menu\', \'Teasers\', \'Teasers\', \'edit_posts\',  \'edit.php?post_type=fp-teaser\');
}
问题是当我访问/wp-admin/edit.php?post_type=fp-teaser, 没有展开菜单项。我想要的是My-menu 要展开的项显示Teasers 子菜单项。

找到后,此问题已解决this Q&A, 通过设置show_in_menu 参数到false 注册时fp-teaser 岗位类型。

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

您可以使用parent_file hook 确保TDLRM菜单在查看;存储用户“;或“或”;“类别”;页

add_filter( \'parent_file\', \'wpse_398962_parent_file\' );
function wpse_398962_parent_file( $parent_file ) {
    global $submenu_file, $typenow;

    // 1: This is for highlighting the TDLRM » "Store users" submenu.
    if ( \'users.php\' === $parent_file && ! $submenu_file &&
        isset( $_GET[\'role\'] ) && \'tdlrm_store_user\' === $_GET[\'role\']
    ) {
        $typenow = true; // this trick ensures the parent file/slug is TDLRM

        // This highlights the "Store users" submenu.
        // Make sure it matches the slug you passed to add_submenu_page().
        $submenu_file = \'users.php?role=tdlrm_store_user\';

        return \'TDLRM\';
    }

    // 2: This is for highlighting the TDLRM » Categories submenu.
    // Make sure the value matches the slug you passed to add_submenu_page().
    if ( \'edit-tags.php?taxonomy=store-category&post_type=tdlrm_store_item\' === $submenu_file ) {
        return \'TDLRM\';
    }

    return $parent_file;
}

Notes:

<上面有一个技巧用于扩展TDLRM菜单,但只有在查看;存储用户“;页

这个技巧的作用是防止get_admin_page_parent() 从更改父文件($parent_file) 到users.php.

WordPress会转义特殊字符,如符号和(so& 成为&amp;) 在菜单/子菜单中slug, 因此,您的;“类别”;子菜单需要使用有效/正确转义的slug,以便在查看TDLRM»类别页面时突出显示子菜单。

// Note below I used &amp; instead of just &
add_submenu_page(\'TDLRM\', \'category_redirect\', \'Categories\', \'administrator\',
    \'edit-tags.php?taxonomy=store-category&amp;post_type=tdlrm_store_item\');
tdlrmm__menu_edit() 函数,您可以简单地设置show_in_menu arg到My-menu (菜单slug),然后;挑逗者“;(或您的帖子类型的(复数)标签)将显示为您的;“我的菜单”;菜单

但是,请务必阅读注释here 上面写着此项目将成为first submenu item, 并替换顶级链接的位置。如果不需要,创建菜单页的插件需要将add\\u action priority for admin\\u菜单设置为9或更低;。

相关推荐