如何实现ACF字段每日自动更新 计算今日与文章发布日期天数差
实现ACF日期差值字段每日自动更新的两种方案
方案1:动态输出实时差值(优先推荐,无需定时任务)
这种方案不需要把计算结果存储到post meta表,每次调用字段时实时计算返回最新差值,从根源避免更新不及时的问题:
- 直接在需要展示差值的位置插入计算逻辑,代码如下:
$order = wc_get_order($post_id); if ($order) { $date_created = $order->get_date_created(); $datetime1 = new DateTime(); $datetime2 = new DateTime($date_created); $difference = $datetime1->diff($datetime2); echo "difference " . $difference->days . " days "; }
- 如果需要保留ACF字段的调用方式,可以通过
acf/load_value钩子实现字段动态取值:
add_filter('acf/load_value/name=datum2', function($value, $post_id, $field) { $order = wc_get_order($post_id); if (!$order) return $value; $date_created = $order->get_date_created(); $datetime1 = new DateTime(); $datetime2 = new DateTime($date_created); $difference = $datetime1->diff($datetime2); return "difference " . $difference->days . " days "; }, 10, 3);
方案2:定时任务每日批量更新存储的字段值
如果你的业务场景必须要把差值存储到post meta表中,可以使用WordPress自带的WP Cron功能实现每日更新:
- 第一步:注册每日执行的定时事件
// 站点初始化时注册定时任务,避免重复注册 add_action('wp', function() { if (!wp_next_scheduled('daily_update_datum2')) { wp_schedule_event(time(), 'daily', 'daily_update_datum2'); } });
- 第二步:编写定时触发的更新逻辑
add_action('daily_update_datum2', function() { // 按你的业务需求调整查询参数,这里以查询所有已发布的WooCommerce订单为例 $posts = get_posts([ 'post_type' => 'shop_order', 'posts_per_page' => -1, 'post_status' => ['wc-completed', 'wc-processing'], // 按需调整订单状态 ]); foreach ($posts as $post) { $order = wc_get_order($post->ID); if (!$order) continue; $date_created = $order->get_date_created(); $datetime1 = new DateTime(); $datetime2 = new DateTime($date_created); $difference = $datetime1->diff($datetime2); $verschil = "difference " . $difference->days . " days "; update_post_meta($post->ID, 'datum2', $verschil); } });
注意:默认WP Cron需要有用户访问站点才会触发执行,若站点访问量较低,可配置服务器级Crontab定时访问站点的wp-cron.php文件保证执行精度。
内容的提问来源于stack exchange,提问作者Nico Weerheim
相关产品推荐
相关产品推荐

