WordPress ACF日期选择器字段更新:保留时间并设为当日日期
实现ACF日期字段每日自动更新(保留固定时间)
核心思路
- 页面加载时检查目标文章的ACF日期时间字段,若日期不是当日,则将日期替换为当天,保留原有时间部分
- 利用PHP DateTime类解析、重组日期时间字符串,确保格式符合ACF DateTime字段要求(
Y-m-d H:i:s)
代码实现
假设你的ACF日期时间字段键是countdown_time,三篇文章的ID分别是100、101、102(请替换为实际ID),将以下代码添加到主题的functions.php文件中:
function update_acf_countdown_date_daily() { // 仅在前台页面加载时执行,避免后台不必要的更新 if (is_admin()) return; // 目标文章ID列表,替换为你的三篇文章ID $target_post_ids = [100, 101, 102]; $today = new DateTime(); $today_date = $today->format('Y-m-d'); foreach ($target_post_ids as $post_id) { // 获取当前ACF字段的原始日期时间值(Y-m-d H:i:s格式) $current_datetime = get_field('countdown_time', $post_id, false); if (!$current_datetime) continue; // 解析当前日期时间,提取时间部分 $current_dt = DateTime::createFromFormat('Y-m-d H:i:s', $current_datetime); if (!$current_dt) continue; $current_date = $current_dt->format('Y-m-d'); $target_time = $current_dt->format('H:i:s'); // 仅当日期不符时更新字段,减少数据库操作 if ($current_date !== $today_date) { $new_datetime = $today_date . ' ' . $target_time; update_field('countdown_time', $new_datetime, $post_id); } } } // 挂载到页面渲染前的钩子,确保倒计时组件加载前完成更新 add_action('template_redirect', 'update_acf_countdown_date_daily');
代码说明
get_field第三个参数传false,直接获取ACF存储的原始格式字符串,避免自动转换为时间戳或其他格式导致的解析错误- 用
DateTime类处理日期时间,比手动拼接字符串更可靠,能自动处理时区、格式兼容等问题 - 仅在日期不一致时执行更新,减少数据库写入次数,优化性能
- 限制仅前台执行,避免后台操作(如编辑文章)时触发不必要的更新
注意事项
- 确保你的ACF字段类型是日期时间选择器,且存储格式设置为
Y-m-d H:i:s(ACF默认设置) - 替换代码中的
countdown_time为你的实际ACF字段键 - 替换
$target_post_ids数组中的ID为你的三篇文章的实际ID - 如果需要通过分类、标签等条件批量筛选目标文章,可以修改
$target_post_ids的获取逻辑,比如用get_posts查询符合条件的文章ID
内容的提问来源于stack exchange,提问作者TobyG
相关产品推荐
相关产品推荐

