¿Ordenar elementos del submenú de administrador?

4

Estoy agregando elementos a un menú de administración de CPT usando add_submenu_page que funciona muy bien, pero se agregan a la parte inferior del submenú después de las opciones de CPT. Quiero poder tenerlos en la parte superior, pero supongo que esta pregunta también puede aplicarse al pedido de todos los elementos del submenú basados en administración.

Lo que probé (no funcionó, probé varias variaciones),

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

¿Esto se debe a que menu_order filter no tiene en cuenta el submenú?

    
pregunta Wyck 19.09.2011 - 02:44

3 respuestas

3

El filtro 'custom_menu_order' no funcionará en el orden del menú porque apply_filters en wp-admin / includes / menu.php proporciona contenido falso como contenido filtrado. Puedes intentar cambiar el menú falso a $ y el filtro funciona de forma espectacular.

Como obviamente no podemos tocar el núcleo, así es como funcionó:

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');
    
respondido por el Brian Fegter 19.09.2011 - 03:37
3

Sé que estoy necro-posteando pero recientemente tuve el mismo problema. Tenga en cuenta que usé la solución de Rao en SO para obtener esta respuesta.

Suponiendo que tu CPT se llama "notas".

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

Sin duda comente el echo '<pre>'.print_r($submenu,true).'</pre>'; si tiene problemas. También recuerde que también puede configurar la matriz manualmente en la función 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;

Espero que esto ayude a alguien!

    
respondido por el StephanieQ 13.07.2017 - 22:15
0

Otro necro para un problema más simple.

Solo quería mover mi enlace personalizado a la parte inferior (se agregó un comentario sobre cómo podría usarse para abordar la pregunta original):

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;
}
    
respondido por el Camwyn 03.10.2018 - 22:38

Lea otras preguntas en las etiquetas