Tôi có nhận xét mã về ba giải pháp đã được đăng, nhưng cũng có một nhận xét chung
Chúng đưa ra lựa chọn tối ưu: ghi đè lựa chọn hộp kiểm Tùy chọn màn hình của người dùng; hoặc tôn trọng nó nhưng bỏ qua mã của bạn nếu người dùng đã từng thay đổi các hộp kiểm, ngay cả đối với các meta_box khác hoặc trước khi mã của bạn nằm trong WP. Có vẻ như sự lựa chọn tôn trọng chỉ hữu ích nếu tất cả người dùng của bạn là người mới. Giải pháp tốt nhất sẽ là đặt tùy chọn người dùng tùy chỉnh để xác định xem các mặc định meta_box cụ thể của bạn có bị người dùng thay đổi hay không và tôn trọng điều đó. Không, tôi chưa viết mã đó! Nên dễ dàng ... :)
Ba giải pháp được đăng:
1.hidden_meta_boxes
Giải pháp của WraithKenny là giải pháp ghi đè user_option. Lưu ý rằng nó bao gồm tất cả các loại bài đăng ('bài đăng', 'trang', 'liên kết', 'tệp đính kèm' và bất kỳ loại bài đăng tùy chỉnh nào). Điều đó tốt trừ khi bạn muốn nó được cụ thể. Bạn đã chỉ định post_type trong các add_meta_box()
cuộc gọi của bạn . Bạn có thể cố gắng khớp với những cái đó hoặc chỉ chắp cánh vì những cái không khớp sẽ bị bỏ qua. Nếu bạn muốn biết post_type trong bộ lọc, bạn có thể sử dụng screen
tham số phụ :
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. Như Rarst nói, default_hidden_meta_boxes
tôn trọng user_option. Như với hidden_meta_boxes
, bạn có thể sử dụng tham số màn hình $ để phân biệt post_types.
3. Hàm set_user_metaboxes () của Drebabels cũng tôn trọng user_option. Lưu ý rằng nó được mã hóa cứng cho màn hình chỉnh sửa 'bài'. Để xử lý màn hình chỉnh sửa 'trang' và các post_types khác, hãy bọc mã trong vòng lặp này:
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 );
}
}
}
Vâng, get_user_meta
nên được get_user_option
. Đối với một trang web, điều đó không thành vấn đề và ngay cả đối với nhiều trang web, điều đó có thể không xảy ra. Xem wp-admin / gồm / ajax-Action.php để biết tại sao: update_user_option
có tham số toàn cầu 'true'.