更改管理菜单中介质的位置

时间:2013-05-14 作者:kel

是否可以在管理菜单中设置项目的位置?我正在尝试移动自定义帖子类型下的媒体链接。我知道媒体链接是位置10。是否可以将其设置为14?

我知道我可以使用custom_menu_order 过滤器,但我没有看到设置过滤器位置的方法。

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

这不是一个确切的答案,但我认为有足够的元素来构建所需的输出

我通过操纵全局$menu, 不是真正的最佳实践,但目前它是可行的。

此示例的结果是将链接管理器、注释和媒体库移动到第一个块的末尾。其效果是:首先是所有帖子类型,然后是这些项目。

我们需要一个递归数组搜索函数来定位每个项的键,[5], [10], [15], 这样我们就可以确定目标是正确的项目,而不需要检查菜单来确认每个项目的键。

第一件事是抓住第二个分隔符的位置(separator2), 因为我们将在它之前移动所有东西。然后,我们搜索要移动的每个项目,制作其副本并从$menu. 最后,我们从分隔符的位置减去“可移动”项目的数量(比如100),然后将项目添加到位置97、98、99(在本例中,我们移动了3个项目)。

add_action( \'admin_menu\', \'sort_cpts_wpse_99459\', 9999 );

function sort_cpts_wpse_99459() 
{
    global $menu;
    $mod_menu = array();

    $separator = b5f_recursive_array_search( \'separator2\', $menu );
    $links = b5f_recursive_array_search( \'link-manager.php\', $menu );
    $upload = b5f_recursive_array_search( \'upload.php\', $menu );
    $comments = b5f_recursive_array_search( \'edit-comments.php\', $menu );

    if( $links )
    {
        $mod_menu[\'links\'] = $menu[ $links ];
        unset( $menu[ $links ] );
    }

    if( $upload )
    {
        $mod_menu[\'upload\'] = $menu[ $upload ];
        unset( $menu[ $upload ] );
    }

    if( $comments )
    {
        $mod_menu[\'comments\'] = $menu[ $comments ];
        unset( $menu[ $comments ] );
    }

    $position_menu = (int)$separator - count( $mod_menu );
    foreach( $mod_menu as $m )
    {
        $menu[ $position_menu ] = $m;
        $position_menu++;
    }
}

function recursive_array_search( $needle, $haystack ) 
{
    foreach( $haystack as $key => $value ) 
    {
        $current_key = $key;
        if( 
            $needle === $value 
            OR ( 
                is_array( $value )
                && b5f_recursive_array_search( $needle, $value ) !== false 
            )
        ) 
        {
            return $current_key;
        }
    }
    return false;
}

SO网友:Christian Jung

我知道,这是一个旧的解决方案,但我认为以下解决方案实际上更好一些:

add_filter(\'custom_menu_order\', \'antwortzeit_custom_menu_order\');
add_filter(\'menu_order\', \'antwortzeit_custom_menu_order\');
function antwortzeit_custom_menu_order($menu_order) {
    if (!$menu_order) return true;

    $menu_order_string = implode(\', \', $menu_order);
    $menu_order_string = str_replace(\', upload.php\', \'\', $menu_order_string);
    $menu_order_string = str_replace(\'index.php\', \'index.php, upload.php\', $menu_order_string);

    return explode(\', \', $menu_order_string);
}
在替换之前对$menu\\u order\\u字符串执行var\\u转储,以查看位置并选择str\\u替换的位置。在这种情况下,我们将媒体库重新定位在仪表板的正后方。

希望这对将来有帮助。

结束

相关推荐

如何在Functions.php中使用PHP手动修复WordPress库代码?

Wordpress为内置的gallery功能输出了一些非常糟糕的代码,这已经被谈论了很多次了。这是负责库输出的核心代码(在/wp-includes/media.php中):function gallery_shortcode($attr) { global $post; static $instance = 0; $instance++; // Allow plugins/themes to override the de