使用ASC顺序按自定义字段日期排序

时间:2012-07-26 作者:elbatron

我发现了几个类似的问题,但没有一个能解释为什么下面没有给出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; ?> 
此外,我尝试了许多不同的查询,但都没有成功,上面的脚本是我最新的。

3 个回复
最合适的回答,由SO网友:elbatron 整理而成

通过更多的谷歌搜索:

<?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; ?> 
我希望它能帮助别人!

SO网友:WongKongPhooey

在搜索了多个类似的帖子后,我从其他各种SO帖子的部分内容中总结出了一个解决方案,希望它能帮助其他人。

我有一个名为“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\' => \'<=\'
            )                   
         )
    );

SO网友:whatsnewsisyphus

对于其他引用此问题的人,还有一种更简单的内置方法,您可以使用eventDisplay 在查询中使用值upcoming, past, 或custom. 部落事件文档有点糟糕,所以谁知道自定义是什么。如果您使用tribe_get_events(), 它假设默认情况下即将到来,我相信某些查询会被自动劫持以显示即将到来的内容。

这里显示了从近期到未来,按开始日期排序的4项即将举行的活动。

array(
  \'showposts\' => 4,
  \'post_type\' => \'tribe_events\',
  \'orderby\' => \'meta_value\',
  \'order\' => \'ASC\',
  \'meta_key\' => \'_EventStartDate\',
  \'eventDisplay\' => \'upcoming\'
));

结束

相关推荐

在插件文件中使用‘DATE_DEFAULT_TIMEZONE_SET’安全吗?

我正在使用一个站点地图插件,它以非常复杂的方式设置<lastmod> (即上次修改时间)发布到GMT。暂时,在插件开发人员修复之前,我需要在插件上强制一个自定义时区。我发现的简单而直接的方法是添加以下内容date_default_timezone_set( \'America/New_York\'); 就在第一次之后<?php 在负责输出站点地图的文件中。它可以工作,而且似乎不会影响站点其余部分显示的时间戳。那么,我可以接受这个吗?还是有更好的解决方案?