Je dois trier mes résultats de recherche par type de message personnalisé. le problème: la commande est personnalisée.
J'ai 5 types de messages différents et j'ai reçu l'ordre comme suit:
Je voudrais que l'ordre soit comme ça:
Voici ce que j'ai jusqu'à présent, les éléments sont regroupés par type de message et classés par titre. Merveilleux. Maintenant, tout ce dont j'ai besoin est la commande personnalisée.
Un indice?
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;
}
J'ai trouvé la clé: 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;
}