Establecer opciones de pantalla de administrador predeterminadas y orden de Metabox

28

Estoy buscando desesperadamente alguna forma (de cualquier manera) de establecer las "opciones de pantalla" predeterminadas y el orden de metabox a través del archivo functions.php. ¿Alguien tiene alguna ayuda que puedan proporcionar aquí?

NetConstructor.com
fuente
Actualización 2014: para aquellos que solo necesitan reordenar meta cuadros, vea la respuesta de Nabil a continuación .
rinogo

Respuestas:

23

Establecer el orden de los meta cuadros en las páginas de edición posterior

Deberá eliminar los meta cuadros y agregarlos nuevamente en el orden que desee.

Para deshabilitar los meta cuadros: (personalícelos según sus necesidades, mire el id del metabox en el código html para saber qué nombre debe 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 eliminarlos, puede usar la función add_meta_box para agregarlos en nuevas posiciones: http://codex.wordpress.org/Function_Reference/add_meta_box . El orden de los meta cuadros depende del orden en que llame a la función add_meta_box. Por ejemplo: con el siguiente fragmento de código, el cuadro meta de comentarios estará antes del cuadro meta 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', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

Es posible que desee ver el archivo wp-admin / edit-form-advanced.php

Establecer qué columnas aparecen en la página de la lista de publicaciones

Debe utilizar el filtro de gestión _ {$ post_type} _posts_columns. Por 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' );

Establecer los resultados predeterminados que se mostrarán en la página de lista de publicaciones

Use 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 orientar un tipo de publicación específico:

  • use, add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );por ejemplo, add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );para publicaciones, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );para páginas.

  • o use una condición dentro de su función. p.ej:

    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;
    
sorich87
fuente
Lo siento, tal vez no me expliqué correctamente. Me refería a los meta cuadros en la página de edición de publicaciones en el área de administración, así como a configurar el número predeterminado de publicaciones para mostrar en la página de lista de publicaciones de administración.
NetConstructor.com
1
así que técnicamente esto no es una pregunta, ¿son realmente 2 preguntas?
Tom J Nowell
Modifiqué mi respuesta. Déjeme saber si usted necesita más detalles.
sorich87
@ sorich87 gracias por su respuesta, sin embargo, por lo que recuerdo, no había forma de especificar el orden exacto de cada metabox o estaba allí? Quizás debería ser un poco más específico. Básicamente, estoy buscando varios fragmentos de código que me permitan preestablecer varias opciones para todos los usuarios sin tener que iniciar sesión en cada cuenta. Ejemplos: establecer el orden exacto de los meta cuadros en las páginas de edición de publicaciones, configurar qué columnas aparecen en la página de la lista de publicaciones, configurar los resultados predeterminados que se mostrarán en la página de la lista de publicaciones ... cosas así. Gracias por adelantado.
NetConstructor.com
Modifiqué mi respuesta.
sorich87
9

En el siguiente ejemplo, reemplazar {CPT}con el nombre del tipo de correos, como post, page, book, event, imaginary, foobar... Así que si usted tiene un tipo de correos nombrada event, que tendría que añadir 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  Arrange here as you desire
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

Notas:

  • Junto con normal, también puede tener sideyadvanced
  • Los valores son identificadores div separados por comas, puede obtenerlos al ver el código fuente de la página o puede adivinar
  • Cualquier metabox que exista no está incluido en su pedido personalizado se agregará automáticamente al final de su lista.
Nabil Kadimi
fuente
1
Estaba algo confundido por la {CPT}nomenclatura; para aclarar, si tiene un tipo de publicación llamado event, necesitará agregar un filtro para get_user_option_meta-box-order_event.
rinogo