我想在同一个电话中按 2 个自定义字段对帖子进行排序。这怎么可能?下一个代码订购成功,但仅通过 1 个 NUMBER 自定义字段(不是 STRING):add_action('pre_get_posts', function ($q) { if ( !is_admin() // Target only front end queries && $q->is_main_query() // Target the main query only && ($q->is_search() || $q->is_post_type_archive('data-base')) ) { $q->set('meta_key', 'custom_field_1'); $q->set('order', 'DESC'); $q->set('orderby', 'meta_value'); }});更新 1:目前@Mohammed Yassine CHABLI 的第一个答案有效,但它不是按 排序number,而是按String. 这意味着“81”会排在“9”之前,这是不好的。有什么解决办法吗?
3 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
ORDER BY
您需要 WP 方式在;中提供表达式
ORDER BY 0 + meta_key
即对 meta_key 做一些处理,将其转换为数值。
呼啦一阵风
TA贡献1802条经验 获得超6个赞
试试这个:
配置元查询:
$meta_query = array(
'relation' => 'AND',
'clause1' => array(
'key' => 'first key of your meta',
'compare' => 'EXISTS',
),
'clause2' => array(
'key' => 'second key of your meta',
'compare' => 'EXISTS',
));
$q->set('meta_query', $meta_query);
$q->set('orderby',array(
'clause1' => 'DESC',
'clause2' => 'ASC'
)
);
如果您想按相同方向排序:
$q->set('orderby' =>'clause1 clause2',
'order' =>'ASC'
);
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
一个可能的简单解决方案是将文本格式化为数字。
ORDER BY LPAD(meta_key, 5, '0')
样本:
9 = 00009 81 = 00081 777 = 00777
要评估查询性能的权重。
- 3 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消