Saya punya komentar kode tentang tiga solusi yang sudah diposting, tetapi juga komentar umum
Mereka menyajikan pilihan yang kurang optimal: mengesampingkan pilihan kotak centang Opsi Layar pengguna; atau hormati tetapi biarkan kode Anda diabaikan jika pengguna pernah mengubah kotak centang, bahkan untuk meta_box lainnya, atau sebelum kode Anda ada di WP. Tampaknya pilihan penuh hormat hanya berguna jika semua pengguna Anda baru. Solusi terbaik adalah dengan menetapkan opsi pengguna khusus untuk menentukan apakah default meta_box spesifik Anda telah diubah oleh pengguna, dan hormati itu. Tidak, saya belum menulis kode itu! Seharusnya mudah ... :)
Tiga solusi diposting:
1. Solusi WraithKenny adalah hidden_meta_boxes
solusi yang mengesampingkan user_option. Catatan itu mencakup semua jenis posting ('posting', 'halaman', 'tautan', 'lampiran', dan semua jenis posting khusus). Tidak apa-apa kecuali Anda menginginkannya spesifik. Anda menentukan post_type di add_meta_box()
panggilan Anda . Anda dapat mencoba mencocokkannya, atau hanya menaruhnya karena yang tidak cocok akan diabaikan. Jika Anda ingin mengetahui post_type di filter, Anda dapat menggunakan screen
parameter tambahan :
add_filter('hidden_meta_boxes', 'foo_hidden_meta_boxes', 10, 2);
function foo_hidden_meta_boxes($hidden, $screen) {
$post_type= $screen->id;
switch ($post_type) {
// case 'post', 'page', 'link', 'attachment', and any custom post types
// $hidden[]= 'foo_box_id';
// /or/
// $hidden= array_diff($hidden, array('foo_box_id'));
}
return $hidden;
}
2. Seperti yang dikatakan Rarst, default_hidden_meta_boxes
hormati user_option. Sepertihidden_meta_boxes
, Anda dapat menggunakan parameter $ screen untuk membedakan post_types.
3. Fungsi set_user_metaboxes () dari Drebabels juga menghormati user_option. Catat itu hard-coded untuk layar edit 'post'. Untuk menangani layar edit 'halaman', dan post_types lainnya, bungkus kode dalam loop ini:
function set_user_metaboxes($user_id=NULL) {
$post_types= array( 'post', 'page', 'link', 'attachment' );
// add any custom post types here:
// $post_types[]= 'my_custom_post_type';
foreach ($post_types as $post_type) {
// These are the metakeys we will need to update
$meta_key= array(
'order' => "meta-box-order_$post_type",
'hidden' => "metaboxhidden_$post_type",
);
// The rest is the same as drebabels's code,
// with '*_user_meta()' changed to '*_user_option()'
// So this can be used without hooking into user_register
if ( ! $user_id)
$user_id = get_current_user_id();
// Set the default order if it has not been set yet
if ( ! get_user_option( $meta_key['order'], $user_id ) ) {
$meta_value = array(
'side' => 'submitdiv,formatdiv,categorydiv,postimagediv',
'normal' => 'postexcerpt,tagsdiv-post_tag,postcustom,commentstatusdiv,commentsdiv,trackbacksdiv,slugdiv,authordiv,revisionsdiv',
'advanced' => '',
);
update_user_option( $user_id, $meta_key['order'], $meta_value, true );
}
// Set the default hiddens if it has not been set yet
if ( ! get_user_option( $meta_key['hidden'], $user_id ) ) {
$meta_value = array('postcustom','trackbacksdiv','commentstatusdiv','commentsdiv','slugdiv','authordiv','revisionsdiv');
update_user_option( $user_id, $meta_key['hidden'], $meta_value, true );
}
}
}
Ya, get_user_meta
seharusnya begitu get_user_option
. Untuk satu situs tidak masalah, dan bahkan untuk multi situs mungkin tidak. Lihat wp-admin / include / ajax-actions.php untuk alasan: update_user_option
memiliki parameter global 'benar'.