ฉันมีความคิดเห็นรหัสเกี่ยวกับวิธีแก้ไขปัญหาสามรายการที่โพสต์แล้ว แต่ยังเป็นความคิดเห็นทั่วไป
ตัวเลือกเหล่านี้แสดงตัวเลือกย่อย: แทนที่ตัวเลือกหน้าจอตัวเลือกหน้าจอของผู้ใช้ หรือให้ความเคารพ แต่ให้โค้ดของคุณถูกเพิกเฉยถ้าผู้ใช้เคยเปลี่ยนช่องทำเครื่องหมายแม้แต่สำหรับ meta_boxes อื่น ๆ หรือก่อนที่รหัสของคุณจะอยู่ใน WP ดูเหมือนว่าทางเลือกที่น่าเคารพจะมีประโยชน์ก็ต่อเมื่อผู้ใช้ของคุณทั้งหมดเป็นของใหม่ ทางออกที่ดีที่สุดคือการตั้งค่าตัวเลือกผู้ใช้ที่กำหนดเองเพื่อตรวจสอบว่าค่าเริ่มต้น meta_box เฉพาะของคุณมีการเปลี่ยนแปลงโดยผู้ใช้และเคารพว่า ไม่ฉันไม่ได้เขียนรหัสนั้น! ควรเป็นเรื่องง่าย ... :)
โซลูชั่นทั้งสามโพสต์:
1.hidden_meta_boxes
วิธีแก้ปัญหาของ WraithKenny เป็นสิ่งที่แทนที่ user_option โปรดทราบว่ามันครอบคลุมประเภทโพสต์ทั้งหมด ('โพสต์', 'หน้า', 'ลิงค์', 'ไฟล์แนบ' และประเภทโพสต์ที่กำหนดเอง) ไม่เป็นไรเว้นแต่คุณต้องการให้เจาะจง คุณระบุ post_type ในการadd_meta_box()
โทรของคุณ คุณสามารถลองจับคู่พวกนั้นหรือแค่จับคู่ไว้เพราะสิ่งที่ไม่ตรงกันจะถูกละเว้น หากคุณต้องการทราบ post_type ในตัวกรองคุณสามารถใช้screen
พารามิเตอร์พิเศษ:
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.ตามที่ Rarst กล่าวให้default_hidden_meta_boxes
เคารพ user_option เช่นเดียวกับhidden_meta_boxes
คุณสามารถใช้พารามิเตอร์ $ screen เพื่อแยกความแตกต่างของ post_types
3.ฟังก์ชัน set_user_metaboxes () ของ Drebabels ยังเคารพ user_option โปรดทราบว่ามันเป็นรหัสสำหรับหน้าจอแก้ไข 'โพสต์' หากต้องการจัดการหน้าจอแก้ไข 'หน้า' และ post_types อื่น ๆ ให้ล้อมโค้ดในลูปนี้:
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 );
}
}
}
ใช่ควรจะเป็นget_user_meta
get_user_option
สำหรับไซต์เดียวไม่สำคัญและแม้แต่สำหรับหลายไซต์ก็อาจไม่ได้ ดู wp-admin / include / ajax-actions.php เพราะเหตุใด: update_user_option
มีพารามิเตอร์โกลบอล 'true'