*

Personalización de columnas de administración en WordPress

¿Cómo puedes obtener más información sobre el contenido de un vistazo? El área de administración de WordPress no te muestra mucho sobre las publicaciones. Aquí mostraré algunas soluciones personalizadas simples y un plugin.

Administrar columnas con plugin

Antes de ver la parte de código podemos ver el método mucho más simple: usar el complemento Admin Columns . Sin tocar ningún código y usando una interfaz simple de arrastrar y soltar, puedes administrar columnas con solo unos pocos clics.

Administrar Columnas Con Código

WordPress ofrece la API de columnas. También está disponible para usuarios y taxonomías, pero nos centraremos en listado de publicaciones.

El cambio de las columnas existentes se puede lograr usando dos ganchos de WordPress:, manage_[post_type]posts_columns que le permite eliminar, reordenar y agregar columnas, y manage_[post_type]_posts_custom_column.

En lugar de [post_type], añade el tipo de publicación que deseas modificar. Para las páginas, por ejemplo, usaría manage_page_posts_columns y manage_page_posts_custom_column, respectivamente.

AGREGAR, ELIMINAR Y REORDENAR COLUMNAS

El primer gancho para administrar columnas ( manage_posts_columns) es un filtro que maneja la matriz de columnas. La matriz estándar de filtros para la descripción general de las publicaciones es la siguiente:

[
  [cb]          => <input type="checkbox" />
  [title]       => Title
  [author]      => Author
  [categories]  => Categories
  [tags]        => Tags
  [comments]    => [..] Comments [..]
  [date]        => Date
]

Vamos a eliminar algunas columnas de esta lista y agregar otras. Para hacerlo, agregaremos una llamada al filtro manage_posts_columns y añadimos nuestras columnas personalizadas a la matriz de columnas. Ten en cuenta que estamos usando el gancho manage_books_posts_columns.

Aquí books es el nombre de nuestro tipo de publicación, pasado como primer argumento a la register_post_type que es la función para registrar tipos de publicación personalizados. Lo usamos en lugar de [post_type] en el filtro manage_[post_type]_posts_columns.

add_filter( 'manage_books_posts_columns', 'yanezpro_filter_posts_columns' );
function yanezpro_filter_posts_columns( $columns ) {
  $columns['image'] = __( 'Image' );
  $columns['price'] = __( 'Price', 'yanezpro' );
  $columns['area'] = __( 'Area', 'yanezpro' );
  return $columns;
}

La primera línea agrega nuestra función yanezpro_filter_posts_columns como devolución de llamada al filtro que maneja las columnas que se muestran. La segunda línea define la función de devolución de llamada.

Las líneas 2 a 4 agregan nuestras columnas personalizadas a la lista de columnas. Finalmente, la línea 6 devuelve la lista de columnas resultante.

La __función se utiliza para traducir la cadena al idioma preferido del usuario. Ten en cuenta que tanto para «Precio» como para «Área», usamos yanezpro como dominio de texto, que WordPress usa para determinar qué fuente debe usarse para traducir la cadena.

Podemos omitir esto para traducir «Imagen» porque WordPress ya incluye traducciones de esta palabra. Puedes leer más sobre dominios de texto en el Codex de WordPress.

ELIMINAR LAS COLUMNAS «AUTOR», «FECHA» Y «COMENTARIOS»

Modificaremos nuestra función para lograrlo. Ten en cuenta que no eliminamos explícitamente las tres columnas mencionadas anteriormente, sino que simplemente construimos una nueva matriz completa de columnas precisamente cuando las necesitamos.

add_filter( 'manage_books_posts_columns', 'yanezpro_books_columns' );
function yanezpro_books_columns( $columns ) {  
    $columns = array(
      'cb' => $columns['cb'],
      'image' => __( 'Image' ),
      'title' => __( 'Title' ),
      'price' => __( 'Price', 'yanezpro' ),
      'area' => __( 'Area', 'yanezpro' ),
    ); 
  return $columns;
}

AÑADIENDO COLUMNAS

El siguiente paso es llenar nuestras columnas. Nuevamente, WordPress proporciona un gancho bastante simple para hacerlo: manage_[post_type]_posts_custom_column. A diferencia del gancho discutido anteriormente, este no es un filtro, por lo que solo nos permite agregar contenido, no cambiarlo. Por lo tanto, vamos al mostrar contenido de la columna que queremos mostrar.

