ฉันเพิ่งพบพารามิเตอร์ menu_positionดูเหมือนว่าคุณสามารถวางเมนูประเภทโพสต์ที่กำหนดเองของคุณได้เกือบทุกที่ ยกเว้นด้านบนเมนูโพสต์!
ฉันจะทำให้สำเร็จได้อย่างไร
ฉันเพิ่งพบพารามิเตอร์ menu_positionดูเหมือนว่าคุณสามารถวางเมนูประเภทโพสต์ที่กำหนดเองของคุณได้เกือบทุกที่ ยกเว้นด้านบนเมนูโพสต์!
ฉันจะทำให้สำเร็จได้อย่างไร
คำตอบ:
ตำแหน่งสำหรับรายการเมนูหลัก
คำอธิบายพารามิเตอร์สำหรับ "ตำแหน่งเมนู"
$position
( จำนวนเต็ม ) ( เลือกได้ ) ตำแหน่งในเมนูตามลำดับเมนูนี้ควรปรากฏขึ้น ตามค่าเริ่มต้นหากไม่ระบุพารามิเตอร์นี้เมนูจะปรากฏที่ด้านล่างของโครงสร้างเมนู ยิ่งจำนวนสูงเท่าใดอันดับก็จะต่ำลงในเมนูคำเตือน:หากรายการเมนูสองรายการใช้แอตทริบิวต์ตำแหน่งเดียวกันรายการใดรายการหนึ่งอาจถูกเขียนทับเพื่อให้รายการเดียวปรากฏขึ้น! ความเสี่ยงของความขัดแย้งสามารถลดลงได้โดยใช้ทศนิยมแทนค่าจำนวนเต็มเช่น 63.3 แทน 63
เริ่มต้น: ด้านล่างของโครงสร้างเมนู
ปลั๊กอิน JetPack ใหม่จะวางลิงค์เมนูของมันไว้ใต้ลิงค์แดชบอร์ด มันทำได้โดยการตั้งค่าลำดับเมนูเป็น 0 โดยกรองอาร์เรย์ $ 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;
}
จากความอยากรู้จะเกิดอะไรขึ้นถ้าคุณลอง 0 เป็น menu_position
ฉันใช้ 'menu_postion' => 0, 1,2,3,4
ไม่สำคัญหรอก หากคุณเล่นกับมันคุณสามารถคิดออกได้อย่างง่ายดาย
การใช้ 'menu_position' => 1 ควรวางไว้ใต้รายการเมนูแดชบอร์ดด้านบนของตัวคั่น 0 ควรวางไว้เหนือแผงควบคุม
กำลังมองหาวิธีแก้ไขปัญหาบนเว็บ แต่ไม่พบ เคล็ดลับนี้ใช้ง่าย (เช่น) ที่นี่คุณมีรายชื่อตำแหน่งงาน:
- 2 แดชบอร์ด
- 4 ตัวแยก
- 5 กระทู้
- 10 สื่อ
- 15 ลิงค์
- 20 หน้า
- 25 ความเห็น
- 59 ตัวแยก
- 60 ลักษณะภายนอก
- 65 ปลั๊กอิน
- ผู้ใช้ 70 คน
- 75 เครื่องมือ
- 80 การตั้งค่า
- 99 ตัวแยก
หากคุณมีรายการเพิ่มเติมคุณสามารถอ่านตำแหน่งปัจจุบันของแต่ละรายการได้โดยพิมพ์เมนู $ ทั่วโลก:
global $menu;
print_r($menu);
ดังนั้นหากฉันเข้าใจเป็นอย่างดีไม่มีสิ่งใดที่จะป้องกันไม่ให้เราสั่งเมนูใหม่เหมือนที่เราต้องการ:
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');
มันใช้งานได้ดีสำหรับฉันดังนั้นฉันคิดว่านี่เป็นสิ่งที่ถูกต้องฉันผิดหรือเปล่า?
นี่เป็นข้อผิดพลาดใน WordPress โปรดดูหัวข้อนี้ใน Trac: http://core.trac.wordpress.org/ticket/14755
แก้ไขใน 4.4 ...
https://developer.wordpress.org/reference/functions/add_menu_page/#notes
คุณสามารถใช้สิ่งนี้:
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');
ตอนนี้คุณสามารถใช้ตำแหน่ง 5 เพื่อเพิ่มเมนูของคุณด้านบนเมนูโพสต์
นี่คือข้อแม้ในประเด็นทั้งหมด ...
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;
ข้อสังเกต: จะต้องเป็นจำนวนเต็มและไม่ได้ตั้งค่าไว้มิฉะนั้นจะอยู่ที่ด้านล่างของรายการ
สำหรับวิธีแก้ปัญหาการทำงานใน WordPress 5 และต่ำกว่าให้ปรับตำแหน่งด้วยรหัสต่อไปนี้:
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;
});
สิ่งนี้ถือว่าคุณไม่มีรายการเมนูมากกว่าหนึ่งรายการที่แย่งตำแหน่งโพล
ในลิงก์เดียวกับที่คุณลิงก์มันจะอ่าน:
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
ดังนั้นหากคุณตั้งค่าmenu_position
เป็นเช่น4
นั้นควรวางไว้เหนือโพสต์
ตำแหน่งของ-1
วางไว้เหนือDashboard
ลิงก์
คุณสามารถใช้ค่าทศนิยม (เป็นสตริง) ตัวอย่างเช่นฉันมีโพสต์แบบกำหนดเองบางประเภทที่ฉันวางไว้ที่ตำแหน่งสุดท้ายในเมนู (100001, 100002, 100003)
จากนั้นเพียงใส่รหัสนี้เพื่อย้ายไปไว้เหนือโพสต์และใต้รายการเมนูแดชบอร์ด
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 );