突出显示作为现有核心项父项的管理菜单项

时间:2020-08-22 作者:Yehuda

我有两种情况需要添加基于当前项目的新管理菜单。例如,我需要编辑一个菜单页面,该页面将显示具有特定元键的页面,因此我添加了一个新的菜单页面,如下所示:

add_menu_page( \'Landing Pages\', \'Landing Pages\', \'manage_options\', \'edit.php?post_type=page&libray_type=landing_page\' );
问题是当我按下新菜单项时,页面菜单正在打开。

enter image description here

我尝试使用此过滤器,但没有成功。

add_filter( \'parent_file\', [ $this, \'admin_parent_file\' ], 11 );
add_filter( \'submenu_file\', [ $this, \'admin_submenu_file\' ], 11, 2 );

function admin_parent_file( $parent_file ){
    if( $this->is_landing_page_query() ) {
        $parent_file = self::MENU_SLUG; // edit.php?post_type=page&libray_type=landing_page
    }

    return $parent_file;
}
我不知道我是否做错了什么,但看起来过滤器又被覆盖了。

所有的东西都在一节课上,所以不要担心。

1 个回复
SO网友:Sally CJ

我记得今年三月我回答了一个问题,所以你可能想看看here, 但要突出您的;“登录页”;菜单项,您可以这样做:

Note: 如何在类中实现代码将取决于您,但如果您对代码有任何疑问,请告诉我。

添加自定义菜单项:

function add_landing_pages_admin_menu() {
    $slug = \'edit.php?post_type=page&libray_type=landing_page\';

    add_menu_page( \'Landing Pages\', \'Landing Pages\', \'manage_options\', $slug );
}
add_action( \'admin_menu\', \'add_landing_pages_admin_menu\' );
$parent_file 此处的值(请参阅步骤#3了解该部分)。

function fix_admin_parent_file_override( $menu ) {
    global $pagenow, $submenu, $parent_file;

    // If we\'re not on the edit.php page, do nothing.
    if ( ! is_admin() || \'edit.php\' !== $pagenow ||
        \'edit.php?post_type=page\' !== $parent_file
    ) {
        return $menu;
    }

    // Same as in the above add_landing_pages_admin_menu().
    $slug = \'edit.php?post_type=page&libray_type=landing_page\';

    // Make sure the $parent_file is not overriden (by WordPress) to the \'Pages\' menu.
    if ( isset( $_GET[\'libray_type\'] ) && \'landing_page\' === $_GET[\'libray_type\'] ) {
        // Add an empty libray_type query to the \'Pages\' URL.
        $menu[20][2] .= \'&libray_type=\';
        $submenu[ $menu[20][2] ] = $submenu[\'edit.php?post_type=page\'];

        // Then set the \'All Pages\' URL to the same as the \'Pages\' URL.
        $submenu[ $menu[20][2] ][5][2] = $menu[20][2];

        unset( $submenu[\'edit.php?post_type=page\'] );
    }

    return $menu;
}
add_filter( \'add_menu_classes\', \'fix_admin_parent_file_override\' );
$parent_file 然后突出显示通过上述步骤#1添加的自定义菜单项。

function highlight_landing_pages_admin_menu( $parent_file ) {
    if ( isset( $_GET[\'libray_type\'] ) && \'landing_page\' === $_GET[\'libray_type\'] &&
        \'edit.php?post_type=page\' === $parent_file
    ) {
        // Return the $slug value as in the above add_landing_pages_admin_menu()
        return \'edit.php?post_type=page&libray_type=landing_page\';
    }

    return $parent_file;
}
add_filter( \'parent_file\', \'highlight_landing_pages_admin_menu\' );
libray_type 似乎是个拼写错误。。你是说library_type?