Agregando columnas

function add_book_columns($columns) {
    unset($columns['author']);
    return array_merge($columns, 
              array('publisher' => __('Publisher'),
                    'book_author' =>__( 'Book Author')));
}
add_filter('manage_book_posts_columns' , 'add_book_columns');

Ordenando columnas

function wpdocs_item_columns( $columns ) {
    $custom_col_order = array(
        'cb' => $columns['cb'],
        'title' => $columns['title'],
        'rating' => __( 'Ratings', 'yanezpro' ),
        'date' => $columns['date']
    );
    return $custom_col_order;
}
add_filter( 'manage_item_posts_columns', 'wpdocs_item_columns' );

Simplemente usa la matriz $custom_col_order para reordenar las columnas en { post_type}.
NOTA: en el ejemplo anterior, el item es el tipo de publicación personalizada

Supón que ahora tienes un tipo de publicación personalizada llamada «libro» y desea agregar el editor y el autor del libro en la página de edición, pero eliminar el autor de la publicación:

add_filter( 'manage_book_posts_columns', 'set_custom_edit_book_columns' );
add_action( 'manage_book_posts_custom_column' , 'custom_book_column', 10, 2 );
 
function set_custom_edit_book_columns($columns) {
    unset( $columns['author'] );
    $columns['book_author'] = __( 'Author', 'your_text_domain' );
    $columns['publisher'] = __( 'Publisher', 'your_text_domain' );
 
    return $columns;
}
 
function custom_book_column( $column, $post_id ) {
    switch ( $column ) {
 
        case 'book_author' :
            $terms = get_the_term_list( $post_id , 'book_author' , '' , ',' , '' );
            if ( is_string( $terms ) )
                echo $terms;
            else
                _e( 'Unable to get author(s)', 'your_text_domain' );
            break;
 
        case 'publisher' :
            echo get_post_meta( $post_id , 'publisher' , true ); 
            break;
    }
}

Ejemplo para agregar una columna de imagen destacada personalizada en la publicación

function wpdocs_posts_thumb_columns( $columns ) {
    $post_new_columns = array(
       'post_thumbs' => esc_html__( 'Thumbs', 'text_domain' ),
    );
    return array_merge( $columns, $post_new_columns );
}
add_filter( 'manage_posts_columns', 'wpdocs_posts_thumb_columns', 5 );
 
function wpdocs_posts_custom_columns( $column_name, $id ) {
    if ( 'post_thumbs' === $column_name ) {
        the_post_thumbnail( 'thumbnail' );
    }
}
add_action( 'manage_posts_custom_column', 'wpdocs_posts_custom_columns', 5, 2 );

Para agregar una columna que muestre si una publicación es sticky o no:

/* Display custom column stickiness */
function display_posts_stickiness( $column, $post_id ) {
    if ($column == 'sticky'){
        echo '<input type="checkbox" disabled', ( is_sticky( $post_id ) ? ' checked' : ''), '/>';
    }
}
add_action( 'manage_posts_custom_column' , 'display_posts_stickiness', 10, 2 );
 
/* Add custom column to post list */
function add_sticky_column( $columns ) {
    return array_merge( $columns, 
        array( 'sticky' => __( 'Sticky', 'your_text_domain' ) ) );
}
add_filter( 'manage_posts_columns' , 'add_sticky_column' );

En este último ejemplo elimina la columna de autor y agrega una columna de taxonomía y metadatos:

// Add the custom columns to the book post type:
add_filter( 'manage_book_posts_columns', 'set_custom_edit_book_columns' );
function set_custom_edit_book_columns($columns) {
    unset( $columns['author'] );
    $columns['book_author'] = __( 'Author', 'your_text_domain' );
    $columns['publisher'] = __( 'Publisher', 'your_text_domain' );

    return $columns;
}

// Add the data to the custom columns for the book post type:
add_action( 'manage_book_posts_custom_column' , 'custom_book_column', 10, 2 );
function custom_book_column( $column, $post_id ) {
    switch ( $column ) {

        case 'book_author' :
            $terms = get_the_term_list( $post_id , 'book_author' , '' , ',' , '' );
            if ( is_string( $terms ) )
                echo $terms;
            else
                _e( 'Unable to get author(s)', 'your_text_domain' );
            break;

        case 'publisher' :
            echo get_post_meta( $post_id , 'publisher' , true ); 
            break;

    }
}

Deja un comentario