Сортировка по пользовательскому полю даты в порядке возрастания

26 июл. 2012 г., 20:23:44
Просмотры: 28.1K
Голосов: 0

Я нашел несколько похожих вопросов, но ни один из них не объясняет, почему код ниже не работает с сортировкой 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; ?> 

Также я пробовал много разных запросов, но ни один из них не работал, вышеприведенный скрипт - последний из тех, что у меня есть.

0
Все ответы на вопрос 3
0

После дополнительного поиска в 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; ?> 

Надеюсь, это поможет другим!

26 июл. 2012 г. 21:36:02
0

После изучения нескольких похожих постов, я собрал решение из частей различных других сообщений на 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' => '<='
            )                   
         )
    );
5 мар. 2019 г. 16:27:01
0

Для тех, кто ищет ответ на этот вопрос, есть более простой встроенный способ — можно использовать параметр 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'
));
5 февр. 2017 г. 13:29:41