it-swarm.asia

Yönetici Menüsü Bölümlerinin Sırasını Değiştirme

Bu oldukça basit görevi başarmak için birkaç saatimi hiç uğraşmadan geçirdikten sonra biraz sinirleniyorum.

Temelde oluşturduğum 5 özel yazı tipim var ve tek yapmak istediğim her birini doğrudan "gösterge tablosu" altında belirli bir sıra ile göstermek.

WordPress belgelerine göre bu gerçekten yapamıyor gibi görünüyor, çünkü en yüksek menü sırası "5" gibi görünüyor. Ve L üstü

Bazı uzmanların bunu okuduğunu tahmin ediyorum, bana yönetici menüsünü fonksiyonlar dosyasını kullanarak ve (bir eklenti var) bir eklenti kullanmadan tam istediğim şekilde sipariş etmenin basit bir yolunu gösterebileceğini tahmin ediyorum.

Lütfen devam edin ve 5 ayrı yazı tipi oluşturmaya çalışın ve bunları doğrudan kontrol panelinin altına belirli bir sıraya dahil edin ... bu mümkün değil gibi görünüyor.… ... bu işi yapmak için kesmek isteyen bir tür jquery hack var. Benimle veya tercihen jQuery kullanmadan paylaşabilir miyim?

31
Binarybit

İşte WordPress yönetici menüsünün nasıl oluşturulduğuna dair hızlı bir adım. - add_menu_page API'den bahsetmiyorum, gerçek varsayılan WordPress menüsünü kastediyorum.

Menü Dosyasını Arama

Menü açıkçası, wp-admin/admin.php tarafından yüklenmiştir. Ancak, WordPress belgelerine dayanarak kullandığımız standart API üzerinden yüklenmedi. Aksine, tüm menü (tüm olası seçenekler, alt menüler, vb.) wp-admin/menu.php ile tanımlanmış basit bir dizi ile yüklenir.

Böylece menü sistemini yüklemek için, admin.php sadece requirename__s menu.php ... sadece WordPress 3.0'da 99. satır civarında.

Menüyü Yükleme

Menünün kendisi global $menu dizisinde saklanır. Satır içi belgelere göre, menü dizisinde şu öğeler bulunur:

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

Pano, örneğin:

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

Dosya, her bir menü öğesini diziye yükler ve alt menü öğelerinin tümünü ana menünün URL'sine göre indeksleyen $submenu adlı bir diziye yükler. Bu yüzden, Dashboard'un "Dashboard" adlı alt menü maddesi şöyledir:

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

