web-development-kb-asia.site

Mengubah Urutan Bagian Menu Admin?

Saya agak frustrasi di sini setelah menghabiskan beberapa jam mencoba menyelesaikan tugas yang cukup sederhana ini tanpa keberuntungan.

Pada dasarnya saya memiliki 5 jenis posting khusus yang saya buat dan yang ingin saya lakukan adalah menunjukkan masing-masing dalam urutan tertentu langsung di bawah "dashboard" .

Dari dokumentasi WordPress, sepertinya Anda tidak bisa melakukan ini karena urutan menu tertinggi sepertinya "5". Dan di atas L

Saya kira beberapa ahli membaca ini dapat menunjukkan kepada saya cara sederhana bahwa saya dapat memesan menu admin persis seperti yang saya inginkan dengan menggunakan file fungsi dan tanpa menggunakan plugin (yang saya tahu ada).

Silakan dan coba buat 5 jenis posting terpisah dan sertakan dalam urutan tertentu langsung di bawah dashboard ... sepertinya ini tidak mungkin. ?? ... adakah beberapa jenis jquery hack untuk membuat pekerjaan ini dilakukan seseorang dapat berbagi dengan saya atau lebih disukai tanpa menggunakan jQuery?

31
Binarybit

Hai @BinaryBit:

Tidak heran Anda sedikit frustrasi; menu admin adalah salah satu implementasi yang paling tumpul dan membuat frustrasi melalui inti WordPress. Jujur, saya tidak tahu apa yang mereka pikirkan ketika mereka mendesainnya seperti itu.

@EAMann melakukansangat baikpekerjaan menjelaskan bagaimana menu admin bekerja di WordPress (saya berharap saya bisa membacanya sekitar 4 bulan yang lalu ... :)

Namun, setelah saya menemukan cara kerjanya, saya masih bingung untuk bekerja dengannya tanpa mencurahkan cukup waktu untuk menjaga pikiran saya tetap lurus sementara saya mencoba melakukan hal-hal sederhana. Jadi itu sebabnya saya membangun Menu API yang menyederhanakan dan menyederhanakan bekerja dengan menu admin WordPress.

Mereka 100% kompatibel dengan struktur WordPress yang ada dan masih sangat banyak di alpha sejak saya menjadi satu-satunya yang menggunakannya. Saya yakin ada kasus penggunaan yang belum mereka tangani. Tapi saya akan memposting kode di sini untuk Anda dan orang lain untuk mencoba.

Anda dapat mengunduh file yang akan dimasukkan ke direktori tema Anda di sini: wp-admin-menu-classes.php dan yang berikut ini menunjukkan bagaimana Anda mungkin memanggil fungsi dalam file functions.php tema Anda:

<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts');              // Swap location of Posts Section with Pages Section
  rename_admin_menu_section('Media','Photos & Video');    // Rename Media Section to "Photos & Video"
  delete_admin_menu_section('Links');                     // Get rid of Links Section
  $movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags');  // Save off the Movie Tags Menu
  update_admin_menu_section('Movies',array(               // Rename two Movie Menu Items and Delete the Movie Tags Item
    array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
    array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
    array('delete-item','item'=>'Movie Tags'),
  ));
  copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
  renamed_admin_menu_item('Movies','Add New','Add Actor');  // Rename copied Actor 'Add New' to 'Add Actor
  add_admin_menu_item('Movies',array(                       // (Another way to get a 'Add Actor' Link to a section.)
    'title' => 'Alt Add Actor ',
    'slug' => 'post-new.php?post_type=actor',
  ), array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  delete_admin_menu_section('Actors');                      // Finally just get rid of the actors section
}

Terlebih lagi, fungsi-fungsi ini bahkan sedang dipertimbangkan (sebagai basis) untuk dimasukkan dalam WordPress 3.1 jadi jika kita beruntung ini bahkan mungkin menjadi standar!

33
MikeSchinkel

Berikut adalah langkah-langkah cepat tentang bagaimana menu admin WordPress dibangun - Saya tidak berbicara API add_menu_page, maksud saya menu WordPress default yang sebenarnya.

