Ben sadece neredeyse her yerde özel yazı türü menü yerleştirebilirsiniz gibi menu_position parametresini anladım . Yayınlar menüsünün dışında!
Bunu nasıl başarabilirim?
Ben sadece neredeyse her yerde özel yazı türü menü yerleştirebilirsiniz gibi menu_position parametresini anladım . Yayınlar menüsünün dışında!
Bunu nasıl başarabilirim?
Yanıtlar:
Çekirdek Menü Öğelerinin Konumları
"Menü konumu" için parametre açıklaması
$position
( tamsayı ) ( isteğe bağlı ) Menüdeki konum, bu menünün görünmesi gerekir. Varsayılan olarak, bu parametre atlanırsa, menü menü yapısının altında görünür. Sayı ne kadar yüksek olursa, menüdeki konumu o kadar düşük olur.UYARI: iki menü öğesi aynı pozisyon özelliğini kullanıyorsa, sadece bir öğe görüntülenmesi için öğelerden birinin üzerine yazılabilir! Çatışma riski, tamsayı değerleri yerine ondalık kullanılarak, örneğin 63 yerine 63,3 kullanılarak azaltılabilir.
Varsayılan: menü yapısının alt kısmı
Yeni JetPack Eklentisi, menü bağlantısını Gösterge Tablosu bağlantısının hemen altına yerleştirir. Bunu , menü sırasını 0 olarak ayarlayarak, $ menu_order dizisini filtreleyerek yapar. :
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;
}
Meraktan, 0'ı menu_position olarak denerseniz ne olur?
'Menu_postion' => 0, 1,2,3,4 kullandım.
Gerçekten önemli değil. Eğer onunla oynarsanız, kolayca anlayabilirsiniz.
'Menu_position' => 1 kullanıldığında, ayırıcı öğenin üzerindeki Gösterge Tablosu menü öğesinin altına yerleştirilmelidir. 0 Gösterge Tablosunun üzerine yerleştirilmelidir
Web'de bir çözüm arıyor ancak bulamadık. Basitçe bu hile yapar (örneğin). Burada yerel konum listeniz var:
- 2 Gösterge Tablosu
- 4 Ayırıcı
- 5 Gönderiler
- 10 Medya
- 15 Bağlantılar
- 20 sayfa
- 25 Yorum
- 59 Ayırıcı
- 60 Görünüm
- 65 Eklenti
- 70 Kullanıcı
- 75 Takımlar
- 80 Ayarlar
- 99 Ayırıcı
Daha fazla öğeniz varsa, global $ menüsünü yazdırarak her bir öğenin geçerli konumunu okuyabilirsiniz:
global $menu;
print_r($menu);
İyi anlarsam, hiçbir şey bizi istediğimiz gibi menüyü yeniden sipariş edemez:
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');
Benim için iyi çalışıyor, bence bu yasal, yanılıyor muyum?
Bu, WordPress'teki bir hatadır. Lütfen Trac'ta bu konuya bakın: http://core.trac.wordpress.org/ticket/14755
4.4'te düzeltildi ...
https://developer.wordpress.org/reference/functions/add_menu_page/#notes
Bunu kullanabilirsiniz:
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');
Şimdi, Post menüsünün yukarısına bir menü eklemek için 5. konumu kullanabilirsiniz.
İşte tüm mesele için uyarı ...
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;
DİKKAT: bir tamsayı olmalı ve önceden ayarlanmamış olmalıdır, aksi takdirde listenin en altına gider.
WordPress 5 ve önceki sürümlerde çalışan bir çözüm için, aşağıdaki kodla yeniden konumlandırın:
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;
});
Bu, kutup konumu için birden fazla menü öğesinin olmadığını varsayar.
Bağladığınız aynı bağlantıda şunu okur:
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
Yani, böyle bir menu_position
şeye ayarlarsanız 4
, mesajların üzerine koymalıdır.
Bir konum -1
onu Dashboard
bağlantının üzerine koyar .
Ondalık değerleri kullanabilirsiniz (dize olarak). Örneğin, menüdeki son konuma yerleştirdiğim bazı özel yazı türlerim var (100001, 100002, 100003).
Ardından, bunları Yayınlar'ın ve Gösterge Tablosu menü öğelerinin altına taşımak için bu kodu koymanız yeterlidir .
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 );