Укажите пункты подменю Admin?

Я добавляю элементы в меню администратора CPT, используя add_submenu_page который отлично работает, но они добавляются в нижнюю часть подменю после опций CPT. Я хочу иметь их сверху, но я полагаю, что этот вопрос может также применяться для заказа всех пунктов подменю, основанных на Admin.

То, что я пробовал (не работает, я пробовал несколько вариантов),

 function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( 'edit.php?post_type=page' =>array( 'edit.php?post_type=note', 'edit_pages', 'notes', ) ); } add_filter('custom_menu_order', 'custom_menu_order'); add_filter('menu_order', 'custom_menu_order'); 

Было ли это потому, menu_order фильтр menu_order не учитывает подменю?

Solutions Collecting From Web of "Укажите пункты подменю Admin?"

Фильтр «custom_menu_order» не будет работать в порядке меню, потому что apply_filters в wp-admin / includes / menu.php поставляет false как отфильтрованное содержимое. Вы можете попробовать изменить false на $ menu, и фильтр работает великолепно.

Поскольку мы, очевидно, не можем коснуться ядра, вот как я получил его для работы:

 function custom_menu_order(){ global $submenu; $find_page = 'edit.php'; $find_sub = 'Post Tags'; foreach($submenu as $page => $items): if($page == $find_page): foreach($items as $id => $meta): if($meta[0] == $find_sub): $submenu[$find_page][0] = $meta; unset ($submenu[$find_page][$id]); ksort($submenu[$find_page]); endif; endforeach; endif; endforeach; } add_action('_admin_menu', 'custom_menu_order'); 

Я знаю, что я некроповый, но у меня недавно была такая же проблема. Обратите внимание, что я использовал решение Rao для SO, чтобы получить ответ.

Предполагая, что ваш CPT называется «заметками».

 /** * @see https://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order */ add_filter( 'custom_menu_order', 'change_note_submenu_order' ); /** * Change the submenu order for the Note CPT in the Admin panel * * @param [type] $menu_ord I don't think this is actually used for anything... * @return [type] $menu_ord * @see https://stackoverflow.com/questions/18766477/wordpress-change-admin-submenu-order */ function change_note_submenu_order( $menu_ord ) { global $submenu; /* Uncomment the line below to see all menu orders */ // echo '<pre>'.print_r($submenu,true).'</pre>'; /** * NOTE: Original note submenu order should be: * 5 (note list), * 10 (Add new), * 15 (Categories), * 16 (Tags), * 17 (Your Custom Page added via add_submenu_page) */ $arr = array(); $arr[] = $submenu['edit.php?post_type=note'][17]; // Custom menu page (Omit if unused) $arr[] = $submenu['edit.php?post_type=note'][5]; // Note List $arr[] = $submenu['edit.php?post_type=note'][10]; // Add New Note $arr[] = $submenu['edit.php?post_type=note'][15]; // Categories $arr[] = $submenu['edit.php?post_type=note'][16]; // Tags $submenu['edit.php?post_type=note'] = $arr; return $menu_ord; } 

Определенно комментируйте echo '<pre>'.print_r($submenu,true).'</pre>'; если у вас возникли проблемы. Также помните, что вы также можете вручную установить массив в функции change_note_submenu_order .

 $notes_list = array("Notes", "edit_posts", "edit.php?post_type=notes"); $custom_page = array("Custom Menu Page Title", "Capability", "Menu Slug", "Page Title"); $new_note = array("Add New", "edit_posts", "post-new.php?post_type=note"); $arr = array($custom_page, $notes_list, $new_note); $submenu['edit.php?post_type=note'] = $arr; 

Надеюсь, это поможет кому-то!