Si accedemos al listado de entradas o de un custom post de WordPress, veremos que por defecto aparecen una serie de columnas con información útil sobre el contenido:

En nuestro caso y continuando con la serie de ejercicios anteriores en la que creamos un custom post para guardar vehículos, las columnas que aparecen por defecto son el título, el autor y las taxonomías que creamos: Tipo de Vehículo y Extras).

Estas taxonomías aparecen como columnas porque al definirlas especificamos el argumento:

'show_admin_column' => true

Lo que hace que lo muestre en la columna del administrador. Si no queremos que aparezca solo tenemos que cambiar el valor a «false».

En este artículo veremos cómo añadir nuestras propias columnas para mostrar por ejemplo, el precio y la matrícula que tenemos guardados en campos personalizados.

Para ello vamos a hacer uso del filtro ‘manage_edit-nombre-del-custom-post_columns’ y el action ‘manage_nombre-del-custom-post_posts_custom_column’.

1. Especificamos las columnas con el filtro manage_edit-xxxx_columns

function columnas_post_type_vehiculos($columnas){
    $columnas = array(
        'cb' => '<input type="checkbox" />',
        'title' => 'Título',
        'matricula' => 'Matrícula',
        'precio' => 'Precio',   
    );
    return $columnas;
}
add_filter('manage_edit-vehiculos_columns', 'columnas_post_type_vehiculos') ;

Analizando el código, estamos haciendo referencia a las columnas del tipo de post «vehiculos».

Hemos especificado que aparezca:

  1. El checkbox para poder seleccionar el post y realizar acciones en lote con él.
  2. El título del post.
  3. La matricula.
  4. El precio.

Si nos fijamos en los elementos matrícula y precio, el primer valor es la variable que tenemos que especificar sin caracteres especiales, el segundo valor es la etiqueta o nombre que aparecerá en la columna.

Ahora tenemos que especificar de donde tomar los datos para cada columna.

2. Tomar los datos para cada columna

function filas_post_type_vehiculos($columna, $post_id){
    global $post;

    switch($columna){
        case 'matricula':
            $matricula = get_post_meta($post_id, 'matricula', true);
            the_field('matricula');
            break;          
        case 'precio':
            $precio = get_post_meta($post_id, 'precio', true);
            the_field('precio');
            break;     
        
        default :
            break;
    }
}
add_action('manage_vehiculos_posts_custom_column', 'filas_post_type_vehiculos', 2, 10);

Recorremos con un switch columna tras columna y obtenemos su valor con la función the_field() de advanced custom field que es donde tenemos el valor guardado.

En este ejemplo solo aparecerán las columnas, título, matrícula y precio:

Si queremos que también aparezcan las demás columnas (autor, tipo de vehículo y extras, tenemos que definirlas:

function columnas_post_type_vehiculos($columnas){
    $columnas = array(
        'cb' => '<input type="checkbox" />',
        'title' => 'Título',
        'matricula' => 'Matrícula',
        'precio' => 'Precio',  
        'tipo_vehiculo' => 'Tipo de Vehículo',
        'extras' => 'Extras',
        'author' => 'Autor',
    );
    return $columnas;
}
add_filter('manage_edit-vehiculos_columns', 'columnas_post_type_vehiculos') ;
function filas_post_type_vehiculos($columna, $post_id){
    global $post;

    switch($columna){
        case 'matricula':
            $matricula = get_post_meta($post_id, 'matricula', true);
            the_field('matricula');
            break;  
        case 'precio':
            $precio = get_post_meta($post_id, 'precio', true);
            the_field('precio');
            break;
        case 'tipo_vehiculo':
	    //consultar qué taxonomías hay marcadas
	    $terms = get_the_terms( $post->ID , 'tipo-vehiculo' );
	    if($terms != null){
		foreach( $terms as $term ) {
		    echo $term->name . " ";
		    unset($term);
		}
            }
            break;
        case 'extras':
	    //consultar extras
	    $terms = get_the_terms( $post->ID , 'extras' );
	    if($terms != null){
	        foreach( $terms as $term ) {
		    echo $term->name . " ";
		    unset($term);
		}
	    }
            break;

        default :
            break;
    }
}
add_action('manage_vehiculos_posts_custom_column', 'filas_post_type_vehiculos', 2, 10);

Consideraciones

Hay que tener precaución en cómo llamar a los filtros y acciones de forma que no cometamos errores.

En el add_filter y add_action, modifica únicamente el nombre de tu custom post:

manage_vehiculos_posts_custom_column
manage_animales_posts_custom_column
manage_casas_posts_custom_column

Espero que este artículo te haya sido de interés y puedas utilizarlo en tus proyectos. Seguro que a tus clientes les viene bien tener información a mano de sus contenidos sin necesidad de entrar al post.