ไม่มีใครรู้วิธีเพิ่มคั่นเมนูผู้ดูแลระบบหรือไม่ ฉันพบสิ่งนี้แต่มันก็ไม่ได้ช่วย
ความคิดใด ๆ
ไม่มีใครรู้วิธีเพิ่มคั่นเมนูผู้ดูแลระบบหรือไม่ ฉันพบสิ่งนี้แต่มันก็ไม่ได้ช่วย
ความคิดใด ๆ
คำตอบ:
นี่คือวิธีที่รวดเร็วและสกปรกในการได้รับสิ่งที่คุณต้องการ
WordPress $menu
เก็บส่วนเมนูผู้ดูแลระบบในอาร์เรย์ทั่วโลกที่เรียกว่า ในการเพิ่มตัวคั่นคุณเพิ่มองค์ประกอบลงใน$menu
อาร์เรย์โดยใช้ดัชนีที่อยู่ระหว่างดัชนีของตัวเลือกที่คุณต้องการแยก
add_admin_menu_separator()
ฟังก์ชั่นดังนั้นผมจึงได้เขียนฟังก์ชั่นการ encapsulate add_admin_menu_separator()
ตรรกะสำหรับผมนี้เรียกว่า คุณจะต้องเลือกหมายเลขดัชนีอาร์เรย์ที่สูงกว่าตัวเลือกหลังจากที่คุณต้องการเพิ่มตัวคั่นจากนั้นเรียกฟังก์ชันที่add_admin_menu_separator()
ส่งผ่านดัชนีดังกล่าวเป็นพารามิเตอร์ของคุณ
ตัวอย่างเช่น:
add_admin_menu_separator(37);
add_admin_menu_separator()
ฟังก์ชั่นของตัวเองนี่คือคำจำกัดความของฟังก์ชั่นadd_admin_menu_separator()
ที่คุณสามารถคัดลอกลงในfunctions.php
ไฟล์ธีมของคุณ ใช่มันเป็นความลับ แต่แล้วก็เป็นรหัสที่สร้างและใช้$menu
อาร์เรย์ทั่วโลก (ในที่สุดแผนการจะเลิกใช้ก็ต้องขอบใจ แต่นั่นอาจเป็นเพียงไม่กี่ปี)
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
ที่คุณต้องการจะคิดออกว่าตัวเลขดัชนีที่คุณต้องการคุณสามารถทำvar_dump()
ของ$GLOBALS['menu']
จากภายในadmin_init
เบ็ด นี่คือโค้ดบางส่วนที่คุณสามารถวางลงในfunctions.php
ไฟล์ของธีมของคุณชั่วคราวเพื่อดูว่าค่าคืออะไร สิ่งนี้จะใช้งานได้เมื่อร้องขอ URL ที่ขึ้นต้นด้วย/wp-admin/
(แต่ต้องแน่ใจว่าใช้กับ FTP ไม่ใช่ตัวแก้ไขธีมที่มีอยู่แล้วหรือคุณจะเข้าถึงเว็บไซต์ของคุณอย่างน้อยก็จนกว่าคุณจะได้รับ FTP เข้าถึงfunctions.php
ไฟล์ของธีม!) :
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
BTW คุณอาจพบว่าลิงก์เหล่านี้มีประโยชน์โดยทั่วไปสำหรับการทำงานกับเมนูผู้ดูแลระบบ:
แม้ว่าในปัจจุบันเมนูผู้ดูแลระบบของฉันจะไม่มีวิธีเพิ่มตัวคั่นอย่างง่าย แต่ฉันคิดว่าตอนนี้ฉันจะเพิ่มเมื่อมีเวลา
ง่ายเหมือน:
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';
}
หมายเหตุ: ตำแหน่งตัวคั่นเริ่มต้น ( $menu[4]
) อาจแตกต่างกันไปขึ้นอยู่กับการกำหนดค่าที่คุณ (หรือปลั๊กอินของคุณ) ทำไว้ก่อนเบ็ดนี้
แน่นอนคุณสามารถปรับแต่งmenu-top-first
และmenu-top-last
วิปัสสนาชั้นเรียน
มีปัญหาบางอย่างเกี่ยวกับตัวคั่นที่ไม่ได้ถูกเพิ่มเข้ามามันเป็นเพราะ wordpress ลบตัวคั่นที่ซ้ำกัน การเพิ่มksort($menu);
ที่ด้านล่างของฟังก์ชันแก้ไขปัญหาได้
สิ่งนี้สร้างขึ้นจากคำตอบของ MastaBaba แต่ไม่ได้แทนที่สิ่งใด ๆ ในตำแหน่งที่คุณระบุ - เพียงเพิ่มตัวคั่นในภายหลัง
นอกจากนี้ยังใช้ฟังก์ชั่นที่ไม่ระบุชื่อดังนั้นจึงเข้ากันได้กับ PHP เวอร์ชั่น 5.3 ขึ้นไปเท่านั้น
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;
}
});
เป็นการยากที่จะระบุว่าคุณกำลังพยายามทำอะไร แต่ฉันคิดว่าคุณต้องการเพิ่มรายการระดับบนสุดในเมนูผู้ดูแลระบบ WordPress
ดูเอกสารนี้ใน WordPress Codex
ในระยะสั้นคุณกำลังมองหาการใช้งานadd_menu_page()
ฟังก์ชั่นซึ่งใช้เวลาจำนวนข้อโต้แย้งและแสดงรายการเพิ่มเติมในเมนูการบริหารเป็นพี่น้องของ "แดชบอร์ด", "โพสต์", "สื่อ" ฯลฯ
หวังว่าฉันเข้าใจถูกต้อง :-)
add_menu_page()
ก่อนที่จะโพสต์คำถามที่ผมพยายามที่จะใช้
โฆษณาการกระทำที่จะ Wordpress ที่ทำงานเมื่อเมนูผู้ดูแลระบบที่มีการแสดงด้านล่าง เมนูผู้ดูแลระบบคืออาร์เรย์และทั้งหมดที่คุณทำอยู่ที่นี่คือการเพิ่มองค์ประกอบอาร์เรย์ที่กำหนดตัวคั่นในตำแหน่งที่คุณระบุ
จากที่นี่ :
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'
);
}
โปรดทราบว่าแม้ว่าสิ่งนี้จะคล้ายกับคำตอบที่ได้รับการยอมรับในปัจจุบัน แต่คำตอบที่ได้รับการยอมรับในปัจจุบันนั้นไม่ได้ผลสำหรับฉัน (และการตัดสินจากความคิดเห็นสำหรับคนอื่น ๆ )