Kotak Meta: kait 'admin_init' atau 'add_meta_boxes'?

9

Saat mengatur kotak meta dalam jenis posting khusus saya telah melakukannya menggunakan add_meta_boxeshook, misalnya

add_action('add_meta_boxes', 'meta_box_setup');
function meta_box_setup()
{
    add_meta_box( 
        'mb_movie_review', 
        'Movie Review Details', 
        'display_movie_review_mb', 
        'movie-reviews', 
        'side', 
        'high' 
    );
}

Tapi saya baru saja membaca tutorial ini yang melakukan hal berikut menggunakan admin_inithook, seperti ...

add_action('admin_init', 'meta_box_setup');
function meta_box_setup()
{
    add_meta_box( 
        'mb_movie_review', 
        'Movie Review Details', 
        'display_movie_review_mb', 
        'movie-reviews', 
        'side', 
        'high' 
    );
}

Ini adalah pertama kalinya saya melihatnya menggunakan admin_inithook.

Pertanyaan

Metode yang terakhir (menggunakan admin_init) tidak bekerja tetapi ...

  • apakah ini metode yang disukai ? (Yaitu lebih dioptimalkan?)
  • hanya cara berbeda untuk mencapai hasil yang sama, atau
  • a bad cara untuk menambahkan meta kotak? (jika demikian, mengapa?)
tidur
sumber
4
Lihatlah daftar ini: codex.wordpress.org/Plugin_API/Action_Reference - tidak masalah yang mana yang Anda gunakan asalkan tidak terlalu awal dan belum terlambat. Cara terbaik untuk menggunakan kait intuitif dan dapat diprediksi, jadi add_meta_boxeslebih disukai.
Paul
@ Paul Hebat. Bisakah Anda memposting ini sebagai jawaban (jadi saya dapat kredit Anda)?
tidur
3
Setuju, saya pikir hanya penulis tutorial tidak menyadarinya add_meta_boxes. Kami bahkan memiliki "add_meta_boxes_$post_type"kontrol yang lebih baik.
brasofilo

Jawaban:

4

Lihatlah daftar ini: http://codex.wordpress.org/Plugin_API/Action_Reference

  1. Tidak masalah yang mana yang Anda gunakan selama tidak terlalu dini dan belum terlambat. Cara terbaik untuk menggunakan kait intuitif dan dapat diprediksi, jadi add_meta_boxeslebih disukai. Suatu hari nanti di masa depan WordPress dapat mengubah sesuatu dan dengan menggunakan kait yang paling tepat Anda meningkatkan peluang Anda bahwa kode Anda akan tetap berfungsi di masa depan.
  2. Ada satu pengecualian yang bisa saya pikirkan. Kadang-kadang (dalam kasus yang sangat tidak mungkin terjadi) Anda mungkin perlu untuk panggilan misalnya add_theme_support()yang umumnya digunakan dengan after_setup_themekait tindakan hanya untuk pengguna yang masuk log yang merupakan administrator tetapi kait ini tidak memungkinkan Anda untuk mengakses informasi ini. Karena itu, Anda mungkin harus menggunakan kait tindakan set_current_useratau initsebagai gantinya (setelah melakukan riset jika aman untuk melakukannya).
Paul
sumber
3

Ada beberapa kait lain:

do_action( 'add_meta_boxes', $post_type, $post );

dan segera setelah itu berjalan:

do_action( "add_meta_boxes_{$post_type}", $post );

Jika Anda ingin melakukan pemeriksaan batalkan berbeda dari dalam hook / callback yang benar-benar mendaftarkan kotak meta, gunakan salah satu di atas karena \WP_Screenobjek tidak diisi sedini admin_initberjalan.

Jika Anda menggunakan add_meta_boxespengait yang lebih umum , Anda dapat memeriksa argumen pertamanya:

function register( $post_type, $post )
{
    if ( get_current_screen()->post_type !== $post_type )
        return;

    add_meta_box( /* etc. */ );
}

Jika Anda tidak ingin menambahkan kotak meta Anda selama posting belum disimpan setidaknya satu kali, Anda dapat memeriksa

if ( 'add' !== get_current_screen()->action )
    return;

dan seterusnya. Kesimpulan: Jika Anda ingin mempersempit, gunakan kait yang ditunjukkan di atas.

kaisar
sumber