我正在将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
出于某种原因,最后一篇帖子是我刚刚添加的。我真的找不到这个问题存在的原因。。。我做错了什么?
编辑:更改了自定义字段date
到tq_event_date
但还是不起作用。
最合适的回答,由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