Establecer opciones de pantalla de administración y orden de metaboxes predeterminados
Estoy buscando desesperadamente alguna manera (cualquier manera) de establecer las "opciones de pantalla" predeterminadas y el orden de los metaboxes a través del archivo functions.php. ¿Alguien puede ayudarme con esto?

Configurar el orden de las meta cajas en las páginas de edición de entradas
Necesitarás eliminar las meta cajas y volver a agregarlas en el orden que desees.
Para desactivar meta cajas: (personaliza según tus necesidades, revisa el id de la metabox en el código html para saber qué nombre debes usar como primer parámetro de las funciones)
function my_remove_meta_boxes() {
remove_meta_box('postcustom', 'post', 'core');
remove_meta_box('commentsdiv', 'post', 'core');
...
}
add_action( 'admin_menu', 'my_remove_meta_boxes' );
Después de eliminarlas, puedes usar la función add_meta_box para agregarlas en nuevas posiciones: http://codex.wordpress.org/Function_Reference/add_meta_box. El orden de las meta cajas depende del orden en que llames a la función add_meta_box. Ejemplo: con el siguiente fragmento de código, la meta caja de comentarios aparecerá antes que la de campos personalizados.
function my_add_meta_boxes( $post_type, $post ) {
if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
add_meta_box('commentsdiv', __('Comentarios'), 'post_comment_meta_box', $post_type, 'normal', 'core');
if ( post_type_supports($post_type, 'custom-fields') )
add_meta_box('postcustom', __('Campos Personalizados'), 'post_custom_meta_box', $post_type, 'normal', 'core');
...
}
add_action( 'add_meta_boxes', 'my_add_meta_boxes' );
Puedes revisar el archivo wp-admin/edit-form-advanced.php
Configurar qué columnas de título aparecen en la página de lista de entradas
Debes usar el filtro manage_{$post_type}_posts_columns. Ejemplo: el siguiente fragmento eliminará la columna de comentarios.
function my_remove_columns( $posts_columns ) {
unset( $posts_columns['comments'] );
return $posts_columns;
}
add_filter( 'manage_post_posts_columns', 'my_remove_columns' );
Configurar los resultados predeterminados mostrados en la página de lista de entradas
Usa los filtros 'edit_{$post_type}_per_page' y 'edit_posts_per_page'.
function my_edit_post_per_page( $per_page, $post_type ) {
$edit_per_page = 'edit_' . $post_type . '_per_page';
$per_page = (int) get_user_option( $edit_per_page );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 1;
return $per_page;
}
add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );
Para apuntar a un tipo de entrada específico:
usa
add_filter( 'edit_{tipo de entrada}_per_page', 'my_edit_post_per_page' );
ejemplo:add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );
para entradas,add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );
para páginas.o usa una condición dentro de tu función. Ejemplo:
function my_edit_post_per_page( $per_page, $post_type ) {
if( $post_type == 'post' ) { $edit_per_page = 'edit_' . $post_type . '_per_page'; $per_page = (int) get_user_option( $edit_per_page ); if ( empty( $per_page ) || $per_page < 1 ) $per_page = 1; } return $per_page;

Disculpa, quizás no me expliqué correctamente. Me refería a los meta boxes en la página de edición de entradas en el área de administración, así como a configurar el número predeterminado de entradas para mostrar en la página de lista de entradas del administrador.

¿así que técnicamente esto no es una pregunta, sino realmente 2 preguntas?

@sorich87 gracias por tu respuesta, pero por lo que recuerdo no había forma de especificar el orden exacto de cada metabox ¿o sí? Quizás debería ser un poco más específico. Básicamente estoy buscando varios fragmentos de código que me permitan preconfigurar varias opciones para todos los usuarios sin tener que iniciar sesión en cada cuenta. Ejemplos: establecer el orden exacto de los metaboxes en las páginas de edición de entradas, configurar qué columnas de título aparecen en la página de lista de entradas, definir los resultados predeterminados que se muestran en la página de lista de entradas... cosas así. Gracias de antemano.

Gracias por tu respuesta. Acabo de intentar utilizar el código que proporcionaste para establecer el número predeterminado de entradas en la lista de entradas del administrador, pero parece que no funcionó. ¿Hay que hacer algo específico si se intenta cambiar el número predeterminado de resultados para un tipo de entrada específico? De ser así, ¿existe alguna forma de configurarlo para todas las páginas de lista de entradas?

Lo siento, hubo un error en el código. Lo modifiqué. Notarás el parámetro $post_type que te permite apuntar a un tipo de publicación específico.

@sorich87 tu código funciona, pero ahora si un usuario cambia las opciones de pantalla para mostrar un valor diferente, la página solo muestra el valor ingresado a través del archivo de funciones. Lo que estaba buscando es una manera de establecer las opciones predeterminadas, pero si el usuario cambia manualmente las opciones de pantalla, mostraría la opción establecida por el usuario.

@sorich87 además... ¿cómo configuraría las opciones solo para un tipo de publicación específico sin afectar los demás?

@sorich87 ¿podrías proporcionar un ejemplo de cómo establecer los valores solo para dos tipos de entradas personalizadas? Tal vez estoy haciendo algo mal

Un ejemplo más, por favor. Digamos que tienes 5 tipos de entradas personalizadas. Ahora, supongamos que para post_type1 quieres establecer el valor a 5 entradas, para post_type2 establecer un valor de 2 entradas y quieres que cualquier otro tenga un valor predeterminado de 10. ¿Podrías mostrar cómo se vería este código? Además, ¿existe una opción para establecer estos como valores predeterminados a menos que el usuario establezca el valor manualmente? Si es así, ¿cómo podríamos forzar un valor para que el usuario no pueda cambiarlo? Finalmente, cuando seleccionas "opciones de pantalla", ese valor no se actualiza/refleja el valor que realmente se está mostrando.

Para cualquiera que esté intentando reordenar meta boxes, esta respuesta ya no es el mejor enfoque. Consulta la respuesta de Nabil.

En el siguiente ejemplo, reemplaza {CPT}
con el nombre del tipo de contenido, como post
, page
, book
, event
, imaginary
, foobar
... Por ejemplo, si tienes un tipo de contenido llamado event
, necesitarías agregar un filtro para get_user_option_meta-box-order_event
.
add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
return array(
'normal' => join(
",",
array( // vvv Organiza aquí como prefieras
'customdiv-{CPT}',
'authordiv',
'slugdiv',
)
),
);
}
Notas:
- Junto con
normal
, también puedes usarside
yadvanced
- Los valores son IDs de div separados por comas, puedes obtenerlos viendo el código fuente de la página o intentar adivinarlos
- Cualquier metabox que exista pero no esté incluida en tu orden personalizado se agregará automáticamente al final de tu lista.

¿Existe algún plugin que combine estos fragmentos de código para que un administrador pueda forzar las posiciones de las meta cajas para todos los usuarios sin necesidad de programar?
Buena o mala práctica, al realizar soporte técnico con usuarios menos avanzados, ayuda mucho saber qué están viendo y dónde está en su pantalla. Forzar que las meta cajas estén en la misma posición para todos los usuarios puede ser beneficioso con ciertos perfiles de usuarios.
Idealmente, los usuarios con rol de administrador aún podrían reposicionar sus meta cajas, pero suscriptores y colaboradores podrían beneficiarse de ver todas las meta cajas en las mismas posiciones.
¿Existe algún plugin así? No logro encontrar uno.
Este plugin podría ser una opción ya que simplemente evita que los usuarios muevan las meta cajas, pero no ha sido actualizado en una década: https://wordpress.org/plugins/unsortable-meta-box/

Si tienes una nueva pregunta, por favor hazla clickeando el botón Hacer Pregunta. Incluye un enlace a esta pregunta si ayuda a proporcionar contexto. - Desde la Revisión
