Añadir columnas personalizadas en el listado del admin
El listado de posts en el admin (la tabla con todas las entradas) puede ampliarse con columnas personalizadas para mostrar metadatos importantes a golpe de vista. Esto es especialmente útil para CPTs con campos propios — así evitas tener que abrir cada entrada para consultar esa información.
Casos de uso: mostrar la URL del proyecto en el listado de portfolios, ver el precio en un listado de productos, mostrar el estado de un pedido hecho a medida, ver la categoría o versión de un plugin propio.
<?php
add_filter( 'manage_proyecto_posts_columns', 'mi_columna_header' );
function mi_columna_header( $columns ) {
$columns['url_proyecto'] = 'URL del Proyecto';
return $columns;
}
add_action( 'manage_proyecto_posts_custom_column', 'mi_columna_contenido', 10, 2 );
function mi_columna_contenido( $column, $post_id ) {
if ( 'url_proyecto' === $column ) {
$url = get_post_meta( $post_id, '_mi_campo', true );
if ( $url ) {
echo '' . esc_html( $url ) . '';
} else {
echo '—';
}
}
}
¿Qué hace cada parte?
- manage_{post_type}_posts_columns: filter que recibe el array de columnas actuales y permite añadir, eliminar o reordenar. La clave del array es el ID interno de la columna.
- $columns[‘url_proyecto’]: añade la nueva columna al final. Para reordenar, reconstruye el array completo en el orden deseado.
- manage_{post_type}_posts_custom_column: action que se dispara para cada columna personalizada de cada fila. Recibe el ID de la columna y el ID del post.
- Comprobación del $column: necesaria porque el action se dispara para todas las columnas personalizadas. Si tienes varias, usa
if/elseifoswitch. - get_post_meta(): recupera el metadato guardado para ese post. El tercer parámetro
truedevuelve un string simple. - esc_url() y esc_html(): siempre escapar antes de imprimir en el admin — aunque el dato venga de la base de datos propia.
