这不是一个确切的答案,但我认为有足够的元素来构建所需的输出
我通过操纵全局$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;
}