[wp-trac] [WordPress Trac] #34691: WP_Posts_List_Table cannot order by meta value correctly
WordPress Trac
noreply at wordpress.org
Sun Nov 15 22:31:42 UTC 2015
#34691: WP_Posts_List_Table cannot order by meta value correctly
----------------------------+-----------------------------
Reporter: intoxstudio | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Administration | Version: trunk
Severity: normal | Keywords:
Focuses: |
----------------------------+-----------------------------
Sorting by meta_value in tables that extend the WP_Posts_List_Table class
does no longer work as expected. Previously it would be done by adding the
column in the '''manage_edit-{$post_type}_sortable_columns''' filter and
then injecting something like following into the posts query:
{{{
array(
'meta_key' => 'some_key',
'orderby' => 'meta_value'
)
}}}
Then, when you click on a column header, ascending and descending sorting
would be handled automatically.
Not anymore. If you click on a column header with sorting by meta_value,
it only works ascending (or descending if this is default).
This is caused by this function in WP_Posts_List_Table:
{{{
protected function get_orderby() {
return strtolower( get_query_var( 'orderby' ) );
}
}}}
It will return "meta_value" when sorting by a meta value, and thus the
column will never be recognized when rendering the sortable header (unless
its name is in fact meta_value).
Before WP4.4, the check would be on $_GET["orderby"] that would return the
actual sorting key, in this example "some_key".
I like the idea of the new abstraction of get_orderby(), but why was it
changed from $_GET? Would anything break if we changed it back?
E.g.:
{{{
protected function get_orderby() {
return strtolower( isset($_GET["orderby"]) ? $_GET["orderby"] : ""
);
}
}}}
Probably related: #34479
--
Ticket URL: <https://core.trac.wordpress.org/ticket/34691>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list