Ich muss meine Suchergebnisse nach benutzerdefiniertem Beitragstyp sortieren. Das Problem: Die Bestellung ist benutzerdefiniert.
Ich habe 5 verschiedene Beitragstypen und die Reihenfolge sieht so aus:
Ich möchte, dass die Reihenfolge so ist:
Hier ist, was ich bis jetzt habe, die Elemente sind nach Beitragstyp gruppiert und werden nach Titel sortiert. Wunderbar Jetzt brauche ich nur noch die individuelle Bestellung.
Irgendein Hinweis?
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;
}
Ich habe den Schlüssel gefunden: SQL CASE Expression
add_filter( 'posts_orderby', 'order_search_by_posttype', 10, 2 );
function order_search_by_posttype( $orderby, $wp_query ){
if( ! $wp_query->is_admin && $wp_query->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;
}