You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按current_time('mysql')生成的meta_value实现文章查询排序?

问题原因

你当前的查询没有指定自定义字段的类型,orderby=meta_value默认将字段值作为普通字符串处理,orderby=meta_value_num会将值转为数值排序,二者都不适配Y-m-d H:i:s格式的时间字段排序规则,因此出现排序错乱的问题。

修复方案

在查询参数中新增meta_type参数声明字段类型为DATETIME,同时将orderby参数调整为meta_value_datetime(WordPress 4.2及以上版本支持),修改后的代码如下:

$args = [
         'post_type'        => 'komik',
         'post_status'      => 'publish',
         'order'            => 'DESC',
         'orderby'          => 'meta_value_datetime',
         'meta_key'         => 'komik_last_update',
         'meta_type'        => 'DATETIME',
         'no_found_rows'    => true,
         'posts_per_page'   => 20
     ];

注意事项

  • 若使用的WordPress版本低于4.2,无需修改orderby参数,仅添加meta_type='DATETIME'配置即可生效,数据库会按声明的日期时间类型处理排序逻辑。
  • 需确保所有文章的komik_last_update字段存储格式统一为Y-m-d H:i:s的标准MySQL时间格式,无格式异常、内容缺失的情况。
  • 若存在部分文章未设置该自定义字段的情况,可以添加meta_query参数过滤无该字段的文章,避免干扰排序:
$args = [
         'post_type'        => 'komik',
         'post_status'      => 'publish',
         'order'            => 'DESC',
         'orderby'          => 'meta_value_datetime',
         'meta_key'         => 'komik_last_update',
         'meta_type'        => 'DATETIME',
         'meta_query'       => [
             [
                 'key'     => 'komik_last_update',
                 'compare' => 'EXISTS',
             ]
         ],
         'no_found_rows'    => true,
         'posts_per_page'   => 20
     ];

内容的提问来源于stack exchange,提问作者Hadezuka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:06:04