Пользовательский WP_Query — мета_запрос игнорируется

Я хотел бы отобразить некоторые «произведения искусства» с конкретными значениями мета-ключей. Каждое произведение искусства имеет настраиваемое поле: «votes_average» и еще одно «votes_count». Это мой пользовательский запрос:

$args = array(
    'post_type' => 'artworks',
    'post_status' => 'publish',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
           'key' => 'votes_average',
           'value' => '6',
           'compare' => '>=',
           'type'    => 'DECIMAL',
        ),
        array(
           'key' => 'votes_count',
           'value' => '1',
           'compare' => '>',
           'type'    => 'NUMERIC',
        ),
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'type',
            'field' => 'slug',
            'terms' => $term
        )
    )
);

Я не понимаю, почему этот запрос отображает произведение со средним значением 5,8. Я сделал ошибку?


person Adrien G    schedule 01.01.2013    source источник
comment
¿Каков правильный средний показатель для вашего примера?   -  person Felipe Alameda A    schedule 01.01.2013


Ответы (1)


Проблема в том, что MySQL округлил 5,8 до 6 и использовал в запросе. Соответствующая часть запроса выглядит так

(wp_postmeta.meta_key = 'votes_average' AND CAST(wp_postmeta.meta_value AS DECIMAL) >= '6')

Таким образом, вы можете заменить DECIMAL на NUMERIC, чтобы решить эту проблему.

    array(
       'key' => 'votes_average',
       'value' => '6',
       'compare' => '>=',
       'type'    => 'NUMERIC',
    ),
person Vladimir    schedule 01.01.2013
comment
Спасибо за ваше объяснение. Обложка со средним баллом 5,8 больше не появляется. Спасибо и счастливого нового года! - person Adrien G; 01.01.2013