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

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

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

$post_columnsstring[]
An associative array of column headings.

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.

Source

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

Changelog

VersionDescription
3.0.0Introduced.

User Contributed Notes

  1. Skip to note 8 content
    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:

    https://developer.wordpress.org/reference/hooks/manage_post-post_type_posts_custom_column/
    To set the custom column values

    https://developer.wordpress.org/reference/hooks/list_table_primary_column/
    To set the primary (default) column

  2. Skip to note 9 content

    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) {
        unset($columns['author']);
        return array_merge($columns, 
                  array('publisher' => __('Publisher'),
                        'book_author' =>__( 'Book Author')));
    }
    add_filter('manage_book_posts_columns' , 'add_book_columns');
  3. Skip to note 10 content

    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 11 content

    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.

  5. Skip to note 12 content

    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');
  6. Skip to note 13 content

    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 14 content

    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.