将菜单页面移动到子菜单的正确方法是什么

时间:2019-12-18 作者:Mayeenul Islam

在我的一个客户端站点中,全局不需要默认的注释功能。相反,我只在特定的CPT(如投诉)下使用它。使用以下代码,我移动了“投诉”CPT下的父菜单项:“评论”:

<?php
/**
 * Relocate Comments in Admin Menu.
 *
 * Relocate Comments parent menu under a CPT.
 */
function wpse354847_relocate_comments_in_admin_menu()
{
    // Remove existing parent menu.
    remove_menu_page( \'edit-comments.php\' );

    // Move Comments under Complaints (\'complaint\').
    add_submenu_page(
        \'edit.php?post_type=complaint\', //$parent_slug
        __( \'Replies\', \'wpse354847\' ), //$page_title
        __( \'Replies\', \'wpse354847\' ), //$menu_title
        \'edit_posts\', //$capability
        \'edit-comments.php\' //$menu_slug
    );
}

add_action( \'admin_menu\', \'wpse354847_relocate_comments_in_admin_menu\' );
但问题是:当我在“评论”页面时,父菜单没有被选中。我发现,两个HTML类负责触发CSS:.wp-has-current-submenu.wp-menu-open.

所需输出

Desired output with Main menu active

电流输出

Current output with no trace of current page in admin menu

经过一些搜索,我找到了一些Javascript方法来解决这个问题,比如:

但我不相信他们,因为当我将注释菜单页面重新定位为未加载本机活动菜单类的子菜单时,我可能错了。

因此,我在这里问:我走对了吗?Javascript是解决这个问题的唯一最后手段吗?

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

通过添加post_typeadd_submenu_page 菜单slug它将激活CPT页面菜单。然后,您必须使用以下命令将父页面作为该CPT添加到该commnet页面submenu_file 滤器

# Move comment to CPT

function wpse354847_relocate_comments_in_admin_menu()
{
    // Remove existing parent menu.
    remove_menu_page( \'edit-comments.php\' );

    // Move Comments under Complaints (\'complaint\').
    add_submenu_page(
        \'edit.php?post_type=complaint\', //$parent_slug
        __( \'Replies\', \'wpse354847\' ), //$page_title
        __( \'Replies\', \'wpse354847\' ), //$menu_title
        \'edit_posts\', //$capability
        \'edit-comments.php?post_type=complaint\' //$menu_slug
    );
}
add_action( \'admin_menu\', \'wpse354847_relocate_comments_in_admin_menu\' );

# add active page for parent page

add_filter(\'submenu_file\', \'menuBold\');
function menuBold($submenu_file)
{
    global $pagenow;
    if (( $pagenow == \'edit-comments.php\' ) && ($_GET[\'post_type\'] == \'complaint\')) {   // The address of the link to be highlighted
        return \'edit-comments.php?post_type=complaint\';
    }
    // Don\'t change anything
    return $submenu_file;
}

SO网友:Kaperto

第一步是设置edit-comments.php?post_type=complaint 对于菜单段塞。

然后你加上这个钩子

add_filter("submenu_file", function ($submenu_file, $parent_file) {

    $screen = get_current_screen();

    if ("edit-comments" === $screen->id) {
        $submenu_file = "edit-comments.php?post_type=$screen->post_type";
    }

    return $submenu_file;

}, 10, 2);

相关推荐