Atur opsi Layar Admin Default & Pesanan Metabox

28

Saya mati-matian mencari cara (cara apa pun) untuk mengatur "opsi layar" default dan urutan metabox melalui file functions.php. Adakah yang bisa membantu di sini?

NetConstructor.com
sumber
Pembaruan 2014: Bagi mereka yang hanya perlu memesan ulang kotak meta, lihat jawaban Nabil di bawah ini .
rinogo

Jawaban:

23

Mengatur urutan kotak meta pada halaman edit posting

Anda harus menghapus kotak meta, dan menambahkannya lagi dalam urutan yang Anda inginkan.

Untuk menonaktifkan kotak meta: (sesuaikan dengan kebutuhan Anda, lihat id metabox dalam kode html untuk mengetahui nama mana yang harus Anda gunakan sebagai parameter fungsi pertama)

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

Setelah menghapusnya, Anda dapat menggunakan fungsi add_meta_box untuk menambahkannya di posisi baru: http://codex.wordpress.org/Function_Reference/add_meta_box . Urutan kotak meta tergantung pada urutan di mana Anda memanggil fungsi add_meta_box. Misalnya: dengan cuplikan kode berikut, kotak meta komentar akan berada di depan kotak meta bidang khusus.

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

Anda mungkin ingin melihat file wp-admin / edit-form-advanced.php

Mengatur judul kolom mana yang muncul di halaman daftar posting

Anda perlu menggunakan filter manage _ {$ post_type} _posts_columns. Misalnya: cuplikan berikut akan menghapus kolom komentar.

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

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Pengaturan hasil default akan ditampilkan pada halaman daftar posting

Gunakan filter 'edit _ {$ post_type} _per_page' dan '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' );

Untuk menargetkan jenis posting tertentu:

  • gunakan add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );misalnya add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );untuk posting, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );untuk halaman.

  • atau gunakan kondisi dalam fungsi Anda. misalnya:

    function 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;
sorich87
sumber
Maaf, mungkin saya tidak menjelaskan diri saya dengan benar. Saya merujuk ke kotak meta pada halaman edit posting di area admin serta mengatur jumlah posting default untuk ditampilkan pada halaman daftar posting admin.
NetConstructor.com
1
jadi secara teknis ini bukan pertanyaan, itu benar-benar 2 pertanyaan?
Tom J Nowell
Saya mengubah jawaban saya. Beri tahu saya jika Anda membutuhkan detail lebih lanjut.
sorich87
@ sorich87 terima kasih atas tanggapan Anda namun dari apa yang saya ingat tidak ada cara untuk menentukan urutan yang tepat dari masing-masing metabox atau ada di sana? Mungkin saya harus sedikit lebih spesifik. Saya pada dasarnya mencari berbagai potongan kode yang memungkinkan saya mengatur berbagai opsi untuk semua pengguna tanpa harus masuk ke setiap akun. Contoh: mengatur urutan tepat kotak meta pada halaman edit posting, mengatur judul kolom mana yang muncul pada halaman daftar posting, mengatur hasil default yang akan ditampilkan pada halaman daftar posting ... hal-hal seperti itu. Terima kasih sebelumnya.
NetConstructor.com
Saya mengubah jawaban saya.
sorich87
9

Pada contoh berikut, ganti {CPT}dengan nama posting jenis, seperti post, page, book, event, imaginary, foobar... Jadi jika Anda memiliki jenis posting yang bernama event, Anda akan perlu menambahkan filter untuk get_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',
            )
        ),
    );
}

Catatan:

  • Bersamaan dengan itu normal, Anda juga dapat memiliki sidedanadvanced
  • Nilai-nilai ini adalah div id yang dipisahkan koma, Anda dapat mengambil dengan melihat kode sumber halaman atau Anda bisa menebak
  • Setiap metabox yang ada tidak termasuk dalam pesanan khusus Anda akan ditambahkan secara otomatis di akhir daftar Anda.
Nabil Kadimi
sumber
1
Saya agak bingung dengan {CPT}nomenklaturnya; untuk memperjelas, jika Anda memiliki jenis posting bernama event, Anda perlu menambahkan filter untuk get_user_option_meta-box-order_event.
rinogo