1. Code
  2. PHP

Quick Tip: Add Custom Columns in WordPress Manage Screens

Scroll to top
3 min read

This quick tip explains how to add a Custom Column in the Manage Screens of your WordPress blog.


Here are some code snippets you can use to customize the columns in your Manage Screens.

You can copy and paste them into your theme's functions.php file, or download the plugin attached to this post.


Step 1 Define Column Functions

First, let's define some helper functions that we will hook into WordPress later. The first two add the new column (or two columns, or remove a default one), while the others display the column content. In these examples we assume that you have already activated a movie Custom Post Type and a genre Custom Taxonomy. You can read about creating custom post types and taxonomies in a previous article.

1
2
function ST4_columns_head($defaults) {
3
	$defaults['first_column']  = 'First Column';
4
5
	/* ADD ANOTHER COLUMN (OPTIONAL) */
6
	// $defaults['second_column'] = 'Second Column';

7
8
	/* REMOVE DEFAULT CATEGORY COLUMN (OPTIONAL) */
9
	// unset($defaults['categories']);

10
11
	/* TO GET DEFAULTS COLUMN NAMES: */
12
	// print_r($defaults);

13
14
	return $defaults;
15
}
16
17
// ONLY FOR movie CUSTOM POST TYPE

18
function ST4_columns_head_movies($defaults) {
19
	$defaults['my_movie_column'] = 'MY MOVIE COLUMN';
20
	return $defaults;
21
}
22
23
// GENERAL PURPOSE

24
function ST4_columns_content($column_name, $post_ID) {
25
	if ($column_name == 'first_column') {
26
		// DO STUFF FOR first_column COLUMN

27
		echo 'The post ID is: ' . $post_ID;
28
	}
29
30
	/* IF YOU NEED ANOTHER COLUMN - UNCOMMENT ALSO

31
	$defaults['second_column'] = 'Second Column';

32
	in ST4_columns_head()

33
	*/
34
35
	/*

36
	if ($column_name == 'second_column') {

37
		// DO STUFF FOR second_column COLUMN

38
	}

39
	*/
40
}
41
42
// TAXONOMIES: CATEGORIES (POSTS AND LINKS), TAGS AND CUSTOM TAXONOMIES

43
function ST4_columns_content_taxonomy($c, $column_name, $term_id) {
44
	if ($column_name == 'first_column') {
45
		echo 'The term ID is: ' . $term_id;
46
	}
47
}
48
49
// USERS

50
function ST4_columns_content_users($c, $column_name, $user_id) {
51
	if ($column_name == 'first_column') {
52
		$output .=  'The user ID is: ' . $user_id;
53
	}
54
	if ($column_name == 'second_column') {
55
		$output .=  'This is the second column content';
56
	}
57
	return $output;
58
}
59
60
// CUSTOM POSTS

61
function ST4_columns_content_movies($column_name, $movie_ID) {
62
	if ($column_name == 'my_movie_column') {
63
		echo 'The movie ID is: ' . $movie_ID;
64
	}
65
}

Step 2 Hook the Column Functions to WordPress

Now, let's hook the functions into WordPress Manage Screens:

Posts and Post Types, Except Pages

1
2
add_filter('manage_posts_columns', 'ST4_columns_head');
3
add_filter('manage_posts_custom_column', 'ST4_columns_content', 10, 2);

Only WordPress Default Posts

1
2
add_filter('manage_post_posts_columns', 'ST4_columns_head', 10);
3
add_action('manage_post_posts_custom_column', 'ST4_columns_content', 10, 2);

Only WordPress Default Pages

1
2
add_filter('manage_page_posts_columns', 'ST4_columns_head', 10);
3
add_action('manage_page_posts_custom_column', 'ST4_columns_content', 10, 2);

Only Movie Custom Post Type

1
2
add_filter('manage_movie_posts_columns', 'ST4_columns_head_movies', 10);
3
add_action('manage_movie_posts_custom_column', 'ST4_columns_content_movies', 10, 2);

Post Categories

1
2
add_filter('manage_edit-category_columns', 'ST4_columns_head');
3
add_filter('manage_category_custom_column', 'ST4_columns_content_taxonomy', 10, 2);

Only Genre Custom Taxonomy

1
2
add_filter('manage_edit-genre_columns', 'ST4_columns_head');
3
add_filter('manage_genre_custom_column', 'ST4_columns_content_taxonomy', 10, 2);

Post Tags

1
2
add_filter('manage_edit-post_tag_columns', 'ST4_columns_head');
3
add_filter('manage_post_tag_custom_column', 'ST4_columns_content_taxonomy', 10, 2);

Link Categories

1
2
add_filter('manage_edit-link_category_columns', 'ST4_columns_head');
3
add_filter('manage_link_category_custom_column', 'ST4_columns_content_taxonomy', 10, 2);

Media Library

1
2
add_filter('manage_media_columns', 'ST4_columns_head');
3
add_filter('manage_media_custom_column', 'ST4_columns_content', 10, 2);

Users

1
2
add_filter('manage_users_columns', 'ST4_columns_head');
3
add_filter('manage_users_custom_column', 'ST4_columns_content_users', 10, 2);

Final Notes

Two final notes: if a Manage Screen has no items, for example there are no Tags yet, the content of the new column is not displayed.

The ST4_columns_content_users function it's slightly different from the others, since it returns a PHP variable containing the HTML, instead of printing the column content on the fly.