Utilisation de Orderby et meta_value_num pour commander les numéros d'abord, puis les chaînes
-
-
essayez de changer `` orderby '=>'meta_value_num ', `to` `'orderby'=> 'meta_value_nummeta_value',`try changing `'orderby' => 'meta_value_num', ` to `'orderby' => 'meta_value_num meta_value',`
- 0
- 2012-03-13
- Bainternet
-
Mercimais celane fonctionnepas :(Thanks but that does not work :(
- 0
- 2012-03-13
- Shaun
-
Ah!Mais l'inversefonctionne,`meta_valuemeta_value_num`!Merci!Voulez-vous rédiger une réponsepour queje puisse voter?Aha! But the other way around does work, `meta_value meta_value_num` ! Thanks! Do you want to write up an answer so I can vote it up?
- 0
- 2012-03-13
- Shaun
-
publié comme réponsepour lespersonnes quine lisentpas les commentaires.posted as an answer for people who don't read comments.
- 1
- 2012-03-13
- Bainternet
-
POA signifie "prix sur demande" https://en.wikipedia.org/wiki/Price_on_applicationPOA means "price on asking" https://en.wikipedia.org/wiki/Price_on_application
- 0
- 2018-03-07
- sudip
-
2 réponses
- votes
-
- 2012-03-13
L'argument
OrderBy
peutprendreplus d'unparamètre,la solution était donc de changer:'orderby' => 'meta_value_num',
à:
'orderby' => 'meta_value meta_value_num',
The
OrderBy
argument can take more then one parameter so the solution was to change :'orderby' => 'meta_value_num',
to:
'orderby' => 'meta_value meta_value_num',
-
Celatrie simplementpar ordre alphabétique,car le deuxièmeparamètreest unno-op,tri sur lemême champ sanseffet.Pour cefaire afin que lesnombres soienttriésnumériquementet les caractères alphaspar ordre alphabétique,vous devrez utiliser unfiltrepourpersonnaliser l'ordreen utilisant une sorte de casse SQL,parexemple `ORDER BY CASE WHEN wp_postmeta.meta_value RLIKE '^ [0-9]'ALORS' 'ELSE wp_postmeta.meta_value END ASC,wp_postmeta.meta_value + 0 ASC`This just sorts alphabetically, as the second parameter is a no-op, sorting on the same field to no effect. To do this so that the numbers sort numerically and the alphas alphabetically you'd have to use a filter to customize the orderby to use some sort of SQL casing, eg `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`
- 3
- 2014-11-05
- bonger
-
@bonger Merci!Votre solutionest une solution complète à ceproblème.Et voici le reste du code où votre requêteestplacée. Je vais l'afficher comme réponsepour lesnouveaux visiteurs.@bonger Thank you! Your solution is complete solution for this problem. And here is rest of the code where your query is placed. I am going to post it as answer for new visitors.
- 0
- 2016-08-19
- Gangesh
-
- 2016-08-19
J'aitrouvé cette solutionen combinant le code de @bongeret de https://stackoverflow.com/questions/18084199/wordpress-query-order-by-case-when
Et celafonctionnebien.
function filter_case($orderby = '') { $orderby .= "CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC"; return $orderby; }
Avant la requête
add_filter( 'posts_orderby', 'filter_case' ); $wp_query = new WP_Query($args); remove_filter( 'posts_orderby', 'filter_case' );
I found this solution by combining code by @bonger and https://stackoverflow.com/questions/18084199/wordpress-query-order-by-case-when
And it works well.
Function
function filter_case($orderby = '') { $orderby .= "CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC"; return $orderby; }
Before Query
add_filter( 'posts_orderby', 'filter_case' ); $wp_query = new WP_Query($args); remove_filter( 'posts_orderby', 'filter_case' );
J'ai une liste deproduits,chacun avec unprix dans un champpersonnalisé stocké sousforme detextetel que "2.50" ou "5.00"et je les affiche sur lapage avec une requêtepersonnalisée quitrieparprix:
Celafonctionnebien pour lesprix,mais certainsprix sont des "POA"et je voudrais les afficheren dernier,cependant les commandes ci-dessus detellemanière que "POA" s'afficheen premier.
Y a-t-il unmoyen demodifier cela,ou un hack rapide queje pourrais utiliserpourtrier letableaupar la suiteet mettreen dernier lesprix "POA"?