将类别子菜单移动到媒体,但仍打开帖子菜单

时间:2012-02-28 作者:lowe_22

我正在用WordPress开发一个以媒体为中心的网站,并在上传的媒体上使用默认类别和标签,部分使用此插件Media Categories.

我正在“媒体”下为每个“类别”和“标签”显示一个子菜单项,成功使用:

add_media_page( \'Tags\', \'Tags\', \'edit_posts\' , \'edit-tags.php?taxonomy=post_tag\');
它是正确链接的,但似乎在WordPress的某个地方,该页面被指定为默认帖子类型的子页面,因为当我单击它时,它会打开“帖子”菜单并显示标签页面,而不是保持“媒体”菜单打开并从那里显示。是否有任何方法保持父页打开(即媒体)?

这不是一个必要的修复,但让媒体菜单保持打开状态,而不是切换到帖子菜单,这对UI和连续性都有好处。

如果这让人困惑,我可以提供截图。

谢谢

EDIT

我刚刚在编辑标签中发现了一个厚颜无耻的小定义。php:$parent_file = \'edit.php\';

似乎与WP Admin菜单中的子菜单项相对应的每个文件都设置了此$parent\\u文件。现在很明显,我可以简单地将其更改为“上传”。php’引用媒体父级,但我想知道是否有一种非黑客方式可以从函数中修改此值。php在我的主题文件中?

4 个回复
SO网友:RestlessWeb

为了补充@brasofilo三年前的回答,这是当前菜单系统(WP v4.5.1)所必需的。

add_action( \'admin_head-edit-tags.php\', \'modify_menu_highlight_wpse_43839\' );

function modify_menu_highlight_wpse_43839()
{
    if( \'post_tag\' == $_GET[\'taxonomy\'] )
    {       
        ?>
        <script type="text/javascript">
            jQuery(document).ready( function($) 
            {
                $("#menu-posts, #menu-posts a")
                    .removeClass(\'wp-has-current-submenu\')
                    .removeClass(\'wp-menu-open\')
                    .addClass(\'wp-not-current-submenu\'); 
                $("#menu-media, #menu-media > a")
                    .addClass(\'wp-has-current-submenu\');
            });     
        </script>
        <?php
    }
}
希望这有帮助!

SO网友:Ibrahim

您试图打开的sub\\u menu\\u页面当前链接到Tags sub\\u menu\\u页面。希望有人能找到一种方法让它发挥作用。我不确定它是否能够显示具有相同目标的两个菜单页,例如在本例中。通常,您可能需要删除一个或重命名一个。

add_action(\'admin_menu\', \'m_video_disp\');

function m_video_disp() {
    global $submenu;
    $submenu[\'edit.php\'][16][0] = \'Videos\';
    // add_media_page(\'Welcome to Videos\', \'Videos\', \'manage_options\', \'edit-tags.php?taxonomy=post_tag\', \'\');
    add_submenu_page(\'upload.php\', \'Welcome to Videos\', \'Videos\', \'manage_options\', \'edit-tags.php?taxonomy=post_tag\', \'\');
}
在本例中,add\\u submenu\\u page(\'upload.php\',$other\\u args)和add\\u media\\u page($args)执行相同的操作。我知道这个答案是不够的,我希望有人可以改进它更多。

SO网友:brasofilo

这必须通过jQuery来解决。下面就可以了,但还有一些次要的CSS效果需要处理。

menu tags moved to media

add_action( \'admin_head-edit-tags.php\', \'modify_menu_highlight_wpse_43839\' );

function modify_menu_highlight_wpse_43839()
{
    if( \'post_tag\' == $_GET[\'taxonomy\'] )
    {       
        ?>
        <script type="text/javascript">
            jQuery(document).ready( function($) 
            {
                $("#menu-posts").removeClass(\'wp-has-current-submenu\'); 
                $("#menu-media").addClass(\'wp-has-current-submenu\');
            });     
        </script>
        <?php
    }
}

SO网友:wrwrwr

有一个parent_file 滤器像这样的方法应该会奏效:

add_filter(\'parent_file\', function($parent_file) {
    if (get_current_screen()->id === \'edit-post_tag\') {
        return \'upload.php\';
    }
    return $parent_file;
});

结束