Memanggil File Menu

Menu, tentu saja, dimuat oleh wp-admin/admin.php. Tapi itu tidak dimuat melalui API standar yang biasa kita gunakan berdasarkan pada dokumentasi WordPress. Sebaliknya, seluruh menu (semua opsi yang mungkin, submenu, dll) dimuat melalui array sederhana yang didefinisikan dalam wp-admin/menu.php.

Jadi untuk memuat sistem menu, admin.php cukup requires menu.php ... sekitar baris 99 di WordPress 3.0.

Memuat Menu

Menu itu sendiri disimpan dalam array global $menu. Menurut dokumentasi in-line, array menu memiliki elemen-elemen ini:

The elements in the array are:
    *     0: Menu item name
    *     1: Minimum level or capability required.
    *     2: The URL of the item's file
    *     3: Class
    *     4: ID
    *     5: Icon for top level menu

Dasbor, misalnya, adalah:

$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );

File melewati dan memuat setiap item menu ke dalam array dan memuat semua item sub-menu mereka ke dalam array yang disebut $submenu yang diindeks berdasarkan url menu induk. Jadi item submenu Dashboard yang disebut "Dashboard" adalah:

 $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );

Setelah sistem selesai memuat semua menu (tidak ada banyak, tetapi sistem melangkah melalui indeks pada waktu 5 atau 10 ... perhatikan bahwa Dashboard, meskipun itu item menu pertama, masih diindeks sebagai item "2" (array PHP mulai dari indeks 0 ... jadi ini memberi Anda beberapa ruang manuver).

Pada titik ini, sistem memanggil wp-admin/includes/menu.php.

Melangkah melalui Menu

File ketiga ini berjalan melalui setiap item menu dan, berdasarkan hak istimewa yang ditetapkan untuk pengguna saat ini, baik menggunakan menu atau menghapusnya. Pertama, ia menggilir semua sub-menu dan menghapus halaman yang tidak dapat diakses pengguna. Kemudian ia mengulang-ulang halaman induk dan melakukan hal yang sama. Kemudian menghapus pemisah duplikat yang tersisa dari menghilangkan menu.

Akhirnya, itu mengurutkan menu berdasarkan urutan menu yang ditugaskan.

Memesan menu khusus

Hook admin_menu dipanggil setelah menu diatur tetapi sebelum apa pun dipesan. Jadi dimungkinkan untuk memesan seluruh sistem menu WordPress tanpa "meretas" API.

Setelah tindakan admin_menu dipecat, halaman khusus Anda dimuat ke dalam sistem. Hal berikutnya yang terjadi, adalah WordPress memeriksa filter bernama custom_menu_order ... filter ini selalu dikembalikan false dan memberi tahu WordPress apakah Anda ingin menggunakan pesanan khusus atau tidak.

Tambahkan yang berikut ini ke tema Anda untuk mengatur flag menjadi true dan tentukan urutan menu eksplisit Anda:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php', 'edit-comments.php');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

Tentukan urutan yang Anda inginkan untuk semua menu (saya memberikan referensi ke file pemuatan menu sehingga Anda bisa mendapatkan daftar nama file) dan ini harus ditangani.


EDIT (9/2/2010):

Untuk menentukan urutan layar edit jenis kiriman khusus menggunakan metode ini, Anda perlu mengetahui URL layar edit. Saya kebanyakan kasus, itu akan menjadi http://blog.url/wp-admin/edit.php?post_type=POST_TYPE. Ini tergantung pada bagaimana WordPress diatur di situs Anda (jika itu dipasang di root atau dalam subfolder) dan siput dari jenis posting khusus yang Anda gunakan.

Sebagai contoh...

Katakanlah Anda memiliki jenis posting khusus untuk 'Pertanyaan Stack Exchange' dan Anda ingin editor muncul di bagian yang sama dengan dasbor langsung di bawah ikon dasbor. Anda akan menggunakan kode berikut dalam file functions.php tema Anda:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

Sisa menu tidak akan terpengaruh, tetapi halaman edit khusus Anda akan dipindahkan ke bagian yang sama dengan dasbor dan akan muncul tepat di bawahnya. Anda dapat menggunakan ini untuk memindahkan jenis posting kustom Anda ke bagian admin menu dan menempatkannya dalam urutan apa pun. Anda juga dapat memindahkan item menu standar dengan cara yang sama.

Pastikan Anda menentukan urutan semua item menu di bagian yang diberikan , jika tidak, menu Anda mungkin akan mengalami keanehan yang tidak terduga.

21
EAMann

Saya menyadari ini adalah utas lama, tetapi saya pikir ini layak diperbarui dengan solusi yang JAUH lebih mudah. Harap dicatat bahwa ini berfungsi dengan 3.5 dan belum diuji dengan versi lain. Kode berikut dapat ditempatkan di plugin atau file functions.php.

Lihat: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Dimodifikasi sedikit agar sesuai dengan kebutuhan poster asli (walaupun, saya harap dia menemukan solusi sekarang ...).

  // Rearrange the admin menu
  function custom_menu_order($menu_ord) {
    if (!$menu_ord) return true;
    return array(
      'index.php', // Dashboard
      'edit.php?post_type=custom_type_one', // Custom type one
      'edit.php?post_type=custom_type_two', // Custom type two
      'edit.php?post_type=custom_type_three', // Custom type three
      'edit.php?post_type=custom_type_four', // Custom type four
      'edit.php?post_type=custom_type_five', // Custom type five
      'separator1', // First separator
      'edit.php?post_type=page', // Pages
      'edit.php', // Posts
      'upload.php', // Media
      'link-manager.php', // Links
      'edit-comments.php', // Comments
      'separator2', // Second separator
      'themes.php', // Appearance
      'plugins.php', // Plugins
      'users.php', // Users
      'tools.php', // Tools
      'options-general.php', // Settings
      'separator-last', // Last separator
    );
  }

  add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
  add_filter('menu_order', 'custom_menu_order');

Semua item dalam menu admin yang tidak terdaftar di sini tidak akan dihapus. Mereka akan ditambahkan ke bagian bawah menu.

18
Matt

Untuk memindahkan item menu, saya suka menggunakan variabel Global $menu.

Misalnya, jika saya ingin memindahkan menu "Halaman" ke bagian bawah menu, saya akan menggunakan ini di functions.php atau plugin:

function admin_menu_items() {
    global $menu;
    $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages)
    $menu[20]=array();//make original pages menu disappear

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

dan jika saya ingin menukar menu Posting dan Tautan:

function admin_menu_items() {
    global $menu;
    $storemenu = $menu[15];//save links menu into $storemenu
    $menu[15] = $menu[5];//make links menu = posts menu
    $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links   
}
add_action('admin_menu', 'admin_menu_items');

Sudah menggunakan trik ini sebentar, baru saja diuji dengan WP 3.4.1

2
forlogos

Saya mengerti Anda tidak ingin menggunakan plugin, tetapi untuk kesederhanaan murni, coba plugin Admin Menu Editor oleh Janis Elsts. Atur ulang menu admin Anda sesuka Anda; juga dapat menyembunyikan item menu.

2
Ray Gulick

Luar biasa. Terima kasih banyak. Saya hanya memasukkan beberapa baris kode ke functions.php saya

require_once('/extras/wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section
}

Ditambah menempatkan wp-admin-menu-classes.php di folder tema saya dan sekarang tombol 'posting' di-swosed dengan tombol 'halaman'.

Saya harap ini akan menjadi bagian dari inti segera dan dengan cara sehingga kita tidak perlu menulis seluruh menu dalam suatu fungsi untuk hanya memesan ulang dua tombol.

Sebenarnya agak sulit untuk mendapatkan pesanan yang lebih spesifik untuk 4 tombol. Untuk mengubah 4 tombol menjadi: Halaman, Posting, Media, Tautan Saya perlu menggunakan kode berikut:

  swap_admin_menu_sections('Pages','Posts');                
  swap_admin_menu_sections('Media','Links');                 
  swap_admin_menu_sections('Posts','Links');
0
Sebastian