У мене є кодові коментарі щодо трьох уже опублікованих рішень, але також загальний коментар
Вони представляють неоптимальний вибір: або скасуйте прапорець Налаштування екрана користувача; або поважайте його, але ігноруйте ваш код, якщо користувач коли-небудь міняв прапорці, навіть для інших мета-ящиків або до того, як ваш код був у WP. Здається, що шанобливий вибір корисний лише в тому випадку, якщо всі ваші користувачі новачки. Найкращим рішенням буде встановити спеціальний параметр користувача, щоб визначити, чи змінили ваші конкретні параметри meta_box користувачем, і дотримуйтесь цього. Ні, я цього коду не написав! Має бути легко ... :)
Три розміщені рішення:
1. Рішення WraithKenny - це hidden_meta_boxes
рішення, яке перекриває користувацькі варіанти. Зверніть увагу, він охоплює всі типи публікацій ("повідомлення", "сторінка", "посилання", "вкладення" та будь-які спеціальні типи публікацій). Це добре, якщо ви не хочете, щоб воно було конкретним. Ви вказали пост_типи у своїх add_meta_box()
дзвінках. Ви можете спробувати співставити їх або просто крилати, оскільки ті, що не відповідають, будуть ігноровані. Якщо ви хочете знати тип_файли у фільтрі, ви можете використовувати додатковий 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. Як каже Рарст, default_hidden_meta_boxes
поважає користувальницькі варіанти. Як і у випадку hidden_meta_boxes
, ви можете використовувати параметр $ screen для розмежування пост_типів.
3. Функція set_user_metaboxes () Drebabels також поважає параметр user_option. Зауважте, що це на екрані редагування "пост" жорстко закодовано. Щоб обробити екран редагування сторінки на сторінці та інші постіти, введіть код у цю петлю:
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'.