I need to sort my search results by custom post type. the problem: the order is custom.
I do have 5 different post types and i got the order like so:
- artist
- artwork
- page
- post
- publication
I'd like the order to be like this:
- artist
- post
- artwork
- publication
- page
Here is what I have so far, the elements are grouped by their post type and get sorted by title. Wonderful. Now all I need is the custom ordering.
Any hint?
add_filter( 'posts_orderby', 'order_search_by_posttype', 10, 2 );
function order_search_by_posttype( $orderby ){
global $wpdb;
if( ! is_admin() && is_search() ) :
$orderby = "{$wpdb->prefix}posts.post_type ASC, {$wpdb->prefix}posts.post_title ASC";
endif;
return $orderby;
}
I need to sort my search results by custom post type. the problem: the order is custom.
I do have 5 different post types and i got the order like so:
- artist
- artwork
- page
- post
- publication
I'd like the order to be like this:
- artist
- post
- artwork
- publication
- page
Here is what I have so far, the elements are grouped by their post type and get sorted by title. Wonderful. Now all I need is the custom ordering.
Any hint?
add_filter( 'posts_orderby', 'order_search_by_posttype', 10, 2 );
function order_search_by_posttype( $orderby ){
global $wpdb;
if( ! is_admin() && is_search() ) :
$orderby = "{$wpdb->prefix}posts.post_type ASC, {$wpdb->prefix}posts.post_title ASC";
endif;
return $orderby;
}
Share
Improve this question
edited Aug 26, 2016 at 9:37
honk31
asked Feb 10, 2015 at 10:47
honk31honk31
1,4081 gold badge13 silver badges23 bronze badges
3
|
1 Answer
Reset to default 24I found the key: SQL CASE Expression
function order_search_by_posttype($orderby){
if (!is_admin() && is_search()) :
global $wpdb;
$orderby =
"
CASE WHEN {$wpdb->prefix}posts.post_type = 'artist' THEN '1'
WHEN {$wpdb->prefix}posts.post_type = 'post' THEN '2'
WHEN {$wpdb->prefix}posts.post_type = 'artwork' THEN '3'
WHEN {$wpdb->prefix}posts.post_type = 'publication' THEN '4'
ELSE {$wpdb->prefix}posts.post_type END ASC,
{$wpdb->prefix}posts.post_title ASC";
endif;
return $orderby;
}
add_filter('posts_orderby', 'order_search_by_posttype');
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742285939a4415322.html
usort
to sort the returned array by post type – Pieter Goosen Commented Feb 10, 2015 at 11:05