ACF时间日期选择器能否设置多个自定义返回格式?
解决方案
ACF 原生暂不支持单个日期时间字段同时设置多个默认返回格式,但可以通过两种无侵入的方式实现你的需求,完全不需要新增额外字段:
方案1:调用时直接指定输出格式(最简便)
ACF 的 get_field() 函数支持第三个参数自定义日期时间输出格式,会覆盖后台设置的默认返回格式,不需要调整现有字段配置:
- 获取适配Gmail/Outlook/iCal导出的
Ymd格式:
调用代码:get_field('你的日期时间字段名', 目标文章ID, 'Ymd') - 获取前端展示用的
Y/m/d H:i格式:
调用代码:get_field('你的日期时间字段名', 目标文章ID, 'Y/m/d H:i')
注:全局文章循环场景下第二个参数可留空
方案2:封装成统一调用函数(便于多场景复用)
如果站点多处需要调用该字段,可以把格式规则封装到主题的 functions.php 文件中,后续需要新增/修改格式只需要调整一次代码:
function custom_acf_dt_formats(string $field_key, $post_id = null): array { // 第二个参数传false获取ACF数据库存储的原始时间值,避免默认格式干扰 $raw_dt = get_field($field_key, $post_id, false); if (empty($raw_dt)) { return []; } $dt_obj = DateTime::createFromFormat('Y-m-d H:i:s', $raw_dt); return [ 'ical' => $dt_obj->format('Ymd'), 'display' => $dt_obj->format('Y/m/d H:i'), // 后续需要其他格式直接在这里新增数组项即可 ]; }
调用示例:
// 拿iCal导出用格式 $ical_dt = custom_acf_dt_formats('event_time')['ical'] ?? ''; // 拿前端展示用格式 $show_dt = custom_acf_dt_formats('event_time')['display'] ?? '';
内容的提问来源于stack exchange,提问作者Matthew Wright
相关产品推荐
相关产品推荐

