Colocación de un menú de tipo de publicación personalizado sobre el menú de publicaciones ¿Usando menu_position?

Respuestas:

14

Posiciones para los elementos del menú principal

  • 2 tablero de instrumentos
  • 4 separador
  • 5 publicaciones
  • 10 medios
  • 15 enlaces
  • 20 páginas
  • 25 comentarios
  • 59 separador
  • 60 apariencia
  • 65 complementos
  • 70 usuarios
  • 75 herramientas
  • 80 ajustes
  • 99 separador

Descripción del parámetro para "posición del menú"

$position( entero ) ( opcional ) La posición en el orden de menú de este menú debería aparecer. De manera predeterminada, si se omite este parámetro, el menú aparecerá en la parte inferior de la estructura del menú. Cuanto mayor sea el número, menor será su posición en el menú.

ADVERTENCIA: si dos elementos del menú usan el mismo atributo de posición, uno de los elementos puede sobrescribirse para que solo se muestre un elemento. El riesgo de conflicto se puede reducir mediante el uso de valores decimales en lugar de enteros, por ejemplo, 63.3 en lugar de 63.

Predeterminado: parte inferior de la estructura del menú

Michael Ecklund
fuente
4

El nuevo complemento de JetPack coloca su enlace de menú inmediatamente debajo del enlace del Tablero. Lo hace estableciendo su orden de menú en 0, filtrando la matriz $ menu_order :

function jetpack_menu_order( $menu_order ) {
        $jp_menu_order = array();

        foreach ( $menu_order as $index => $item ) {
            if ( $item != 'jetpack' )
                $jp_menu_order[] = $item;

            if ( $index == 0 )
                $jp_menu_order[] = 'jetpack';
        }

        return $jp_menu_order;
    }

Por curiosidad, ¿qué pasaría si intentaras 0 como menu_position?

Chip Bennett
fuente
2

He usado 'menu_postion' => 0, 1,2,3,4.

Realmente no importa. Si juegas con él, puedes resolverlo fácilmente.

El uso de 'menu_position' => 1 debería ubicarlo debajo del elemento del menú del Tablero sobre el separador. 0 Debe colocarlo sobre el Tablero

jaredwilli
fuente
2

Buscando una solución en la web pero no la encontré. Simplemente hace este truco (por ejemplo). Aquí tienes la lista nativa de puestos:

  • 2 tablero de instrumentos
  • 4 separador
  • 5 publicaciones
  • 10 medios
  • 15 enlaces
  • 20 páginas
  • 25 comentarios
  • 59 separador
  • 60 apariencia
  • 65 complementos
  • 70 usuarios
  • 75 herramientas
  • 80 ajustes
  • 99 separador

Si tiene más elementos, puede leer la posición actual de cada elemento imprimiendo el menú global $:

global $menu; 
print_r($menu); 

Entonces, si lo entiendo bien, nada puede impedirnos reordenar el menú como queremos:

function re_order_menu () {
    // ------- Put away items 
    $dashboard = $menu[2]
    $separator1 = $menu[4]
    $posts = $menu[5]
    $media = $menu[10]
    $links = $menu[15]
    $pages = $menu[20]
    $comments = $menu[25]
    $separator2 = $menu[59]
    $appearance = $menu[60]
    $plugins = $menu[65]
    $users = $menu[70]
    $tools = $menu[75]
    $settings = $menu[80]
    $separator3 = $menu[99]

    // -------- Reset menu  
    unset($menu[2]);
    unset($menu[4]);
    unset($menu[5]);
    unset($menu[10]);
    unset($menu[15]);
    unset($menu[20]);
    unset($menu[25]);
    unset($menu[59]);
    unset($menu[60]);
    unset($menu[65]);
    unset($menu[70]);
    unset($menu[75]);
    unset($menu[80]);
    unset($menu[99]);

    // -------- Re-order menu as you want
    $dashboard = $menu[2];
    $separator1 = $menu[4]
    $posts = $menu[5];
    $books = $menu[6];
    /* my tons of custom items */
    $authors  = $menu[7];
    $requests = $menu[8];
    $clients = $menu[9];
    $sellers  = $menu[10];
    $services = $menu[11];
    $schedules = $menu[12];
    /* let some space after */ 
    $media = $menu[30];
    $links = $menu[31];
    $pages = $menu[32];
    $comments = $menu[33];
    $separator2 = $menu[59];
    $appearance = $menu[60];
    $plugins = $menu[65];
    $users = $menu[70];
    $tools = $menu[75];
    $settings = $menu[80]
    $separator3 = $menu[99];

} 
add_action('admin_menu', 're_order_menu');

