การวางเมนูโพสต์ที่กำหนดเองไว้เหนือเมนูโพสต์โดยใช้ menu_position?


17

ฉันเพิ่งพบพารามิเตอร์ menu_positionดูเหมือนว่าคุณสามารถวางเมนูประเภทโพสต์ที่กำหนดเองของคุณได้เกือบทุกที่ ยกเว้นด้านบนเมนูโพสต์!

ฉันจะทำให้สำเร็จได้อย่างไร


คำถามที่ดีดูเหมือนว่าเป็นที่เดียวที่จะไม่ไป
jnthnclrk

คำตอบ:


14

ตำแหน่งสำหรับรายการเมนูหลัก

  • 2 แดชบอร์ด
  • 4 ตัวแยก
  • 5 กระทู้
  • 10 สื่อ
  • 15 ลิงค์
  • 20 หน้า
  • 25 ความเห็น
  • 59 ตัวแยก
  • 60 ลักษณะภายนอก
  • 65 ปลั๊กอิน
  • ผู้ใช้ 70 คน
  • 75 เครื่องมือ
  • 80 การตั้งค่า
  • 99 ตัวแยก

คำอธิบายพารามิเตอร์สำหรับ "ตำแหน่งเมนู"

$position( จำนวนเต็ม ) ( เลือกได้ ) ตำแหน่งในเมนูตามลำดับเมนูนี้ควรปรากฏขึ้น ตามค่าเริ่มต้นหากไม่ระบุพารามิเตอร์นี้เมนูจะปรากฏที่ด้านล่างของโครงสร้างเมนู ยิ่งจำนวนสูงเท่าใดอันดับก็จะต่ำลงในเมนู

คำเตือน:หากรายการเมนูสองรายการใช้แอตทริบิวต์ตำแหน่งเดียวกันรายการใดรายการหนึ่งอาจถูกเขียนทับเพื่อให้รายการเดียวปรากฏขึ้น! ความเสี่ยงของความขัดแย้งสามารถลดลงได้โดยใช้ทศนิยมแทนค่าจำนวนเต็มเช่น 63.3 แทน 63

เริ่มต้น: ด้านล่างของโครงสร้างเมนู


4

ปลั๊กอิน 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


2

ฉันใช้ 'menu_postion' => 0, 1,2,3,4

ไม่สำคัญหรอก หากคุณเล่นกับมันคุณสามารถคิดออกได้อย่างง่ายดาย

การใช้ 'menu_position' => 1 ควรวางไว้ใต้รายการเมนูแดชบอร์ดด้านบนของตัวคั่น 0 ควรวางไว้เหนือแผงควบคุม


2

กำลังมองหาวิธีแก้ไขปัญหาบนเว็บ แต่ไม่พบ เคล็ดลับนี้ใช้ง่าย (เช่น) ที่นี่คุณมีรายชื่อตำแหน่งงาน:

  • 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');

มันใช้งานได้ดีสำหรับฉันดังนั้นฉันคิดว่านี่เป็นสิ่งที่ถูกต้องฉันผิดหรือเปล่า?


วิธีการแก้ปัญหาบอบบางมากซึ่งอาศัยหมายเลขมายากล มันจะแตกทันทีที่ปลั๊กอินอื่นถูกเพิ่ม / เอาออกซึ่งวางไอเท็มอื่น ๆ
Walf


1

คุณสามารถใช้สิ่งนี้:

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 เพื่อเพิ่มเมนูของคุณด้านบนเมนูโพสต์


สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันวางไว้ในปลั๊กอินสำหรับไซต์ของฉันซึ่งไฟล์ custom-post-type.php ของฉันคือ
Daniel

1

นี่คือข้อแม้ในประเด็นทั้งหมด ...

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; 

ข้อสังเกต: จะต้องเป็นจำนวนเต็มและไม่ได้ตั้งค่าไว้มิฉะนั้นจะอยู่ที่ด้านล่างของรายการ


1

สำหรับวิธีแก้ปัญหาการทำงานใน 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;
});

สิ่งนี้ถือว่าคุณไม่มีรายการเมนูมากกว่าหนึ่งรายการที่แย่งตำแหน่งโพล


0

ในลิงก์เดียวกับที่คุณลิงก์มันจะอ่าน:

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ลิงก์


ฉันลอง 4 แต่มันเหมือนกับ 5
janoChen

การบริหารทรัพยากรมนุษย์ พยายาม 1-3 ไหม ฉันคิดว่าบางที "1" (หรือ "0") เป็นแผงควบคุม อาจมีบางอย่างที่ 2-3 จะใช้งานได้
แซค

0 1 2 3 ไปก่อนหน้าแดชบอร์ดและ 4 ไปด้านล่างโพสต์ เป็นไปไม่ได้จริงๆ!
janoChen

ว้าว. WordPress แตกมากแค่ไหน? ฉันไม่รู้ : - /
แซค

ฉันคิดว่า 4 เป็นตัวคั่นด้านบนโพสต์และ 5 เป็นโพสดังนั้นถ้าคุณตั้งตำแหน่งเมนูของคุณเป็น 3 มันจะอยู่ตรงหน้าตัวคั่น ด้วยการกำหนดค่าเริ่มต้นแน่นอน การตั้งค่าหน้าปลั๊กอินของฉันเป็น 4 เขียนทับตัวคั่น แต่ปรากฏเหนือโพสต์ hmmm ...
goldenapples

0

คุณสามารถใช้ค่าทศนิยม (เป็นสตริง) ตัวอย่างเช่นฉันมีโพสต์แบบกำหนดเองบางประเภทที่ฉันวางไว้ที่ตำแหน่งสุดท้ายในเมนู (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 );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.