Options du sous-menu de l'administrateur?

4

J'ajoute des éléments à un menu d'administration CPT en utilisant add_submenu_page , ce qui fonctionne très bien, mais ils sont ajoutés au bas du sous-menu après les options CPT. Je veux pouvoir les avoir en haut, mais je suppose que cette question peut également s'appliquer à la commande de tous les éléments de sous-menus basés sur Admin.

Ce que j'ai essayé (ne fonctionne pas, j'ai essayé plusieurs variantes),

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');

Cela serait-il dû au fait que menu_order filter ne prend pas en compte les sous-menus?

    
posée Wyck 19.09.2011 - 02:44

3 réponses

3

Le filtre 'custom_menu_order' ne fonctionnera pas dans l'ordre du menu car apply_filters dans wp-admin / includes / menu.php fournit false comme contenu filtré. Vous pouvez essayer de remplacer false par $ menu et le filtre fonctionne à merveille.

Puisque nous ne pouvons évidemment pas toucher au cœur, voici comment je l'ai obtenu:

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');
    
réponse donnée Brian Fegter 19.09.2011 - 03:37
3

Je sais que je suis en train de necro-poster mais j'ai récemment eu le même problème. Veuillez noter que j'ai utilisé la solution de SO sur pour obtenir cette réponse.

En supposant que votre CPT s'appelle "notes".

/**
 * @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;
}

Commentez définitivement le echo '<pre>'.print_r($submenu,true).'</pre>'; si vous rencontrez des difficultés. Rappelez-vous également que vous pouvez également définir manuellement le tableau dans la fonction 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;

J'espère que cela aide quelqu'un!

    
réponse donnée StephanieQ 13.07.2017 - 22:15
0

Une autre nécro pour un problème plus simple.

Je voulais simplement déplacer mon lien personnalisé vers le bas (ajout d'un commentaire sur la manière dont il pourrait également être utilisé pour traiter la question initiale):

public function change_wc_submenu_order( $menu_order ) {
    global $submenu;

    foreach ( $submenu['woocommerce'] as $index => $item ) {
        if ('My Custom Submenu Title' === $item[0] ) {
            $custom = $item;
            unset( $submenu['woocommerce'][$index] );
            break;
        }
    }

    if ( ! empty( $custom ) ) {
        // If we want it at the beginning, use array_unshift() instead
        array_push( $submenu['woocommerce'], $custom );
    }

    return $menu_order;
}
    
réponse donnée Camwyn 03.10.2018 - 22:38

Lire d'autres questions sur les étiquettes