WordPress Query по пользовательскому полю с типом даты

Я хочу создать запрос, в котором должны отображаться все сообщения, где настраиваемое поле «expiration_date» больше даты с сегодняшнего дня.
Краткая форма: если срок действия сообщения достигнут, он больше не должен отображаться в запросе

Я попробовал с этим фрагментом:

        <?php
$today = date("Y-m-d");
$args= array(
'tag' => 'Pinnwand',
'meta_query' => array(
'key' => 'expiration_date',
'type' => 'DATE',
'value' => $today,
'compare' => '>'
)
);
$my_query = new WP_Query($args); ?>

срок годности в формате (2014-10-04), например.
Но я попробовал также формат «Ymd» с обеих сторон, изменил тип сравнения или установил тип как «NUMERIC», и ничего не помогло. В результате сообщение будет отображаться всегда.

Было бы здорово, если бы кто-нибудь мог мне помочь!

2

Решение

Хорошо, я нашел ошибку!
Правильный запрос требует еще одного array (). Я не знаю точно, почему, но в других случаях запрос не мог работать с ним. Так вот код

        $args= array(
'tag' => 'Pinnwand',
'meta_query' => array(
array(
'key' => 'expiration',
'type' => 'DATE',
'value' => $today,
'compare' => '>'
),
),
);
$my_query = new WP_Query($args); ?>
1

Другие решения

Вы можете сделать исключение из двух запросов. Первый запрос находит все сообщения, которые вы хотите исключить, затем просматриваете их и сохраняете идентификаторы сообщений в массиве, затем вызываете второй запрос, исключая их, используя ‘post__not_in’ с массивом идентификаторов в качестве аргумента.

Я бы использовал для этого объект $ wpdb, потому что он очень эффективен.

Для справочного материала:
http://codex.wordpress.org/Class_Reference/WP_Query а также
http://codex.wordpress.org/Class_Reference/wpdb

Этот кусок кода ДОЛЖЕН делайте то, что вы пытаетесь сделать, или приближайте к нему, и я сохранил ваш тег в части запроса.

// first query to find exclusions
$today = date("Y-m-d");
$exclusions = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE expiration_date < ".$today);
if ( $exclusions ) {
foreach ( $exclusions as $exclusion ) {
$excludeIDs[] = $exclusion->ID;
}
}

// second query using exclusion array
$args= array(
'tag' => 'Pinnwand',
'post__not_in' => $excludeIDs,
);
$my_query = new WP_Query($args);
0

Вы можете сделать это проще, как указано на http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters:

$args= array(
'tag' => 'Pinnwand',
'meta_key' => 'expiration',
'meta_type' => 'DATE',
'meta_value' => $today,
'meta_compare' => '>'
);
0