Menempatkan Menu Jenis Kiriman Ubahsuaian Di atas Menu Kiriman Menggunakan menu_position?

17

Saya baru tahu parameter menu_position sepertinya Anda dapat menempatkan menu jenis posting kustom Anda hampir di mana-mana. Kecuali di atas menu Posting!

Bagaimana saya bisa mencapai itu?

janoChen
sumber
Pertanyaan bagus, sepertinya itu adalah satu-satunya tempat yang tidak akan dikunjungi.
jnthnclrk

Jawaban:

14

Posisi untuk Item Menu Inti

  • 2 Dashboard
  • 4 Pemisah
  • 5 Posting
  • 10 Media
  • 15 Tautan
  • 20 halaman
  • 25 Komentar
  • 59 Pemisah
  • 60 Penampilan
  • 65 Plugin
  • 70 Pengguna
  • 75 Alat
  • 80 Pengaturan
  • 99 Pemisah

Deskripsi parameter untuk "posisi menu"

$position( integer ) ( opsional ) Posisi dalam urutan menu menu ini akan muncul. Secara default, jika parameter ini dihilangkan, menu akan muncul di bagian bawah struktur menu. Semakin tinggi angkanya, semakin rendah posisinya di menu.

PERINGATAN: jika dua item menu menggunakan atribut posisi yang sama, salah satu item dapat ditimpa sehingga hanya satu item yang ditampilkan! Risiko konflik dapat dikurangi dengan menggunakan desimal alih-alih nilai integer, misalnya 63,3 bukannya 63.

Default: bagian bawah struktur menu

Michael Ecklund
sumber
4

Plugin JetPack baru menempatkan tautan menu tepat di bawah tautan Dashboard. Ia melakukannya dengan mengatur urutan menu ke 0, dengan memfilter array $ 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;
    }

Karena penasaran, apa yang akan terjadi jika Anda mencoba 0 sebagai menu_position?

Chip Bennett
sumber
2

Saya telah menggunakan 'menu_postion' => 0, 1,2,3,4.

Tidak masalah kok. Jika Anda bermain-main dengannya Anda dapat dengan mudah mengetahuinya.

Menggunakan 'menu_position' => 1 harus meletakkannya di bawah item menu Dashboard di atas hal pemisah. 0 Sebaiknya letakkan di atas Dasbor

jaredwilli
sumber
2

Mencari solusi di web tetapi tidak ditemukan. Cukup lakukan trik ini (misalnya). Di sini Anda memiliki daftar posisi asli:

  • 2 Dashboard
  • 4 Pemisah
  • 5 Posting
  • 10 Media
  • 15 Tautan
  • 20 halaman
  • 25 Komentar
  • 59 Pemisah
  • 60 Penampilan
  • 65 Plugin
  • 70 Pengguna
  • 75 Alat
  • 80 Pengaturan
  • 99 Pemisah

Jika Anda memiliki lebih banyak item, Anda dapat membaca posisi saat ini untuk setiap item dengan mencetak menu $ global:

global $menu; 
print_r($menu); 

Jadi jika saya mengerti, tidak ada yang bisa mencegah kami memesan ulang menu seperti yang kami inginkan:

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

Ini berfungsi dengan baik untuk saya jadi, saya pikir ini sah, saya salah?

Nolan Crochot
sumber
Solusi yang sangat rapuh yang mengandalkan angka ajaib . Ini akan rusak segera setelah beberapa plugin lain ditambahkan / dihapus yang menempatkan item di antara yang lainnya.
Walf
1

Anda bisa menggunakan ini:

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

Sekarang Anda dapat menggunakan posisi 5 untuk menambahkan menu Anda di atas menu Posting.

eduardogoncalves
sumber
Ini tidak berhasil untuk saya. Saya meletakkannya di plugin sitewide saya di mana file custom-post-type.php saya
Daniel
1

di sini adalah peringatan untuk seluruh masalah ...

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; 

PEMBERITAHUAN: harus berupa bilangan bulat dan BUKAN sudah diatur, jika tidak maka akan masuk ke bagian bawah daftar.

Artistan
sumber
1

Untuk solusi yang berfungsi di WordPress 5 dan di bawah, posisikan ulang dengan kode berikut:

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

Ini mengasumsikan Anda tidak memiliki lebih dari satu item menu bersaing untuk posisi pole.

Walf
sumber
0

Pada tautan yang sama dengan yang Anda tautkan, terbaca:

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

Jadi, jika Anda mengatur menu_positionke sesuatu seperti 4, maka itu harus meletakkannya di atas posting.

Posisi -1meletakkannya di atas Dashboardtautan.

Zack
sumber
Saya mencoba 4 tetapi persis sama dengan 5.
janoChen
Hrm Sudah mencoba 1-3? Saya pikir mungkin "1" (atau "0") adalah Dasbor. Mungkin sesuatu 2-3 akan bekerja
Zack
0 1 2 3 Pergi sebelum Dasbor dan 4 Pergi di bawah Tulisan. Sangat tidak mungkin!
janoChen
Wow. rusak banyak WordPress? Saya tidak tahu. : - /
Zack
Saya pikir bahwa 4 adalah pemisah tepat di atas Tulisan, dan 5 adalah Tulisan, jadi jika Anda mengatur posisi menu Anda ke 3 itu akan tepat sebelum pemisah. Dengan konfigurasi standar tentunya. Mengatur halaman plugin saya ke 4 menimpa pemisah, tetapi memang muncul tepat di atas Posting. hmmm ...
goldenapples
0

Anda dapat menggunakan nilai desimal (sebagai string). Misalnya, saya memiliki beberapa jenis posting kustom yang saya tempatkan pada posisi terakhir di menu (100001, 100002, 100003).

Kemudian, cukup masukkan kode ini untuk memindahkannya di atas Postingan dan di bawah item menu Dashboard .

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
sumber