我需要一种根据事件日期(如果存在)或发布日期(如果没有)对标签和类别档案中的帖子进行排序的方法。
我有一个用于事件和帖子的组合存档,但希望根据事件的event\\u date meta而不是发布日期来列出事件。
我知道我需要更新查询以添加“orderby”参数,但想不出构造查询参数以获得所需结果的最佳方法。
我的想法是,我需要做如下事情:
foreach($posts as $post) {
$event_start = get_post_meta($object_id, \'event_start\', TRUE);
if($event_start) {
$event_start = strtotime($event_start);
$list_timestamp_map[$object_id] = $event_start;
} else {
$post_date = get_the_date(\'Y-m-d H:i:s\',$object_id);
$post_date = strtotime($post_date);
$list_timestamp_map[$object_id] = $post_date;
}
}
arsort($list_timestamp_map);
}
基本上:
检查“event\\u start”(事件开始)字段是否有值如果有,获取/使用该日期如果没有,获取/使用发布日期根据该列表对帖子进行排序,但如何根据自定义字段数据和发布日期的组合查询/比较/排序现有存档?
我不能这样做:
function rtt_event_sorting( $query ) {
if( $query->is_main_query() && ( is_category() || is_tag() && empty( $query->query_vars[\'suppress_filters\'] ) ) {
$query->set(\'orderby\',\'meta_value\');
$query->set(\'meta_key\',\'event_start\');
$query->set(\'orderby\',\'DESC\');
return $query;
}
}
add_filter( \'pre_get_posts\', \'rtt_event_sorting\' );
因为如果我添加一个“meta\\u key”参数,它将根据该元是否存在返回帖子,而不是根据其值(如果存在)和发布日期(如果不存在)返回帖子。
我可能想得太多了,但这里最好的解决方案是什么?