Önceden yayınlanmış üç çözüm hakkında kod yorumum var, aynı zamanda genel bir yorum var
Yetersiz bir seçim sunarlar: ya kullanıcının Ekran Seçenekleri onay kutusu seçimini geçersiz kılar; veya saygı gösterin ancak kullanıcı diğer meta_box'lar için bile veya kodunuz WP'de olmadan önce kullanıcı onay kutularını değiştirdiyse kodunuzun yoksayılmasını sağlayın. Saygılı seçim sadece tüm kullanıcılarınız yeniyse yararlı görünüyor. En iyi çözüm, belirli meta_box varsayılanlarınızın kullanıcı tarafından değiştirilip değiştirilmediğini belirlemek için özel bir kullanıcı seçeneği ayarlamak ve buna saygı duymaktır. Hayır, bu kodu yazmadım! Kolay olmalı ... :)
Üç çözüm şöyle:
1. WraithKenny'nin hidden_meta_boxes
çözümü user_option'ı geçersiz kılan çözümdür. Tüm gönderi türlerini ('gönderi', 'sayfa', 'bağlantı', 'ek' ve tüm özel gönderi türlerini kapsadığını unutmayın. Belirli olmasını istemediğiniz sürece sorun değil. add_meta_box()
Aramalarınızda post_type öğelerini belirttiniz . Bunları eşleştirmeyi deneyebilir veya eşleşmeyenler göz ardı edileceği için kanatlayabilirsiniz. Filtrede post_type öğesini bilmek istiyorsanız, extra screen
parametresini kullanabilirsiniz :
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.default_hidden_meta_boxes
Rarst'ın dediği gibi user_option'a saygı duyar. Olduğu gibi hidden_meta_boxes
, post_types'i ayırt etmek için $ screen parametresini kullanabilirsiniz.
3. Drebabels'in set_user_metaboxes () işlevi user_option'a da saygı gösterir. 'Yazı' düzenleme ekranı için kodlanmış olduğuna dikkat edin. 'Sayfa' düzenleme ekranını ve diğer post_types'i işlemek için kodu bu döngüde sarın:
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 );
}
}
}
Evet, get_user_meta
olmalı get_user_option
. Tek site için önemli değil, hatta çoklu site için muhtemelen önemli değil. Wp-admin / include / ajax-actions.php adresine bakın: update_user_option
'gerçek' global parametreye sahiptir.