Cómo agregar una columna personalizada a la tabla "Administrar categorías"
He hecho esto con entradas, pero no puedo encontrar la forma correcta de referenciar las columnas de la tabla de categorías.
Estoy intentando añadir una columna titulada "Imagen" a la tabla, para que cuando se muestre la cuadrícula de categorías, si hay una imagen asignada a la categoría, aparezca en la cuadrícula.
El primer paso para mí es determinar el filtro adecuado para insertar la columna en la tabla.
He probado cada uno de estos sin éxito...
add_filter('manage_categories_columns', 'myFunction', 10, 2);
add_filter('manage_category_columns', 'myFunction', 10, 2);
function myFunction($cat_columns)
{
$cat_columns['cat_image_thumb'] = 'Imagen';
return $cat_columns;
}

Agregando el nombre de la columna
function manage_my_category_columns($columns)
{
// agregar 'Mi Columna'
$columns['my_column'] = 'Mi Columna';
return $columns;
}
add_filter('manage_edit-category_columns','manage_my_category_columns');
Luego queremos colocar los datos en ella:
function manage_category_custom_fields($deprecated,$column_name,$term_id)
{
if ($column_name == 'my_column') {
echo 'prueba';
}
}
add_filter ('manage_category_custom_column', 'manage_category_custom_fields', 10,3);
Espero que esto haya sido útil.

El filtro es manage_{$screen->id}_columns
, y $screen->id
es edit-category
, lo que te da manage_edit-category_columns
.
Descubrí esto colocando un var_dump()
en get_column_headers()
, que es llamado por print_column_headers()
, el cual se llama en wp-admin/edit-tags.php
, la página donde editas los elementos de categorías.

@Jan: ¡Gracias! Eso resolvió lo del encabezado de columna. Ahora estoy intentando usar tu rastreo para descubrir cómo añadir la inserción de filas. Mirando en edit-tags.php veo la llamada "tag_rows", que creo que es lo que genera las filas, pero no logro localizar esa función para hacer un var_dump y obtener el nombre del filtro. ¿Alguna idea?

@Scott: Si te refieres a una taxonomía jerárquica como categorías, tag_rows()
llama a _term_rows()
, que a su vez llama a _tag_row()
. Esta función llama a la acción manage_{$taxonomy}_custom_column
, que en tu caso sería manage_category_custom_column
.

@Jan gracias. Puedo establecer la acción, pero no logro que el echo responda.. acción > add_action('manage_category_custom_column', 'myFunction', 10, 2);

@Scott: En efecto, estaba equivocado, es un filtro, no una acción, por lo que debes retornar el contenido que quieres mostrar, no hacer echo - a diferencia de las columnas personalizadas de entradas, donde sí debes hacer echo.

OK, eso está mejor. Funciona perfectamente con filter y return vs action y echo. ¡Gracias Jan!

@Jan, Parece que el ID de la categoría no está siendo pasado a la función. Tengo dos argumentos en la llamada de la función, el primero está vacío y el segundo contiene el ID de la fila personalizada. ¿Debería llevar esto a una pregunta dedicada ya que básicamente hemos respondido la original?

Acabo de encontrarlo. Es el tercer argumento. Tuve que cambiar el filtro a 10,3 y la función se convierte en myColumnRows($empty_arg, $column_name, $category_id)

@Scott: Aquí es normal: si ningún plugin proporciona algo para mostrar en la columna, debería estar vacío. Recuerda, esto es un filtro: el primer argumento es el valor que tu callback modificará. echo '<td>'; do_action( 'custom_column' ); echo '</td>';
convertido a un filtro se convierte en echo '<td>'; echo apply_filters( 'custom_column', '' ); echo '</td>';
.

Además del ejemplo de @LeoDang, el custom_column se aplica a taxonomías personalizadas basado en los siguientes filtros.
Probado y validado en WordPress 3.8
1.Añadiendo encabezado de columna personalizada
// estos filtros solo afectarán la columna personalizada, la columna por defecto no se verá afectada
// filter: manage_edit-{$taxonomy}_columns
function custom_column_header( $columns ){
$columns['header_name'] = 'Nombre del Encabezado para Mostrar';
return $columns;
}
add_filter( "manage_edit-shop-subcategory_columns", 'custom_column_header', 10);
2.Añadiendo datos de columna personalizada al encabezado de columna correspondiente
// orden de parámetros: valor_a_mostrar, $column_name, $tag->term_id
// filter: manage_{$taxonomy}_custom_column
function custom_column_content( $value, $column_name, $tax_id ){
// var_dump( $column_name );
// var_dump( $value );
// var_dump( $tax_id );
// para múltiples columnas personalizadas, puedes considerar usar el nombre de la columna para distinguir
// aunque la cláusula If funciona, Switch es un enfoque más genérico y bien estructurado para múltiples columnas
// if ($column_name === 'header_name') {
// echo '1234';
// }
switch( $column_name ) {
case 'header_name1':
// tu código aquí
$value = 'nombre de encabezado 1';
break;
case 'header_name2':
// tu código aquí
$value = 'nombre de encabezado 2';
break;
// ... similarmente para más columnas
default:
break;
}
return $value; // este es el valor a mostrar
}
add_action( "manage_shop-subcategory_custom_column", 'custom_column_content', 10, 3);
También puedes consultar el código compartido en gist para cualquier actualización y notas adicionales.
