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

如何用update_post_meta()更新WordPress的ACF日期字段?

解决ACF日期字段用update_post_meta()更新失败的问题

我之前也踩过这个坑!ACF的日期字段(不管是jQuery Datepicker类型还是原生Date类型)不会直接识别DD/MM/YYYY这种格式化的字符串,因为它默认会把日期存储为数据库友好的YYYYMMDD格式(或者如果你的字段设置里选了存储为时间戳,那就是整数类型的时间戳)。你直接传22/09/2018这种格式,ACF没法解析,自然更新失败。

下面给你两种可行的解决方案:

方案一:用ACF官方推荐的update_field()函数(更稳妥)

ACF提供了专门的update_field()函数,它会自动处理字段的存储格式转换,比直接调用update_post_meta()更可靠,还能触发ACF的相关钩子。代码示例:

// 先把你的日期字符串转换成DateTime对象
$date_str = $arr[9]; // 你的日期:22/09/2018
$date_obj = DateTime::createFromFormat('d/m/Y', $date_str);

// 检查转换是否成功
if ($date_obj) {
    // 转换成ACF默认的存储格式YYYYMMDD
    $acf_date = $date_obj->format('Ymd');
    // 使用update_field更新(第一个参数是ACF字段的键名,第二个是值,第三个是文章ID)
    update_field('last_date', $acf_date, $post_id);
} else {
    // 处理日期格式错误的情况
    error_log('日期格式解析失败:' . $date_str);
}

方案二:直接用update_post_meta()(需要手动匹配存储格式)

如果你坚持要用update_post_meta(),那必须确保传入的值和ACF字段设置的存储格式完全一致:

$date_str = $arr[9];
$date_obj = DateTime::createFromFormat('d/m/Y', $date_str);

if ($date_obj) {
    $acf_date = $date_obj->format('Ymd'); // 对应ACF默认的存储格式
    update_post_meta($post_id, 'last_date', $acf_date);
}

额外注意事项

  • 如果你在ACF字段设置里修改了「存储格式」(比如改成了Y-m-d或者时间戳),那上面的format()参数也要对应调整:
    • 存储格式为Y-m-d:用$date_obj->format('Y-m-d')
    • 存储格式为时间戳:用$date_obj->getTimestamp()
  • 一定要用DateTime::createFromFormat()来解析日期,不要手动用explode()分割,避免处理不同分隔符(比如-或者.)或者日期月份顺序搞反的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:17:22