web-dev-qa-db-ja.com

Meta_queryの複雑部が正しい機能してないことを比較する

1.0から10までの小数部を保持する 'rating'という名前のカスタムフィールドがあります。8.0から10までのレーティングですべての投稿を取得するためにwp_queryを使用しようとしています。 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

問題は、meta_queryのデフォルトの比較はCHARの比較なので、デフォルトで数値が入る順序は1、10、2、3、4、5、6、7、8、9などです。これを解決するには、あなたのmeta_queryを以下のように修正する必要があります。

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