How can I add a custom column to the “Manage Categories” table?

The question:

I’ve done this with posts, but I can’t find the proper way to reference the category table’s columns.

I’m trying to add a column titled “Image” to the table, so that when the table grid of categories is displayed, if there is a category image assigned to the category, it will appear in the grid.

The first step for me is to determine the proper filter to address in order to insert the columb into the table.

I’ve tried each of these to no avail…

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'] = 'Image';
    return $cat_columns;
}

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

The filter is manage_{$screen->id}_columns, and $screen->id is edit-category, giving you manage_edit-category_columns.

I found this by placing a var_dump() in get_column_headers(), which is called by print_column_headers(), which is called in wp-admin/edit-tags.php, the page where you edit the category items.

Method 2

Adding the column name

function manage_my_category_columns($columns)
{
 // add 'My Column'
 $columns['my_column'] = 'My Column';

 return $columns;
}
add_filter('manage_edit-category_columns','manage_my_category_columns');

Next we want to put the data in it:

function manage_category_custom_fields($deprecated,$column_name,$term_id)
{
 if ($column_name == 'my_column') {
   echo 'test';
 }
}
add_filter ('manage_category_custom_column', 'manage_category_custom_fields', 10,3);

I hope this was useful.

Method 3

In addition to @LeoDang’s example, the custom_column is applied to custom taxonomy based on the following filters.

Tested and validated in WordPress 3.8

1.Adding Custom Column header

// these filters will only affect custom column, the default column will not be affected
// filter: manage_edit-{$taxonomy}_columns
function custom_column_header( $columns ){
    $columns['header_name'] = 'Header Name for Display'; 

    return $columns;
}
add_filter( "manage_edit-shop-subcategory_columns", 'custom_column_header', 10);

2.Adding Custom Column Data to corresponding Column Header

// parm order: value_to_display, $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 );

    // for multiple custom column, you may consider using the column name to distinguish

    // although If clause is working, Switch is a more generic and well structured approach for multiple columns
    // if ($column_name === 'header_name') {
        // echo '1234';
    // }
    switch( $column_name ) {
          case 'header_name1':
               // your code here
               $value = 'header name 1';
          break;

          case 'header_name2':
               // your code here
               $value = 'header name 2';
          break;

          // ... similarly for more columns
          default:
          break;
    } 

    return $value; // this is the display value
}
add_action( "manage_shop-subcategory_custom_column", 'custom_column_content', 10, 3);

You may also refer to the gist code shared online for any update and additional notes.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment