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);
?>
問題は、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'
)
),