J'ai une liste de produits, chacun avec un prix dans un champ personnalisé stocké sous forme de texte tel que "2,50" ou "5,00" et je les affiche sur la page avec une requête personnalisée qui trie par prix:
if(!$wp_query) {
global $wp_query;
}
$args = array(
'meta_key' => 'price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
query_posts( array_merge( $args , $wp_query->query ) );
Cela fonctionne bien pour les prix, mais certains prix sont "POA" et je voudrais les montrer en dernier, cependant les commandes ci-dessus de telle sorte que "POA" soient affichées en premier.
Y a-t-il un moyen de modifier cela, ou un hack rapide que je pourrais utiliser pour trier le tableau par la suite et mettre les prix "POA" en dernier?
'orderby' => 'meta_value_num',
pour'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
,! Merci! Voulez-vous rédiger une réponse afin que je puisse la voter?Réponses:
L'
OrderBy
argument peut prendre plus d'un paramètre, la solution a donc été de changer:à:
la source
ORDER BY CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC
J'ai trouvé cette solution en combinant le code de @bonger et /programming/18084199/wordpress-query-order-by-case-when
Et ça marche bien.
Une fonction
Avant la requête
la source