Establecer opciones de pantalla de administración y orden de metaboxes predeterminados

6 sept 2010, 02:44:19
Vistas: 21.5K
Votos: 31

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?

1
Comentarios

Actualización 2014: Para aquellos que solo necesitan reordenar las meta cajas, consulta la respuesta de Nabil más abajo.

rinogo rinogo
11 ago 2017 00:10:34
Todas las respuestas a la pregunta 3
13
25

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;
    
6 sept 2010 11:02:57
Comentarios

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.

NetConstructor.com NetConstructor.com
6 sept 2010 11:13:16

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

Tom J Nowell Tom J Nowell
6 sept 2010 11:18:16

He modificado mi respuesta. Avísame si necesitas más detalles.

sorich87 sorich87
6 sept 2010 11:41:46

@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.

NetConstructor.com NetConstructor.com
7 sept 2010 07:41:29

He modificado mi respuesta.

sorich87 sorich87
7 sept 2010 10:17:53

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?

NetConstructor.com NetConstructor.com
7 sept 2010 14:26:59

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 sorich87
7 sept 2010 15:59:46

@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.

NetConstructor.com NetConstructor.com
9 sept 2010 01:49:05

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

NetConstructor.com NetConstructor.com
9 sept 2010 01:49:30

@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

NetConstructor.com NetConstructor.com
10 sept 2010 09:48:21

He añadido nuevos ejemplos.

sorich87 sorich87
12 sept 2010 15:24:12

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.

NetConstructor.com NetConstructor.com
12 sept 2010 19:38:14

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

rinogo rinogo
11 ago 2017 00:11:43
Mostrar los 8 comentarios restantes
1
12

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 usar side y advanced
  • 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.
29 ago 2014 11:32:14
Comentarios

Me sentí un poco confundido con la nomenclatura {CPT}; para aclarar, si tienes un tipo de publicación llamado event, necesitarías agregar un filtro para get_user_option_meta-box-order_event.

rinogo rinogo
11 ago 2017 00:13:32
1

¿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/

22 dic 2023 21:00:17
Comentarios

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

vancoder vancoder
22 dic 2023 22:28:03