Tengo comentarios de código sobre tres soluciones ya publicadas, pero también un comentario general
Presentan una opción subóptima: anular la opción de casilla de verificación Opciones de pantalla del usuario; o respetarlo pero ignorar su código si el usuario alguna vez ha cambiado las casillas de verificación, incluso para otros meta_boxes, o antes de que su código estuviera en WP. Parece que la opción respetuosa solo es útil si todos sus usuarios son nuevos. La mejor solución sería establecer una opción de usuario personalizada para determinar si el usuario ha cambiado sus valores predeterminados específicos de meta_box, y respetar eso. ¡No, no he escrito ese código! Debería ser fácil ... :)
Las tres soluciones publicadas:
1. La hidden_meta_boxes
solución de WraithKenny es la que anula la opción user_option. Tenga en cuenta que cubre todos los tipos de publicación ('publicación', 'página', 'enlace', 'adjunto' y cualquier tipo de publicación personalizada). Eso está bien a menos que quieras que sea específico. Especificó los post_type en sus add_meta_box()
llamadas. Puede intentar hacer coincidir esos, o simplemente aletearlo, ya que los que no coincidan serán ignorados. Si desea conocer el post_type en el filtro, puede usar el screen
parámetro adicional :
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. Como dice Rarst, default_hidden_meta_boxes
respeta la opción de usuario. Al igual que con hidden_meta_boxes
, puede usar el parámetro $ screen para distinguir post_types.
3. La función set_user_metaboxes () de Drebabels también respeta la opción de usuario. Tenga en cuenta que está codificado para la pantalla de edición de 'publicación'. Para manejar la pantalla de edición de 'página' y otros post_types, envuelva el código en este bucle:
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 );
}
}
}
Si, get_user_meta
deberia ser get_user_option
. Para un solo sitio no importa, e incluso para un sitio múltiple probablemente no. Vea wp-admin / includes / ajax-actions.php para saber por qué: update_user_option
tiene el parámetro global 'verdadero'.