php - 如何使用 WPQuery 获取有序结果
问题描述
我有一个events
自定义帖子类型,我正在尝试订购它们,但我所做的似乎没有改变它们的顺序。我正在使用高级自定义字段,所以我将 设置为meta_key
我关心的属性。
这个查询有什么问题吗?
function events_archive( $query ) {
if( is_admin() ) {
return $query;
}
if( $query->is_post_type_archive('events') && $query->is_main_query()) {
$query->set('meta_key', 'start_date');
$query->set('orderby', 'meta_value');
$query->set('order', 'ASC');
$query->set('meta_query', array(
array(
'key' => 'start_date',
'value' => date('Ymd'),
'type' => 'DATE',
'compare' => '>=',
)
)
);
return $query;
}
}
我得到了结果,但我注意到我可以交换$query->set('order', 'ASC')
并且$query->set('order', 'DESC');
它不会改变顺序。
我看过一些类似的 SO 帖子,建议使用$query->set('orderby', 'meta_value_num');
而不是,$query->set('orderby', 'meta_value');
但这似乎对排序没有任何影响。
关于如何让订购按预期工作的任何建议?
解决方案
您可以尝试使用元值作为日期以及设置元类型。当您进行实际的元查询时,您指定了查询帖子的日期,但您并没有告诉查询必须按日期对它们进行排序。
function events_archive( $query ) {
if( is_admin() ) {
return $query;
}
if( $query->is_post_type_archive('events') && $query->is_main_query()) {
$query->set('meta_key', 'start_date');
$query->set('meta_type', 'DATE');
$query->set('orderby', 'meta_value_date');
$query->set('order', 'ASC');
$query->set('meta_query', array(
array(
'key' => 'start_date',
'value' => date('Ymd'),
'type' => 'DATE',
'compare' => '>=',
)
)
);
return $query;
}
}
推荐阅读
- python-3.x - 如何以任何顺序查找pandas数据框中的一对列与对的交集?
- swift - Swift 中的 macOS 警报窗口
- python-3.x - 如何从字符串中提取字符串然后将字符串转换为列表并仅从列表中获取特定值?
- java - 连接安全 Websocket 时连接中止
- reactjs - React native:标签栏按钮“OnPress”在标签栏范围之外不起作用
- raspberry-pi - 触摸屏上 Kiosk Chromium 中的纵向模式
- python - 如何为我训练有素的机器学习模型提供输入以预测输出?
- python - “NoneType”类型的对象在合并排序中没有 len()
- php - 我应该将 redis GET/SET 放在模型中吗?
- python - 从零开始支持向量机