ตั้งค่าตัวเลือกหน้าจอผู้ดูแลระบบเริ่มต้น & คำสั่ง Metabox


28

ฉันหมดหวังที่จะหาวิธี (วิธีใด ๆ ) เพื่อตั้งค่า "ตัวเลือกหน้าจอ" เริ่มต้นและสั่งซื้อ metabox ผ่านไฟล์ functions.php ไม่มีใครมีความช่วยเหลือที่พวกเขาสามารถให้ที่นี่?


2014 ปรับปรุง: สำหรับผู้ที่เพียงแค่ต้องกล่อง meta สั่งซื้อใหม่ให้ดูคำตอบ Nabil ด้านล่าง
rinogo

คำตอบ:


23

การกำหนดลำดับของกล่องเมตาในหน้าแก้ไขการโพสต์

คุณจะต้องลบเมตาบ็อกซ์และเพิ่มอีกครั้งตามลำดับที่คุณต้องการ

หากต้องการปิดใช้งานกล่องเมตา: (ปรับแต่งตามความต้องการของคุณดูที่ metabox id ในรหัส html เพื่อทราบชื่อที่คุณควรใช้เป็นพารามิเตอร์แรกของฟังก์ชั่น)

function my_remove_meta_boxes() {

    remove_meta_box('postcustom', 'post', 'core');

    remove_meta_box('commentsdiv', 'post', 'core');

    ...
}

add_action( 'admin_menu', 'my_remove_meta_boxes' );

หลังจากลบพวกเขาคุณสามารถใช้ฟังก์ชั่น add_meta_box เพื่อเพิ่มพวกเขาในตำแหน่งงานใหม่: http://codex.wordpress.org/Function_Reference/add_meta_box ลำดับของกล่องเมตาจะขึ้นอยู่กับลำดับที่คุณเรียกใช้ฟังก์ชัน add_meta_box ตัวอย่างเช่น: เมื่อมีข้อมูลโค้ดต่อไปนี้กล่องเมตาความคิดเห็นจะอยู่ก่อนกล่องเมตาของฟิลด์ที่กำหนดเอง

function my_add_meta_boxes( $post_type, $post ) {
    if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
        add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

คุณอาจต้องการดูไฟล์ wp-admin / edit-form-advanced.php

การตั้งค่าชื่อคอลัมน์ที่จะปรากฏในหน้ารายการโพสต์

คุณต้องใช้ตัวกรองจัดการ _ {$ post_type} _posts_columns ตัวอย่าง: ตัวอย่างต่อไปนี้จะลบคอลัมน์ความคิดเห็น

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

การตั้งค่าผลลัพธ์เริ่มต้นที่จะแสดงในหน้ารายการโพสต์

ใช้ตัวกรอง 'แก้ไข _ {$ post_type} _per_page' และ 'edit_posts_per_page'

function my_edit_post_per_page( $per_page, $post_type ) {

    $edit_per_page = 'edit_' . $post_type . '_per_page';
    $per_page = (int) get_user_option( $edit_per_page );
    if ( empty( $per_page ) || $per_page < 1 )
        $per_page = 1;

    return $per_page;
}

add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );

หากต้องการกำหนดเป้าหมายประเภทโพสต์ที่เฉพาะเจาะจง:

  • ใช้add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );เช่นadd_filter( 'edit_post_per_page', 'my_edit_post_per_page' );สำหรับโพสต์add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );สำหรับหน้า

  • หรือใช้เงื่อนไขภายในฟังก์ชั่นของคุณ เช่น:

    ฟังก์ชั่น my_edit_post_per_page ($ per_page, $ post_type) {

    if( $post_type == 'post' ) {
        $edit_per_page = 'edit_' . $post_type . '_per_page';
        $per_page = (int) get_user_option( $edit_per_page );
        if ( empty( $per_page ) || $per_page < 1 )
            $per_page = 1;
    }
    
    
    return $per_page;

ขออภัยฉันอาจอธิบายตัวเองไม่ถูกต้อง ฉันอ้างถึงกล่องเมตาในหน้าแก้ไขการโพสต์ในพื้นที่ผู้ดูแลระบบรวมทั้งการตั้งค่าจำนวนโพสต์เริ่มต้นที่จะแสดงในหน้ารายการโพสต์ผู้ดูแลระบบ
NetConstructor.com

1
ดังนั้นทางเทคนิคนี่ไม่ใช่คำถามมันเป็นคำถามจริง ๆ 2 ข้อ
Tom J Nowell

ฉันแก้ไขคำตอบของฉัน แจ้งให้เราทราบหากคุณต้องการรายละเอียดเพิ่มเติม
sorich87

@ sorich87 ขอบคุณสำหรับการตอบกลับของคุณอย่างไรก็ตามจากสิ่งที่ฉันจำได้ว่าไม่มีวิธีที่จะระบุลำดับที่แน่นอนของแต่ละ metabox หรือมี? บางทีฉันควรจะเจาะจงมากขึ้น โดยทั่วไปฉันกำลังมองหาข้อมูลโค้ดที่หลากหลายซึ่งให้ฉันตั้งค่าตัวเลือกต่าง ๆ ไว้ล่วงหน้าสำหรับผู้ใช้ทุกคนโดยไม่ต้องลงชื่อเข้าใช้แต่ละบัญชี ตัวอย่าง: การตั้งค่าลำดับที่แน่นอนของกล่องเมตาในหน้าแก้ไขการโพสต์การตั้งค่าชื่อคอลัมน์ที่ปรากฏในหน้ารายการโพสต์การตั้งค่าผลลัพธ์เริ่มต้นที่จะแสดงในหน้ารายการโพสต์ ... สิ่งที่ต้องการ ขอบคุณล่วงหน้า.
NetConstructor.com

ฉันแก้ไขคำตอบของฉัน
sorich87

9

ในตัวอย่างต่อไปแทนที่{CPT}ด้วยชื่อประเภทโพสต์เช่นpost, page, book, event, imaginary, foobar... ดังนั้นถ้าคุณมีประเภทโพสต์ที่มีชื่อคุณจะต้องเพิ่มตัวกรองสำหรับeventget_user_option_meta-box-order_event

add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
    return array(
        'normal' => join( 
            ",", 
            array(       // vvv  Arrange here as you desire
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

หมายเหตุ:

  • นอกจากnormalนี้คุณยังสามารถมีsideและadvanced
  • ค่าเป็นรหัสคั่นด้วยเครื่องหมายจุลภาคคั่นคุณสามารถคว้าโดยดูรหัสต้นฉบับของหน้าหรือคุณสามารถเดาได้
  • metabox ใด ๆ ที่มีอยู่ไม่รวมอยู่ในคำสั่งซื้อที่กำหนดเองของคุณจะถูกเพิ่มโดยอัตโนมัติในตอนท้ายของรายการของคุณ

1
ฉันค่อนข้างสับสนกับ{CPT}ระบบการตั้งชื่อ เพื่อชี้แจงถ้าคุณมีประเภทโพสต์ที่มีชื่อคุณจะต้องเพิ่มตัวกรองสำหรับevent get_user_option_meta-box-order_event
rinogo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.