เพิ่มตัวคั่นลงในเมนูผู้ดูแลระบบหรือไม่


22

ไม่มีใครรู้วิธีเพิ่มคั่นเมนูผู้ดูแลระบบหรือไม่ ฉันพบสิ่งนี้แต่มันก็ไม่ได้ช่วย

ความคิดใด ๆ


ในกรณีที่ทุกคนยังคงค้นหาคำตอบนี้ปลั๊กอินนี้สามารถจัดการงาน
user31760

คำตอบ:


33

นี่คือวิธีที่รวดเร็วและสกปรกในการได้รับสิ่งที่คุณต้องการ

พื้นหลัง

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 คุณอาจพบว่าลิงก์เหล่านี้มีประโยชน์โดยทั่วไปสำหรับการทำงานกับเมนูผู้ดูแลระบบ:

แม้ว่าในปัจจุบันเมนูผู้ดูแลระบบของฉันจะไม่มีวิธีเพิ่มตัวคั่นอย่างง่าย แต่ฉันคิดว่าตอนนี้ฉันจะเพิ่มเมื่อมีเวลา


ขอบคุณไมค์ฉันตรวจสอบตลอดทั้งคืนเพื่อศึกษาเมนู var ส่วนกลาง แต่ฉันไม่ได้จัดการเพื่อเพิ่มตัวคั่นตอนนี้มันชัดเจนมากสำหรับฉันว่าเมนูทำงานใน wp ได้อย่างไร
user1147

สวัสดี@ user1147 : ใช่พวกเขายากที่จะเข้าใจ ครั้งแรกที่ฉันต้องใช้เวลาค่อนข้างมากและยังคงต่อสู้กับพวกเขา ดังนั้นทำไมฉันจึงเขียนฟังก์ชั่นเหล่านั้นดังนั้นฉันสามารถทำมันได้อย่างง่ายดายจากนี้! อย่างไรก็ตามดีใจที่คำตอบของฉันช่วย
MikeSchinkel

1
@MikeSchinkel วิธีนี้ใช้ไม่ได้กับ Wordpress 3.3.1
Jim Geurts

1
@JimGeurts - มันไม่ทำงานสำหรับฉันเช่นกัน: /
Evan Mattson

2
ฉันเพิ่งทดสอบมันและมันจะ "ทำงาน" ใน 4.5 แต่ WordPress ตัดสินใจที่จะกำจัดบรรทัดเหล่านั้นไม่ปรากฏอีกต่อไป ฉันคิดว่าทางออกถ้าจะเพิ่ม CSS แต่สำหรับชีวิตของฉันฉันไม่สามารถคิดออกว่าจะเพิ่ม CSS เพราะฉันเป็นแบ็กเอนด์ dev และดูดที่ CSS บางทีคนอื่นสามารถแนะนำ?
MikeSchinkel

4

ง่ายเหมือน:

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วิปัสสนาชั้นเรียน


2

มีปัญหาบางอย่างเกี่ยวกับตัวคั่นที่ไม่ได้ถูกเพิ่มเข้ามามันเป็นเพราะ wordpress ลบตัวคั่นที่ซ้ำกัน การเพิ่มksort($menu);ที่ด้านล่างของฟังก์ชันแก้ไขปัญหาได้


1

สิ่งนี้สร้างขึ้นจากคำตอบของ 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;
    }
});

0

เป็นการยากที่จะระบุว่าคุณกำลังพยายามทำอะไร แต่ฉันคิดว่าคุณต้องการเพิ่มรายการระดับบนสุดในเมนูผู้ดูแลระบบ WordPress

ดูเอกสารนี้ใน WordPress Codex

ในระยะสั้นคุณกำลังมองหาการใช้งานadd_menu_page()ฟังก์ชั่นซึ่งใช้เวลาจำนวนข้อโต้แย้งและแสดงรายการเพิ่มเติมในเมนูการบริหารเป็นพี่น้องของ "แดชบอร์ด", "โพสต์", "สื่อ" ฯลฯ

หวังว่าฉันเข้าใจถูกต้อง :-)


ฉันแค่พยายามที่จะเพิ่ม seprator เมนูผู้ดูแลระบบ add_menu_page()ก่อนที่จะโพสต์คำถามที่ผมพยายามที่จะใช้
user1147

ดูเหมือน MikeSchinkel มีคุณสวยคุ้มครองอย่างดี ขออภัยเกี่ยวกับความเข้าใจผิด โชคดี!
dgw

0

โฆษณาการกระทำที่จะ 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'
);
}

โปรดทราบว่าแม้ว่าสิ่งนี้จะคล้ายกับคำตอบที่ได้รับการยอมรับในปัจจุบัน แต่คำตอบที่ได้รับการยอมรับในปัจจุบันนั้นไม่ได้ผลสำหรับฉัน (และการตัดสินจากความคิดเห็นสำหรับคนอื่น ๆ )


คำตอบที่ยอมรับและยอมรับไม่มีความแตกต่างยกเว้นว่าคุณไม่ได้ให้คำอธิบายใด ๆ โปรดอ่านวิธีการตอบ
fuxia

@toscho: ดีสำหรับฉันและคำตอบที่ยอมรับไม่ได้
MastaBaba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.