Title: manage_{$post_type}_posts_columns
Published: April 25, 2014
Last modified: August 20, 2026

---

# apply_filters( “manage_{$post_type}_posts_columns”, string[] $posts_columns )

## In this article

 * [Description](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#parameters)
 * [More Information](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#more-information)
 * [Source](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#user-contributed-notes)

[ Back to top](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#wp--skip-link--target)

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

## 󠀁[Description](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#description)󠁿

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`

## 󠀁[Parameters](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#parameters)󠁿

 `$posts_columns`string[]

An associative array of column headings.

## 󠀁[More Information](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#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](https://developer.wordpress.org/reference/functions/post_type_supports/)
by the post type are shown.

**cb**: Checkbox for bulk [actions](https://wordpress.org/support/article/posts-screen/#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.

## 󠀁[Source](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#source)󠁿

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

[View all references](https://developer.wordpress.org/reference/files/wp-admin/includes/class-wp-posts-list-table.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-admin/includes/class-wp-posts-list-table.php#L755)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-admin/includes/class-wp-posts-list-table.php#L755-L755)

## 󠀁[Related](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#related)󠁿

| Used by | Description | 
| [WP_Posts_List_Table::get_columns()](https://developer.wordpress.org/reference/classes/wp_posts_list_table/get_columns/)`wp-admin/includes/class-wp-posts-list-table.php` |  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.0.0](https://developer.wordpress.org/reference/since/3.0.0/) | Introduced. |

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#user-contributed-notes)󠁿

 1.   [Skip to note 8 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-2560)
 2.    [Andrija Naglic](https://profiles.wordpress.org/andrija/)  [  9 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-2560)
 3.  [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-2560)
     Vote results for this note: 2[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-2560)
 4.      ```php
         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' );
         ```
     
 5.  For further management of columns, check:
 6.  [https://developer.wordpress.org/reference/hooks/manage_post-post_type_posts_custom_column/](https://developer.wordpress.org/reference/hooks/manage_post-post_type_posts_custom_column/)
     
     To set the custom column values
 7.  [https://developer.wordpress.org/reference/hooks/list_table_primary_column/](https://developer.wordpress.org/reference/hooks/list_table_primary_column/)
     
     To set the primary (default) column
 8.   [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D2560%23feedback-editor-2560)
 9.   [Skip to note 9 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-4293)
 10.   [Steven Lin](https://profiles.wordpress.org/stevenlinx/)  [  6 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-4293)
 11. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-4293)
     Vote results for this note: 2[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-4293)
 12. Example migrated from Codex:
 13. **Add Columns**
 14. 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.
 15.     ```php
         function add_book_columns($columns) {
             unset($columns['author']);
             return array_merge($columns, 
                       array('publisher' => __('Publisher'),
                             'book_author' =>__( 'Book Author')));
         }
         add_filter('manage_book_posts_columns' , 'add_book_columns');
         ```
     
 16.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D4293%23feedback-editor-4293)
 17.  [Skip to note 10 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-4069)
 18.   [Shashikant Yadav](https://profiles.wordpress.org/kantbtrue/)  [  6 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-4069)
 19. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-4069)
     Vote results for this note: 1[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-4069)
 20. **To reorder columns**
 21.     ```php
         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' );
         ```
     
 22. 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
 23.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D4069%23feedback-editor-4069)
 24.  [Skip to note 11 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-5932)
 25.   [gregrobson](https://profiles.wordpress.org/gregrobson/)  [  4 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-5932)
 26. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-5932)
     Vote results for this note: 1[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-5932)
 27. Be careful with your choice of column name.
 28. 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.
 29. Prefixing the column fixed the issue.
 30.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D5932%23feedback-editor-5932)
 31.  [Skip to note 12 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-4294)
 32.   [Steven Lin](https://profiles.wordpress.org/stevenlinx/)  [  6 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-4294)
 33. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-4294)
     Vote results for this note: 0[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-4294)
 34. Example migrated from Codex:
 35. **Replace Columns**
 36. Here’s another example that completely replaces the columns, rather than adding
     and removing specific ones.
 37.     ```php
         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');
         ```
     
 38.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D4294%23feedback-editor-4294)
 39.  [Skip to note 13 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-6113)
 40.   [Alberuni Azad.](https://profiles.wordpress.org/alberuni-azad/)  [  4 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-6113)
 41. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-6113)
     Vote results for this note: 0[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-6113)
 42. Add a new column after an specific column. For example-
 43. The code below adds a new column named “Wholesaler Price” After the price column
     of the WooCommerce product’s list table.
 44.     ```php
         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;
         }
         ```
     
 45. Helper function to insert an element after a specific array key
 46.     ```php
         /**
          * 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;
         }
         ```
     
 47.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D6113%23feedback-editor-6113)
 48.  [Skip to note 14 content](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/?output_format=md#comment-content-6163)
 49.   [nickylind](https://profiles.wordpress.org/nickylind/)  [  4 years ago  ](https://developer.wordpress.org/reference/hooks/manage_post_type_posts_columns/#comment-6163)
 50. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-6163)
     Vote results for this note: 0[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%23comment-6163)
 51. 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}]**.
 52. 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:
 53.     ```php
         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' );
         ```
     
 54.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F%3Freplytocom%3D6163%23feedback-editor-6163)

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fhooks%2Fmanage_post_type_posts_columns%2F)
before being able to contribute a note or feedback.