Ich habe Codekommentare zu drei bereits veröffentlichten Lösungen, aber auch einen allgemeinen Kommentar
Sie bieten eine suboptimale Auswahl: entweder die Auswahl der Bildschirmoptionen des Benutzers überschreiben; oder respektiere es, aber lasse deinen Code ignorieren, wenn der Benutzer jemals die Kontrollkästchen geändert hat, auch für andere meta_boxes oder bevor dein Code in WP war. Scheint, die respektvolle Wahl ist nur sinnvoll, wenn alle Ihre Benutzer neu sind. Die beste Lösung wäre, eine benutzerdefinierte Benutzeroption festzulegen, um festzustellen, ob Ihre spezifischen meta_box-Standardeinstellungen vom Benutzer geändert wurden, und dies zu respektieren. Nein, ich habe diesen Code nicht geschrieben! Sollte einfach sein ... :)
Die drei Lösungen veröffentlicht:
1. Die hidden_meta_boxes
Lösung von WraithKenny überschreibt die user_option. Beachten Sie, dass alle Beitragstypen ("Beitrag", "Seite", "Link", "Anhang" und alle benutzerdefinierten Beitragstypen) abgedeckt werden. Das ist in Ordnung, es sei denn, Sie möchten, dass es spezifisch ist. Sie haben den post_type in Ihren add_meta_box()
Aufrufen angegeben. Sie können versuchen, diese zu finden, oder es einfach nur versuchen, da diejenigen, die nicht passen, ignoriert werden. Wenn Sie den post_type im Filter wissen möchten, können Sie den zusätzlichen screen
Parameter verwenden:
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. Respektiert, wie Rarst sagt, default_hidden_meta_boxes
die user_option. Wie bei hidden_meta_boxes
können Sie den Parameter $ screen verwenden, um post_types zu unterscheiden.
3. Die set_user_metaboxes () -Funktion von Drebabels berücksichtigt auch die user_option. Beachten Sie, dass es für den Bearbeitungsbildschirm "Post" fest programmiert ist. Um den Bearbeitungsbildschirm 'Seite' und andere post_types zu handhaben, schließen Sie den Code in diese Schleife ein:
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 );
}
}
}
Ja, get_user_meta
sollte sein get_user_option
. Für einzelne Standorte spielt es keine Rolle, und selbst für mehrere Standorte ist dies wahrscheinlich nicht der Fall. Siehe wp-admin / includes / ajax-actions.php für den Grund: Hat update_user_option
den globalen Parameter 'true'.