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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:12:11