Yönetici Menüsüne Bir Ayırıcı Ekleme


Yanıtlar:


33

İstediğinizi elde etmenin hızlı ve kirli bir yolu.

Arka fon

WordPress, yönetici menüsü bölümlerini adı verilen global bir dizide saklar $menu. Ayırıcı eklemek için, $menuayırmak istediğiniz seçeneklerin dizinleri arasındaki bir dizini kullanarak diziye bir öğe eklersiniz .

add_admin_menu_separator()Fonksiyonu kullanma

Bu yüzden aradığım şeyin mantığını kapsüllemek için bir fonksiyon yazdım add_admin_menu_separator(). İkinci seçenekte daha yüksek olan bir dizi dizin numarasını gerkeceği bundan sonra bir ayırıcı eklemek istediğiniz ve sonra işlevini çağırır add_admin_menu_separator()geçen senin parametre olarak indeksini söyledi.

Örneğin:

add_admin_menu_separator(37);

add_admin_menu_separator()fonksiyon kendisi

İşte add_admin_menu_separator()temanın functions.phpdosyasına kopyalayabileceğiniz fonksiyonun tanımı . Evet bu arcane ama o zaman global $menudiziyi yaratan ve kullanan kod da öyle . (Planlar nihayetinde buna değer vermeyecek, neyse ki, ama bu muhtemelen birkaç yıl olacak.)

function add_admin_menu_separator($position) {
  global $menu;
  $index = 0;
  foreach($menu as $offset => $section) {
    if (substr($section[2],0,9)=='separator')
      $index++;
    if ($offset>=$position) {
      $menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
      break;
    }
  }
  ksort( $menu );
}

$menuİhtiyacınız olan dizini bulmak

Eğer bir yapabileceğini gerekenler dizin numarası anlamak için var_dump()bir $GLOBALS['menu']bir içinden admin_initkanca. İşte functions.phpdeğerlerin ne olduğunu görmek için geçici olarak temanızın dosyasına bırakabileceğiniz bir kod . Bu, yalnızca şununla başlayan bir URL istediğinde işe yarar /wp-admin/ (ancak FTP ile yaptığınızdan emin olun ve yerleşik tema düzenleyiciyi değil veya sitenize erişiminizi kaybedeceksiniz, en azından temanın functions.phpdosyasına FTP erişimi alana kadar !) :

add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
  if (is_admin()) {
    header('Content-Type:text/plain');
    var_dump($GLOBALS['menu']);
    exit;
  }
}

Ayrıca bakınız:

Btw, bu bağlantıları genel olarak yönetici menülerinde çalışmak için yararlı bulabilirsiniz:

Yönetici menü sınıflarım şu anda ayırıcılar eklemek için kolay bir yol sunmasa da, zamanım olduğunda bunu ekleyeceğimi düşünüyorum.


Teşekkürler Mike, bütün gece global var menüsünü inceledim, ancak ayırıcı eklemeyi başaramadım, menülerin wp'de nasıl çalıştığı artık çok daha net.
user1147

Merhaba @ user1147 : Evet, anlamak çok zor. İlk ihtiyacım olduğunda çok zaman aldı ve hala onlarla mücadele ediyorum. Bu yüzden neden bu fonksiyonları yazdım ki, bundan böyle kolayca yapabilirim! Neyse, cevabımın yardımına sevindim.
MikeSchinkel

1
@MikeSchinkel Bu yöntem benim için Wordpress 3.3.1 ile çalışmıyor.
Jim Geurts,

1
@JimGeurts - Benim için de çalışmıyor: /
Evan Mattson

2
Sadece test ettim ve 4.5'te "işe yarıyor", ancak WordPress artık satırlardan kurtulmaya karar verdi. Bence CSS eklerseniz çözüm olur, ancak benim yaşamım boyunca arka uç bir dev olduğum ve CSS'yi emdiğim için hangi CSS'yi ekleyeceğimi bilemiyorum. Belki başka biri önerebilir?
MikeSchinkel

4

Bu kadar kolay:

add_action( 'admin_init', 'add_sep' );
function add_sep() {

    if ( ! is_admin() )
        return false;

    global $menu;
    $sep = $menu[4]; // that's the default separator
    $pos = 6; // change it for the desired position
    $menu = array_merge(
        array_slice( $menu, 0, $pos ),
        array( $sep ),
        array_slice( $menu, $pos + 1, -1)
    );
    $menu[ $pos - 1 ][4] .= ' menu-top-last';
    $menu[ $pos + 1 ][4] .= ' menu-top-first';

}

Not: Varsayılan ayırıcı konumu ( $menu[4]), (veya eklentilerinizin) bu kancadan önce yaptığınız yapılandırmaya bağlı olarak farklı olabilir.

Tabii ki, ayrıca menu-top-firstve menu-top-lastsınıflar içgüdüsel olarak ince ayar yapabilirsiniz .


2

Ayırıcılarla ilgili bazı sorunlar eklenmeseydi, bunun nedeni wordpress'in kopya ayırıcıları kaldırmasıydı. ksort($menu);Fonksiyonun altına ekleme sorunu düzeltti.


1

Bu, MastaBaba'nın cevabını temel alır, ancak belirttiğiniz konumdaki hiçbir şeyin yerine geçmez - daha sonra ayırıcıyı ekler.

Ayrıca adsız bir işlev kullanır, bu nedenle yalnızca PHP sürüm 5.3 ve üzeri ile uyumludur.

add_action( 'admin_menu', function () {
    $position = 29;
    global $menu;
    $separator = [
        0 => '',
        1 => 'read',
        2 => 'separator' . $position,
        3 => '',
        4 => 'wp-menu-separator'
    ];
    if (isset($menu[$position])) {
        $menu = array_splice($menu, $position, 0, $separator);
    } else {
        $menu[$position] = $separator;
    }
});

0

Ne yapmaya çalıştığınızı belirlemek biraz zor, ama bence WordPress yönetici menüsüne üst düzey bir giriş eklemek istediğinizi düşünüyorum.

WordPress Kodeksinde bu belgelere bakın .

Kısacası, add_menu_page()çeşitli argümanlar alan ve yönetim menüsünde "Dashboard", "Posts", "Media" vb.

Umarım doğru anlamışımdır. :-)


Sadece bir yönetici menü seperatörü eklemeye çalışıyorum. Soruyu göndermeden önce kullanmaya çalıştım add_menu_page().
user1147

Görünüşe göre MikeSchinkel seni iyi korudu. Yanlış anlama için özür dilerim. İyi şanslar!
dgw

0

Aşağıda, yönetici menüsü oluşturulduğunda çalıştırılan bir Wordpress eylemi listelenmiştir. Yönetici menüsü bir dizidir ve burada tüm yaptığınız, belirttiğiniz konumda bir ayırıcı tanımlayan bir dizi öğesi eklemektir.

Gönderen burada :

add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0   =>  '',
1   =>  'read',
2   =>  'separator' . $position,
3   =>  '',
4   =>  'wp-menu-separator'
);
}

Bu, şu anda kabul edilen cevaba benzese de, şu anda kabul edilen cevabın benim için işe yaramadığını (ve yorumlardan bakılırsa, birkaç kişi için) olmadığını unutmayın.


Herhangi bir açıklama yapmamanız dışında, var olan kabul edilen cevaptan bir fark yoktur. Lütfen Nasıl Cevaplanır yazısını okuyun .
fuxia

@toscho: Peki, bu benim için çalışıyor ve kabul edilen cevap yok.
MastaBaba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.