Сортировка по пользовательскому полю даты в порядке возрастания
Я нашел несколько похожих вопросов, но ни один из них не объясняет, почему код ниже не работает с сортировкой ASC. С DESC он работает.
По сути, это запрос, который должен выводить записи, где значения произвольного поля равны или больше текущей даты, затем расположить их в обратном порядке, так чтобы первая запись была той, у которой значение произвольного поля ближе всего к текущей дате.
<?php query_posts($query_string . '&showposts=4&order=ASC&post_type=custompost&meta_key=mydate&orderby=meta_value'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php $todays_date = date("Y/m/j"); ?>
<?php $today = strtotime($todays_date); ?>
<?php $exp_date = get_post_meta('mydate'); ?>
<?php $expiration_date = strtotime($exp_date); ?>
<?php if ($expiration_date >= $today) { ?>
<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<?php } else { ?>
<?php };?>
<?php endwhile; ?>
<?php else : ?>
<?php endif; ?>
Также я пробовал много разных запросов, но ни один из них не работал, вышеприведенный скрипт - последний из тех, что у меня есть.

После дополнительного поиска в Google:
<?php
$today = date("Y/m/j");
query_posts(array(
'post_type' => 'custompost',
'posts_per_page' => 4,
'meta_key' => 'mydate',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'mydate',
'meta-value' => $value,
'value' => $today,
'compare' => '>=',
'type' => 'CHAR'
)
)
));
if (have_posts()) :
while (have_posts()) : the_post();
?>
<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<?php endwhile; ?>
<?php else : ?>
<?php endif; ?>
Надеюсь, это поможет другим!

После изучения нескольких похожих постов, я собрал решение из частей различных других сообщений на Stack Overflow. Надеюсь, это поможет кому-то ещё.
У меня было пользовательское мета-поле под названием "date" (не самое лучшее название, я знаю), и этот запрос показывает все записи с пользовательским мета-полем "date" в будущем, сортируя их по ближайшей к текущей дате.
$args = array(
'post_type' => 'training-course',
'posts_per_page' => '-1',
'meta_key' => 'date',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'date',
'value' => date("YYmmdd"),
'compare' => '<='
)
)
);

Для тех, кто ищет ответ на этот вопрос, есть более простой встроенный способ — можно использовать параметр eventDisplay
в запросе со значениями upcoming
(предстоящие), past
(прошедшие) или custom
(пользовательский). Документация Tribe Events оставляет желать лучшего, так что неизвестно, что именно делает custom
. Если вы используете функцию tribe_get_events()
, по умолчанию она предполагает выборку предстоящих событий, и, кажется, некоторые запросы автоматически перенаправляются на отображение предстоящих событий.
Вот пример запроса, который выводит 4 предстоящих события, упорядоченных по дате начала — от ближайших к будущим.
array(
'showposts' => 4,
'post_type' => 'tribe_events',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_key' => '_EventStartDate',
'eventDisplay' => 'upcoming'
));
