Je prévois d'utiliser quelques types de publication personnalisés pour un plugin. L'ensemble du plugin doit résider sous 1 élément de menu de niveau supérieur. Ainsi, je préférerais une structure de menu comme celle-ci:
Mon plugin
Ceci est possible en incluant 'show_in_menu' => 'my_plugin_toplevel_menu_item_slug'
dans register_post_type
lors de l'enregistrement de mes types de publication personnalisés. Howerer, il y a quelques problèmes que j'ai rencontrés en utilisant cette méthode.
<h2 class="nav-tab-wrapper"> ... </h2>
, mais maintenant, post.php affiche la sortie h2 pour moi, et je ne connais pas de moyen facile de le remplacer. Il est possible de le faire avec javascript dès que la page est chargée, mais c'est un peu moche à mon avis.'show_in_menu'
, l'ordre des pages du sous-menu ne peut pas être modifié. Les types de publication personnalisés sont placés automatiquement en haut de la liste, car je suppose que Wordpress y parvient plus rapidement que moi.Quelqu'un a-t-il une idée de la manière d'aborder ces problèmes avec élégance?
Mettre à jour
Voir la solution temporaire dans ma réponse ci-dessous.
La solution (temporaire?) Pour laquelle j'ai choisi, est la suivante:
show_in_menu
de register_post_type
...
// Sort the children of a given toplevel menu item
// Keep original order intact as much as possible, while
// enforcing the [before => after] rules given by $force_order
function help_sort_submenu_items($toplevel_slug, $force_order) {
global $submenu;
$done = array();
$hold = array();
$newmenu = array();
foreach ($submenu[$toplevel_slug] as $i => $item) {
$force_after = array_search($item[2], $force_order);
if ($force_after !== false && empty($done[$force_after])) {
$hold[$item[2]] = $item;
} else {
$newmenu []= $item;
$done[$item[2]] = true;
$just_added_id = $item[2];
while ($just_added_id = $force_order[$just_added_id]) {
$next = $hold[$just_added_id];
$newmenu []= $next;
$done[$just_added_id] = true;
}
}
}
$submenu[$toplevel_slug] = $newmenu;
}
Utilisation comme si:
help_sort_submenu_items('my_plugin_toplevel_menu_item_slug', array(
'submenu_page_with_this_slug_comes_before' => 'submenu_page_with_this_slug',
'another' => 'rule'
));