I am stuck trying to get a custom column to sort according to a custom field. I have two custom post types: Brand and Product. I would like the Product admin screen to have a "Brand" column, and for that "Brand" column to be sortable by the custom field _wpcf_belongs_brand-listing_id
.
I was able to successfully add a new "Brand" column to the "Product" admin screen
I then successfully registered the Brand column as sortable. The "Brand" custom column has a key of brand
and a value of _wpcf_belongs_brand-listing_id
, which is the custom field I want to sort by.
//Register the Brand column in the Product admin page as sortable.
add_filter( 'manage_edit-eproduct_sortable_columns', 'vendia_sortable_brand_column');
function vendia_sortable_brand_column( $sortable_columns ){
$sortable_columns[ 'brand' ] = '_wpcf_belongs_brand-listing_id';
debug($sortable_columns);
return $sortable_columns;
}
To confirm the above function worked correctly, I use a debug()
function that sends the output of print_r()
to Firebug's console.
The debug()
function output is:
Array
(
[title] => title
[parent] => parent
[comments] => comment_count
[date] => Array
(
[0] => date
[1] => 1
)
[brand] => _wpcf_belongs_brand-listing_id
)
So I know that the "Brand" custom column is registered correctly.
However, my "Brand" custom column sort function is not working. I would like to sort this column by the custom field _wpcf_belongs_brand-listing_id
.
//Tell WordPress what to sort by in the Brand column of the Product admin page.
add_action( 'pre_get_posts', 'vendia_brand_column_orderby' );
function vendia_brand_column_orderby( $query ) {
if( ! is_admin() )
return;
$orderby = $query->get( 'orderby' );
echo $orderby;
if( '_wpcf_belongs_brand-listing_id' == $orderby ) {
$query->set('meta_key','_wpcf_belongs_brand-listing_id');
$query->set('orderby','meta_value');
}
}
For some reason I don't understand, my debugging statement of echo $orderby;
returns a value of date
for the key orderby
for every sortable column. I was the expecting orderby
parameter to take on the values of "title", "parent", "comment_count", "date", and "_wpcf_belong_brand-listing_id". Those are the values associated with each custom column key, output by my debugging function above.
According to http://ift.tt/Iav31b
date
is simply the default value for the orderby
parameter of WP_Query
. So it seems like the WP_Query has not been changed from its defaults at this point, meaning, at the point that pre_get_posts
fires. However, every example I have seen that discusses adding a custom column, and making it sortable, uses pre_get_posts
for changing the orderby
parameter for the custom columns.
So am I using the wrong WordPress action (pre_get_posts) to change the orderby
parameter for custom columns ? If not, why is my WP_Query returning date
as the orderby
parameter for every custom column?
Thank you for your help. I know this was a really long question.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire