apply_filters( "manage_{$post_type}_posts_columns", string[] $post_columns )

Filters the columns displayed in the Posts list table for a specific post type.


The dynamic portion of the hook name, $post_type, refers to the post type slug.

Possible hook names include:

  • manage_post_posts_columns
  • manage_page_posts_columns

Top ↑


$post_columns string[]
An associative array of column headings.

Top ↑

More Information

$post_columns is an associative array of “column name” ⇒ “label”. The “column name” is passed to callback functions to identify the column. The “label” is shown as the column header.

Built-in Column Types:

Note: Listed in order of appearance. By default, all columns supported by the post type are shown.

cb: Checkbox for bulk actions.

title: Post title. Includes “edit”, “quick edit”, “trash” and “view” links. If $mode (set from $_REQUEST[‘mode’]) is ‘excerpt’, a post excerpt is included between the title and links.

author: Post author.

categories: Categories the post belongs to.

tags: Tags for the post.

comments: Number of pending comments.

date: The date and publish status of the post.

Top ↑


File: wp-admin/includes/class-wp-posts-list-table.php. View all references

return apply_filters( "manage_{$post_type}_posts_columns", $posts_columns );

Top ↑


Version Description
3.0.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Andrija Naglic
    function my_custom_columns_list($columns) {
        unset( $columns['title']  );
        unset( $columns['author'] );
        unset( $columns['date']   );
        $columns['product_number']     = 'Product Number';
        $columns['custom_handler']     = 'Nice name';
        return $columns;
    add_filter( 'manage_product_posts_columns', 'my_custom_columns_list' );

    For further management of columns, check:
    To set the custom column values
    To set the primary (default) column

  2. Skip to note 2 content
    Contributed by Steven Lin

    Example migrated from Codex:

    Add Columns

    Suppose you have a ‘books’ custom post type and you want to add the publisher and book author in the edit page but remove the post author.

    function add_book_columns($columns) {
        return array_merge($columns, 
                  array('publisher' => __('Publisher'),
                        'book_author' =>__( 'Book Author')));
    add_filter('manage_book_posts_columns' , 'add_book_columns');
  3. Skip to note 3 content
    Contributed by Shashikant Yadav

    To reorder columns

    function wpdocs_item_columns( $columns ) {
        $custom_col_order = array(
            'cb' => $columns['cb'],
            'title' => $columns['title'],
            'rating' => __( 'Ratings', 'textdomain' ),
            'date' => $columns['date']
        return $custom_col_order;
    add_filter( 'manage_item_posts_columns', 'wpdocs_item_columns' );

    Just use the $custom_col_order array to reorder the columns in {$post_type}.
    NOTE: in the above example, item is the custom post type

  4. Skip to note 4 content
    Contributed by Steven Lin

    Example migrated from Codex:

    Replace Columns

    Here’s another example that completely replaces the columns, rather than adding and removing specific ones.

    function set_book_columns($columns) {
        return array(
            'cb' => '<input type="checkbox" />',
            'title' => __('Title'),
            'comments' => '<span class="vers comment-grey-bubble" title="' . esc_attr__( 'Comments' ) . '"><span class="screen-reader-text">' . __( 'Comments' ) . '</span></span>',
            'date' => __('Date'),
            'publisher' => __('Publisher'),
            'book_author' =>__( 'Book Author')
    add_filter('manage_book_posts_columns' , 'set_book_columns');
  5. Skip to note 5 content
    Contributed by gregrobson

    Be careful with your choice of column name.

    I decided to use tags as a column name (key on the array) and spent a few minutes wondering why no value was appearing for the column. The function to pull out the data wasn’t even called. It is of course, a default field on the post type and the fuction won’t get called WP uses its default value.

    Prefixing the column fixed the issue.

  6. Skip to note 6 content
    Contributed by Alberuni Azad.

    Add a new column after an specific column. For example-

    The code below adds a new column named “Wholesaler Price” After the price column of the WooCommerce product’s list table.

    add_filter( 'manage_product_posts_columns', 'wpdocs_wholesale_price_column', 50 );
    function wpdocs_wholesale_price_column( $columns ) {
        // Insert wholesale price column after the price column
        $columns = wpdocs_insert_element_after_specific_array_key( $columns, 'price', array(
            'key'   => 'wholesale_price',
            'value' => __( 'Wholesale Price', 'text-domain' ),
        ) );
        return $columns;

    Helper function to insert an element after a specific array key

     * It takes an array, a specific key, and a new element, and inserts the new element after the
     * specific key
     * @param array arr The array where you want to insert the new element.
     * @param string specific_key The key of the array element you want to insert after.
     * @param array new_element The new element to be inserted.
     * @return array
    function wpdocs_insert_element_after_specific_array_key( $arr, $specific_key, $new_element ) {
        if ( ! is_array( $arr ) || ! is_array( $new_element ) ) {
            return $arr;
        if ( ! array_key_exists( $specific_key, $arr ) ) {
            return $arr;
        $array_keys = array_keys( $arr );
        $start      = (int) array_search( $specific_key, $array_keys, true ) + 1; // Offset
        $spliced_arr             = array_splice( $arr, $start );
        $new_element_key         = $new_element['key'];
        $arr[ $new_element_key ] = $new_element['value'];
        $new_arr                 = array_merge( $arr, $spliced_arr );
        return $new_arr;
  7. Skip to note 7 content
    Contributed by nickylind

    If you’re having trouble finding out how to find the name of your custom taxonomy column so you can reorder your columns with custom taxonomies like I was, the index in your $columns array is $columns[taxonomy-{taxonomy_name}].

    For instance I had made a ‘Document Category’ custom taxonomy for my ‘Document’ Custom Post Type, so that index for me was $columns[taxonomy-document_category]. So the entire code to order my custom taxonomy with my new ‘Attachment Type’ column was:

    public function wpdocs_document_columns($columns)
    	$custom_col_order = array(
    		'cb' => $columns['cb'],
    		'title' => $columns['title'],
    		'taxonomy-document_category' => $columns['taxonomy-document_category'],
    		'attachment_type' => $columns['attachment_type'],
    		'date' => $columns['date']
    	return $custom_col_order;
    add_filter( 'manage_document_posts_columns', 'wpdocs_document_columns' );

You must log in before being able to contribute a note or feedback.