web-dev-qa-db-fra.com

Comparez les nombres décimaux de meta_query ne fonctionne pas correctement

J'ai un champ personnalisé nommé 'rating' qui contient des décimales de 1,0 à 10. J'essaie d'utiliser wp_query pour obtenir tous les posts avec un score de 8.0 à 10. Ce que j'ai jusqu'ici fonctionne presque parfaitement mais ne renvoie pas de posts avec note de 10.

<?php add_filter('get_meta_sql','cast_decimal_precision');
    function cast_decimal_precision( $array ) {
    $array['where'] = str_replace('DECIMAL','DECIMAL(1,1)',$array['where']);
    return $array;}
?> 
<?php
$args = array(
    'posts_per_page' => 10,
    'paged' => get_query_var( 'paged' ),
    'category_name' => ( 'movies' ),
    'meta_query' => array(
                array(
                    'key' => 'rating',
                    'value' => 8,
                    'compare' => '>'
                )
                ),
    'meta_key' => 'rating',         
    'orderby' => 'meta_value',
    'order' => 'DESC'
);
$wp_query = null;
$wp_query = new WP_Query($args); 
?>
2
Dustin J

Le problème est que la comparaison par défaut pour meta_query est une comparaison CHAR, de sorte que l'ordre dans lequel les nombres seraient par défaut serait 1, 10, 2, 3, 4, 5, 6, 7, 8, 9, a, etc. Pour résoudre ce problème, vous devez modifier votre meta_query comme suit:

'meta_query' => array(
    array(
        'key'     => 'rating',
        'value'   => 8,
        'compare' => '>=',
        'type'    => 'NUMERIC'
    )
),
2
mor7ifer