Сортировка WP Query по мета-значению (дата)

20 нояб. 2014 г., 19:03:22
Просмотры: 16.9K
Голосов: 1

У меня есть следующий код, где я хочу сортировать по мета-ключу "event_date" и выводить только записи после текущей даты и на 3 недели вперед. Однако ничего не происходит, даже когда я упрощаю WP Query до типа записи и порядка, ничего не выводится, скрипт просто останавливается там, где вставлен код.

<?php $events_args = array(
    'meta_query' => array(
        array(
            'key' => 'event_date', // Ключ произвольного поля
            'value' => date('d-m-Y', strtotime("+3 weeks")), // Текущая дата + 3 недели
            'compare' => '<', // Сравнение "меньше чем"
            'type' => 'DATE' // Тип данных - дата
        )
    ),
    'posts_per_page' => 3, // Количество постов
    'post_type' => 'event', // Тип записи
    'meta_key' => 'event_date', // Мета-ключ для сортировки
    'orderby' => 'meta_value', // Сортировка по значению поля
    'order' => 'ASC' // Порядок сортировки
    ); ?>
<?php $upcoming_events = new WP_Query($events_args); ?>
<?php if($upcoming_events->have_posts()): while($upcoming_events->have_posts()): $upcoming_events->the_post(); ?>
    <a href="<?php the_permalink(); ?>"><article class="post_block">
        <h2><?php the_title(); ?></h2>
        <p class="date"><?php $date = new DateTime(get_field('event_date')); echo $date->format('d-m-Y'); ?><?php // echo get_the_date('d-m-Y'); ?></p>
        <p class="text"><?php echo get_the_excerpt(); ?></p>
    </article></a>
<?php endwhile; endif; wp_reset_postdata(); ?>

Есть идеи, почему ничего не выводится? Если я выполняю простой query_posts, например:

query_posts('posts_per_page=3&post_type=event&meta_key=event_date&orderby=meta_value&order=DESC');

то он выводит события, но сортирует по новейшим событиям, а мне нужно сортировать события от сегодняшнего дня и на 3 недели вперед.

6
Комментарии

У вас включен режим отладки?

Milo Milo
20 нояб. 2014 г. 19:19:47

Нет, но я только что попробовал включить его и обнаружил, что забыл "New" перед WP_Query. Хотя это не решает мою проблему, потому что всё равно выводятся последние события. Те, у которых дата события 2015... :/ Думаю, мой meta_query должен быть неправильным, как-то так.

Dueify Dueify
20 нояб. 2014 г. 19:56:59

у вас неправильный формат даты, её надо хранить в формате yyyy-mm-dd, чтобы сортировать по дате.

Milo Milo
20 нояб. 2014 г. 20:50:52

Спасибо. Оказалось, что формат даты был неверным, как вы и указали.

Dueify Dueify
20 нояб. 2014 г. 20:55:13

Смотрите: http://wordpress.stackexchange.com/a/78048/21376

s_ha_dum s_ha_dum
20 нояб. 2014 г. 22:22:09

Еще раз спасибо. Хотя формат, который мне пришлось ввести для работы, был: Ymd, потому что именно его я использую для хранения в поле event_date.

Dueify Dueify
20 нояб. 2014 г. 22:33:11
Показать остальные 1 комментариев
Все ответы на вопрос 1
0

Необходимо ввести дату в правильном формате: Ymd или гггг-мм-дд.

20 нояб. 2014 г. 22:33:36