为WordPress插件PHP代码添加IF ELSE实现邮件日期颜色分级
解决PropertyHive插件邮件日期颜色分级显示问题
需求说明
我安装了PropertyHive这款WordPress插件,它会向站点所有者发送包含「关键日期」详情的邮件。目前仅在截止日期已过时,邮件中对应文本会显示为红色的「Originally due on X date」。现需修改为以下颜色规则:
- 30天内到期:绿色
- 15天内到期:黄色
- 不足15天/已逾期:红色
原代码片段
$details = ''; $schedule_start_date = new DateTime($start_date); if ( $due_date < $schedule_start_date ){ // was due in the past $details = '<span style="color:#900">' . __( 'Originally due on', 'propertyhive' ) . ' ' . $due_date->format('jS M') . '</span>';
修改后的完整代码
$details = ''; $schedule_start_date = new DateTime($start_date); // 计算基准日期与截止日期的天数差 $date_diff = $schedule_start_date->diff($due_date); // 转换为带正负的天数:正数=还有N天到期,负数=已逾期N天 $days_until_due = $date_diff->days * ($date_diff->invert ? -1 : 1); // 根据天数区间设置颜色和显示文本 if ($days_until_due > 30) { // 30天以上到期:绿色 $color = '#008000'; $display_text = __( 'Due on', 'propertyhive' ); } elseif ($days_until_due > 15) { // 15-30天内到期:黄色 $color = '#FFFF00'; $display_text = __( 'Due on', 'propertyhive' ); } elseif ($days_until_due >= 0) { // 0-15天内到期:红色 $color = '#900'; $display_text = __( 'Due on', 'propertyhive' ); } else { // 已逾期:红色,显示原到期提示 $color = '#900'; $display_text = __( 'Originally due on', 'propertyhive' ); } // 组装最终的HTML内容,用esc_attr确保输出安全 $details = '<span style="color:' . esc_attr($color) . '">' . $display_text . ' ' . $due_date->format('jS M') . '</span>';
代码逻辑说明
- 日期差计算:使用
DateTime::diff()获取基准日期($schedule_start_date)与截止日期($due_date)的间隔,通过$date_diff->invert判断截止日期是在基准日期之前还是之后,转换为带正负的天数。 - 条件分支:
- 剩余天数>30:绿色显示「Due on」
- 15<剩余天数≤30:黄色显示「Due on」
- 0≤剩余天数≤15:红色显示「Due on」
- 剩余天数<0(已逾期):红色显示「Originally due on」
- 安全处理:用
esc_attr()包裹颜色值,避免潜在的XSS漏洞。
内容的提问来源于stack exchange,提问作者shaikh441
相关产品推荐
相关产品推荐