Sistem tüm menüleri yüklemeyi tamamladıktan sonra (o kadar fazla değil, ancak sistem dizini 5 veya 10 oranında değiştirir ... fark edersiniz ki, ilk menü maddesi olmasına rağmen Dizin item "2" (PHP dizileri 0 dizininde başlar ... bu yüzden size biraz manevra odası sağlar).

Bu noktada, sistem wp-admin/includes/menu.php öğesini çağırır.

Menüde Adım Atmak

Bu üçüncü dosya her bir menü maddesinde dolaşır ve mevcut kullanıcıya atanan ayrıcalıklara göre menüyü kullanır veya kaldırır. İlk önce tüm alt menüler arasında dolaşır ve kullanıcının erişemediği sayfaları kaldırır. Sonra üst sayfalarda dolaşır ve aynı şeyi yapar. Ardından, menüleri kaldırmaktan kalan yinelenen ayırıcıları kaldırır.

Son olarak, menüleri atanmış menü sırasına göre sıralar.

Özel menü siparişi verme

Hook admin_menu, menüler ayarlandıktan sonra çağrılır ancak before herhangi bir şey sipariş edilir. Böylece, tüm WordPress menü sistemini API'yi "hacklemeden" sipariş etmek mümkün.

admin_menu eylemi başlatıldıktan sonra, özel sayfalarınız sisteme yüklenir. Bir sonraki şey, WordPress, custom_menu_order ... adlı bir filtreyi denetler ... bu filtre her zaman falsedöndürülür ve WordPress'e özel bir sipariş kullanmak isteyip istemediğinizi söyler.

Bayrağı, yerine trueolarak ayarlamak ve açık menü sıranızı tanımlamak için temanıza şunları ekleyin:

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

Tüm menüler için istediğiniz sırayı belirtin (menü yükleme dosyasına referanslar sağladım, böylece bir dosya adı listesi edinebilirsiniz) ve bu onunla ilgilenmelidir.


EDIT (21.02.2010):

Bu yöntemi kullanarak özel bir yazı türünün düzenleme ekranının sırasını belirlemek için, düzenleme ekranının URL adresini bilmeniz gerekir. Ben çoğu durumda, http://blog.url/wp-admin/edit.php?post_type=POST_TYPE olacaktır. Bu, WordPress’in sitenize nasıl kurulduğuna (köke mi yoksa bir alt klasöre kurulmuşsa) ve kullandığınız özel yazı tipinin temeline bağlıdır.

Örneğin...

'Yığın Değişim Soruları için özel bir gönderi türünüz olduğunu ve editörün, gösterge panosu simgesinin hemen altındaki gösterge panosu ile aynı bölümde görünmesini istediğinizi varsayalım. Aşağıdaki kodu temanın functions.php dosyasında kullanırsın:

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

Menünün geri kalanı etkilenmeyecek, ancak özel düzenleme sayfanız gösterge tablosu ile aynı bölüme taşınacak ve hemen altında görünecektir. Bunu, özel yazı türlerinizi yönetici menüsünün herhangi bir bölümüne taşımak ve bunları herhangi bir sıraya koymak için kullanabilirsiniz. Standart menü öğelerini de aynı şekilde hareket ettirebilirsiniz.

Sadece belirtilen bölümdeki tüm menü öğelerinin sırasını belirlediğinizden emin olun , aksi halde menünüz beklenmedik bir tuhaflığa maruz kalabilir.

21
EAMann

Bunun eski bir konu olduğunun farkındayım, ancak çok daha kolay bir çözümle güncellenmeye değer olduğunu düşünüyorum. Bunun 3.5 ile çalıştığını ve başka bir sürümle test edilmediğini lütfen unutmayın. Aşağıdaki kod bir eklentiye ya da functions.php dosyasına yerleştirilebilir.

Bakınız: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Orijinal posterin ihtiyaçlarına uyacak şekilde hafifçe değiştirildi (ancak, umarım şimdiye dek bir çözüm bulmuştur ...).

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

Burada listelenmeyen yönetici menüsünde bulunan öğeler kaldırılmaz. Menünün altına eklenecektir.

18
Matt

Menü öğelerini hareket ettirmek için Global $menu değişkenini kullanmayı seviyorum.

Örneğin, "Sayfalar" menüsünü menülerin altına taşımak istersem, bunu functions.php veya bir eklentide kullanırdım:

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

ve eğer Mesajlar ve Bağlantılar menülerini değiştirmek istersem:

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

Bu numarayı bir süredir kullanıyordum, sadece WP 3.4.1 ile test edildi.

2
forlogos

Bir eklenti kullanmak istemediğinizi anlıyorum, ancak tamamen basit olması için Janis Elsts'in Admin Menu Editor eklentisini deneyin. Yönetici menülerinizi istediğiniz şekilde yeniden düzenleyin; Menü öğelerini de gizleyebilirsiniz.

2
Ray Gulick

Muhteşem. Çok teşekkür ederim. Sadece kodlarımı fonksiyon dosyama koydum.

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
}

Artı wp-admin-menu-classes.php 'yi tema klasörüme yerleştirdikten sonra' gönderiler 'düğmesi' sayfalar 'düğmesiyle değiştiriliyor.

Umarım bu kısa sürede ve bir şekilde çekirdeğin bir parçası olur, bu nedenle iki düğmeyi yeniden düzenlemek için tüm menüyü bir işlev içinde yazmamıza gerek kalmaz.

Aslında 4 düğme için daha belirli bir sipariş almak biraz zordu. 4 düğmeyi değiştirmek için: Sayfalar, Yayınla, Medya, Bağlantılar Aşağıdaki kodu kullanmam gerekiyordu:

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