A mí me funciona bien, así que creo que esto es legítimo, ¿me equivoco?

Nolan Crochot
fuente
Solución muy frágil que se basa en números mágicos . Se rompería tan pronto como se agregue / elimine algún otro complemento que coloque un elemento entre los demás.
Walf
1

Puedes usar esto:

function my_move_post () {
    global $menu;
    $menu[6] = $menu[5]; //move post from post 5 to 6
    unset($menu[5]); //free the position 5 so you can use it!
}
add_action('admin_menu', 'my_move_post');

Ahora puede usar la posición 5 para agregar su menú sobre el menú Publicar.

eduardogoncalves
fuente
Esto no funcionó para mí. Lo coloqué dentro de mi plugin de todo el sitio donde está mi archivo custom-post-type.php
Daniel
1

Aquí está la advertencia de todo el asunto ...

WordPress 4.9.2

wp-admin / menu.php:

// If we're to use $_wp_last_object_menu, increment it first.
$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; 

AVISO: debe ser un número entero y NO estar configurado ya, de lo contrario, irá al final de la lista.

Artistan
fuente
1

Para una solución que funcione en WordPress 5 y versiones posteriores, vuelva a colocarla con el siguiente código:

add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
    if (
        false !== ($k1 = array_search($v1 = 'edit.php', $menu_order))
        && false !== ($k2 = array_search($v2 = 'edit.php?post_type=foo', $menu_order))
    ) {
        array_splice($menu_order, $k1, 0, $v2);
        array_splice($menu_order, $k2 + 1, 1);
    }
    return $menu_order;
});

Esto supone que no tiene más de un elemento de menú compitiendo por la pole position.

Walf
fuente
0

En el mismo enlace que vinculó, se lee:

menu_position
(integer) (optional) The position in the menu order the post type should appear.
Default: null - defaults to below Comments
5 - below Posts
10 - below Media
20 - below Pages
60 - below first separator
100 - below second separator

Entonces, si configuras menu_positionalgo así 4, entonces debería ponerlo encima de las publicaciones.

Una posición de lo -1coloca encima del Dashboardenlace.

Zack
fuente
Probé 4 pero es exactamente el mismo que 5.
janoChen
Hrm. Intenté 1-3? Creo que tal vez "1" (o "0") es el Tablero. Quizás algo 2-3 funcione
Zack
0 1 2 3 Va antes del Tablero y 4 Va debajo de Mensajes. ¡Es realmente imposible!
janoChen
Guau. roto mucho WordPress? No lo se entonces. : - /
Zack
Creo que 4 es el separador justo encima de las Publicaciones, y 5 es Publicaciones, por lo que si establece la posición del menú en 3, estará justo antes del separador. Con configuración predeterminada, por supuesto. Establecer mi página de complemento en 4 sobrescribió el separador, pero apareció justo encima de las Publicaciones. hmmm ...
goldenapples
0

Puede usar valores decimales (como cadenas). Por ejemplo, tengo algunos tipos de publicaciones personalizadas que coloqué en la última posición del menú (100001, 100002, 100003).

Luego, solo coloque este código para moverlos sobre las Publicaciones y debajo de los elementos del menú del Tablero .

function reorder_admin_menu() {

  global $menu;

  // Add one separator

  $menu["3.1"] = array(
    0 =>  '',
    1 =>  'read',
    2 =>  'separator_' . "anything_unique",
    3 =>  '',
    4 =>  'wp-menu-separator'
    );

  // I have put my menu items waay at the end (exactly these values), so move them up

  $menu["3.2"] = $menu[100001];
  $menu["3.3"] = $menu[100002];
  $menu["3.4"] = $menu[100003];

  unset($menu[100001]);
  unset($menu[100002]);
  unset($menu[100003]);

  // move Media menu (position 10) item to front, in the same group
  $menu["3.5"] = $menu[10];
  unset($menu[10]);

  // Debug: ksort($menu); error_log( var_export( $menu, true ) );
}

add_action( 'admin_menu', 'reorder_admin_menu', 999 );
Vladan
fuente