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

我想在同一个电话中按 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”之前,这是不好的。有什么解决办法吗?


汪汪一只猫
浏览 108回答 3
3回答

慕无忌1623718

ORDER BY您需要 WP 方式在;中提供表达式ORDER BY 0 + meta_key即对 meta_key 做一些处理,将其转换为数值。

呼啦一阵风

试试这个:配置元查询:$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');

海绵宝宝撒

一个可能的简单解决方案是将文本格式化为数字。ORDER BY LPAD(meta_key, 5, '0')样本: 9 = 00009  81 = 00081  777 = 00777要评估查询性能的权重。
打开App,查看更多内容
随时随地看视频慕课网APP