Programando con Rupert

Cuando la programación es una forma vida...

WordPress WP-Admin: columnas personalizadas para Custom Post Type

En un par de proyectos me he encontrado con la necesidad de personalizar el listado que WordPress ofrece para gestionar los Custom Post Types. En artículos anteriores vimos cómo crear un Custom Post Type y cómo añadirle campos personalizados.

En este artículo vamos a ver cómo podemos personalizar el listado de administración que nos ofrece WordPress.

Preparación del ejemplo

Voy a utilizar como base el plugin que creé en este artículo. Por recordar, teníamos un custom post type  Gatos que permitía gestionar un listado de Gatos. Posteriormente, en este otro artículo, le añadí los siguientes campos personalizados (meta-fields): Edad, raza, sexo y color. Sin embargo al acceder al listado aparecía lo siguiente:

Lo que vamos a hacer es añadir al listado las columnas de: Edad, Sexo y Raza. Sin embargo, la columna de Edad no mostrará el número, si no que, si el gato tiene menos de 4 años imprimirá “Cachorro“, si no imprimirá “Adulto

Añadir Cabeceras de Columnas

Antes de “rellenar” las filas del listado, se han de definir las columnas. Existen algunos nombres de columna que cogerán su valor automáticamente (title, author, date).

Así que debemos una función al filtro manage_edit-{post_type}_columns, devolviendo un array con las columnas con las que queremos trabajar.

Con la función columnas_post_type_gatos le indicamos que al entrar en la administración del post typegato” muestre las columnas que indicamos en el array. De esas columnas sólo Edad, Sexo y Raza son personalizadas. De tal manera, que estableciendo estas columnas, el listado ya nos aparecerá de la siguiente manera:

Contenido de Columnas Personalizadas

Las columnas integradas (title, author, date…) se rellenan automáticamente. Sin embargo, lo que necesitamos es imprimir un valor en nuestras columnas personalizadas.

Para ello debemos añadir una función a la acción manage_{post_type}_posts_custom_column, pasándole por parámetro la columna que se está renderizando y el id del post. Por lo tanto, si no nos interesa cambiar lo que imprimen las columnas integradas, sólo tendremos que decidir qué imprimir en nuestras columnas personalizadas.

Con este código le decimos que, por cada registro, cuando tenga que renderizar Sexo y Raza, los recupere y los imprima. Con edad, sin embargo, imprimiremos un texto u otro según el valor numérico del campo. Nuestro listado quedaría así:

Ordenar por Columna Personalizada

Para completar nuestra personalización del listado de administración, vamos a añadir a la columna Edad la posibilidad de ordenar el listado por su valor.

Para ello lo primero que debemos hacer es indicar a WordPress qué columnas tendrán capacidad de ordenación. Se ha de añadir una función al filtro manage_edit-{post_type}_sortable_columns, que recibe como parámetro las columnas previamente definidas. Se ha de asignar un “código de ordenación” a cada columna por la que queramos ordenar.

Una vez establecidas las columnas que tendrán ordenación, se ha de añadir el filtro de ordenación a la consulta principal. Para ello se añade una función al filtro ‘request‘, comprobando que se trate del post_type correcto.

Con esto ya hemos visto cómo personalizar nuestro listado de custom post type. Hemos visto cómo añadir columnas propias y cómo ordenar por ellas.

¡Hasta la próxima!

Rupert.

1 Comment

  1. Hola, antes de nada decirte que me parece buenísima tu aportación y agradecerte tu ayuda, pero tengo una duda.
    ¿Dónde escribo este código?

Deja un comentario

Your email address will not be published.

*

 

© 2019 Programando con Rupert

Sé cambiar el Footer, pero me apetece decir que este tema es de Anders NorenParriba' ↑