Make WordPress Core

Opened 23 months ago

Last modified 23 months ago

#24313 new feature request

Filter Columns by View

Reported by: chriscct7 Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: Administration Keywords:
Focuses: Cc:

Description (last modified by SergeyBiryukov)

After searching extensively for a way to do this, and discussing this with fellow WordPress developers, I believe I have found a feature that should be added to WordPress.

When you make a new custom post type, if you have WordPress register a UI for it, it outputs a screen named "All XXXX's". Within these, WordPress automatically adds filters. So let's say I've registered a CPT called Downloads.

So I can now use the built in UI for Downloads and filter the page to show just pending downloads, or just published downloads, for instance.

However, the issue becomes what if you want to display a column for some views, but not others. For instance, if Downloads has a column called "Sales" where the number of sales of that particular download is stored, it makes no sense to show that column on Pending Downloads (since they can't have sales before being published).

Currently, at least after days of trying to find a way of doing this, there is no way to do this for the tables registered by WordPress. If I make my own List_Table, then I can do this.

However, there should be a way of adding columns based on filter, so that a developer who adds a column programmatically can go:

if($view != pending){
// register sales column

Feel free to correct me if I've overlooked a method of doing this.


Change History (7)

comment:1 @SergeyBiryukov23 months ago

  • Component changed from Appearance to Administration
  • Description modified (diff)

comment:2 @mordauk23 months ago

  • Cc pippin@… added

comment:3 @sunnyratilal23 months ago

  • Cc sunnyratilal5@… added

comment:4 @johnbillion23 months ago

  • Cc johnbillion added

comment:5 @chriscct723 months ago

I think if someone from the core team took a look at this, this could very easily be solved for 3.6 by simply either passing the current view into the manage_edit-$cptname_columns or making a function you can call to get the current screen view.

comment:6 @chriscct723 months ago

Found a way around this. Will post in a sec.

comment:7 @chriscct723 months ago

This is what you can use. I'm using it to remove columns, but you could use it to add new ones conditionally as well.

function edd_fes_columns_head( $defaults ) {
    // Check that this is not all view, else it throws an error
    if ( isset( $_REQUEST[ 'post_status' ] ) ) {
        // Remove the sales from pending and draft products
        if ( $_REQUEST[ 'post_status' ] == 'pending' || $_REQUEST[ 'post_status' ] == 'draft' ) {
            unset( $defaults[ 'sales' ] );
add_filter( 'manage_edit-download_columns', array( $this, 'edd_fes_columns_head' ) );
Note: See TracTickets for help on using tickets.