WordPress自定义字段排序,奇怪的行为:最新的帖子在末尾

时间:2015-12-17 作者:Gasim

我正在将Wordpress与高级自定义字段一起使用。我有一个名为“事件”的自定义帖子,其中有一个自定义字段“日期”(我通过ACF添加了该字段)。日期字段的格式如下:“yyyy-mm-dd.”到目前为止,使用以下代码段对自定义帖子进行排序效果良好:

$query = new WP_Query([
    \'post_type\' => \'event\',
    \'meta_key\' => \'tq_event_date\',
    \'meta_value\' => date(\'Y-m-d\'),
    \'meta_compare\' => \'<\',
    \'orderby\' => [\'meta_key\' => \'tq_event_date\'],
    \'posts_per_page\' => \'-1\'
]);

if($query->have_posts()) {
    $posts = $query->get_posts();
    foreach($posts as $post) {
        echo get_field(\'tq_event_date\', $post->ID). \' \';
    }
}
现在,我添加了一个新的活动帖子,日期为“2015-12-03”由于某种原因,排序不会对该帖子进行排序。以下是此查询的结果:

2015-08-15
2015-07-15
2015-06-02
2015-05-18
2015-04-21
2015-04-18
2015-04-17
2015-04-02
2015-03-28
2014-11-25
2014-07-14
2014-07-04
2014-06-08
2014-05-31
2014-04-25
2014-04-26
2014-03-14
2014-03-15
2014-02-23
2014-02-23
2013-12-16
2013-11-19
2013-11-12
2013-07-24
2013-06-09
2013-05-12
2013-04-26
2013-04-19
2013-04-10
2013-04-05
2012-12-08
2012-11-02
2012-10-22
2012-10-09
2012-10-07
2012-06-23
2012-03-07
2012-02-12
2012-02-07
2011-06-18
2011-05-26
2011-04-30
2011-04-06
2011-02-26
2011-02-11
2011-01-28
2010-12-28
2010-11-22
2010-10-30
2010-10-16
2010-09-16
2010-05-29
2010-05-05
2010-03-29
2010-03-23
2015-12-03
出于某种原因,最后一篇帖子是我刚刚添加的。我真的找不到这个问题存在的原因。。。我做错了什么?

编辑:更改了自定义字段datetq_event_date 但还是不起作用。

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

线路:

\'orderby\' => [\'meta_key\' => \'tq_event_date\']
不起作用。因此,根据我的上下文(所有日期都以数字开头),我可以按以下方式对项目进行排序:

\'orderby\' => \'meta_value\'
如果将来有什么变化,我认为解决问题的最好方法是用PHP:

usort($posts, function($a, $b) {
    $d1 = get_field(\'tq_event_date\', $a);
    $d2 = get_field(\'tq_event_date\', $b);
    return strcmp($d2, $d1);
});

SO网友:N00b

问题可能是您没有指定默认按字母顺序排列的meta\\u查询的类型,这可能会弄乱WP\\u query codex中所述的数字查询。

尝试以下操作:

//Note how:

   //1. meta_query is also array 
   //2. I specify that meta_value is numeric and type is date

$event_args = array(
            \'post_type\'         => \'event\',
            \'posts_per_page\'    => -1,
            \'meta_query\'        => array(
                                       array(
                                           \'key\'            => \'tq_event_date\',
                                           \'meta_value_num\' => date(Y-m-d),
                                           \'type\'           => \'DATE\', //You can also try \'NUMERIC\'
                                           \'compare\'        => \'<\',
                                       )
                                   ),
            \'orderby\' => \'meta_value\',
);

$events = new WP_Query( $event_args );

//etc

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post