为了账号安全,请及时绑定邮箱和手机立即绑定

WordPress 一次通过 2 个自定义字段订购帖子

WordPress 一次通过 2 个自定义字段订购帖子

PHP
汪汪一只猫 2023-03-04 16:44:59
我想在同一个电话中按 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 做一些处理,将其转换为数值。


查看完整回答
反对 回复 2023-03-04
?
呼啦一阵风

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'

);


查看完整回答
反对 回复 2023-03-04
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

一个可能的简单解决方案是将文本格式化为数字。

ORDER BY LPAD(meta_key, 5, '0')

样本:

 9 = 00009
 81 = 00081
 777 = 00777

要评估查询性能的权重。


查看完整回答
反对 回复 2023-03-04
  • 3 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信