基于周数间隔与起始日期计算设备下次检查日期的WordPress函数开发
如何完善WordPress短代码函数来计算设备下次检查日期?
我正在编写一个WordPress短代码函数,用来计算设备的下次检查日期,但目前代码还没完成。当前的代码如下:
function get_next_check(){ $today = date(get_option('date_format')); $first_check = types_get_field_meta_value( 'first_check', $post_id ); // 间隔为周数,例如:月=4,年=52 $interval = types_get_field_meta_value( 'interval', $post_id ); // 计算今日之后的下一次检查日期 $next_check = ; return $next_check; } add_shortcode( 'next_check', 'get_next_check' );
我的思路是生成所有可能的检查日期数组,逐个和今日日期对比,返回符合条件的下一个日期,但不知道具体该怎么实现,请问该如何完善这个函数?
解决方案
你的思路完全没问题,我们可以通过时间戳来处理日期计算,避免字符串对比的麻烦,下面是完善后的函数:
function get_next_check(){ // 全局获取当前文章ID,确保能拿到自定义字段值 global $post; $post_id = $post->ID; // 获取今日日期的时间戳(0点整,避免当天检查的情况被忽略) $today_timestamp = strtotime('today'); // 获取首次检查日期并转换为时间戳 $first_check_str = types_get_field_meta_value( 'first_check', $post_id ); $first_check_timestamp = strtotime($first_check_str); // 获取间隔周数,默认设为4周(1个月)防止空值 $interval_weeks = intval(types_get_field_meta_value( 'interval', $post_id )) ?: 4; $interval_seconds = $interval_weeks * 7 * 24 * 60 * 60; // 转换为秒数 $next_check_timestamp = $first_check_timestamp; // 如果首次检查日期已经过去,循环生成后续检查日期 while ($next_check_timestamp <= $today_timestamp) { $next_check_timestamp += $interval_seconds; } // 用WordPress设置的日期格式返回结果 $next_check = date(get_option('date_format'), $next_check_timestamp); return $next_check; } add_shortcode( 'next_check', 'get_next_check' );
关键细节说明:
- 获取文章ID:通过
global $post拿到当前文章的ID,确保能正确读取自定义字段值;如果需要支持指定文章ID,可以给短代码加参数扩展。 - 时间戳处理:把所有日期转成时间戳,这样加减和对比都更准确,
strtotime('today')会把今日日期设为当天0点,避免当天的检查日期被误判为已过期。 - 间隔转换:把周数转成秒数,方便直接累加计算后续日期。
- 循环逻辑:从首次检查日期开始,不断加上间隔时间,直到找到第一个晚于今日的日期,这就是我们要的下次检查日期。
- 空值处理:给
$interval_weeks加了默认值4,防止自定义字段为空时函数出错。
内容的提问来源于stack exchange,提问作者warm__tape




