WordPress插件PHP代码:foreach循环中无法为消息变量追加链接
问题排查与解决方案
针对你遇到的链接无法追加到邮件内容的问题,从以下几个方向排查:
1. 日期匹配逻辑错误
- 检查
$val['confirmed_at']的类型:如果数据库中confirmed_at存储的是datetime格式字符串(如2024-05-20 14:30:00),直接用date('d-m-Y', $val['confirmed_at'])会出错,因为date()函数需要传入时间戳。需先将字符串转为时间戳:$confirmed_date = date('d-m-Y', strtotime($val['confirmed_at'])); - 时区不一致问题:WordPress的时区设置可能与服务器时区不同,用
time()获取的时间会和数据库中的日期不匹配。改用WordPress内置的current_time('timestamp')获取符合站点时区的时间戳:$current_date = date('d-m-Y', current_time('timestamp'));
2. 严格相等判断的类型不匹配
$val['pco'] === '650'使用了严格相等(===),会同时检查值和类型:
- 如果数据库中
pco是整数类型,$val['pco']是整数,和字符串'650'比较会返回false。可以改为松散相等(==),或者统一类型:// 方法1:松散相等 if($confirmed_date === $current_date && $val['pco'] == '650') // 方法2:统一为字符串比较 if($confirmed_date === $current_date && (string)$val['pco'] === '650') // 方法3:直接用整数比较(如果pco是整数) if($confirmed_date === $current_date && $val['pco'] === 650)
3. 加入调试代码验证条件触发
在循环内添加日志输出,确认条件是否真的满足:
// 先开启WP_DEBUG(wp-config.php中定义WP_DEBUG为true) $current_date = date('d-m-Y', current_time('timestamp')); foreach( $results as $key => $val ){ $confirmed_date = date('d-m-Y', strtotime($val['confirmed_at'])); // 输出当前循环的关键数据到debug.log error_log("循环数据:pco={$val['pco']},确认日期={$confirmed_date},当前日期={$current_date}"); if($confirmed_date === $current_date && $val['pco'] === '650'){ error_log("触发pdv_message_a追加:{$val['link']}"); $pdv_message_a .= $val['link'] . "\n"; } // 其他两个if同理添加日志 }
查看wp-content/debug.log文件,就能清楚看到条件是否触发,以及触发时的链接内容。
4. 优化代码结构(可选)
将重复的日期判断提取出来,用switch简化逻辑,减少冗余:
$current_date = date('d-m-Y', current_time('timestamp')); foreach( $results as $key => $val ){ $confirmed_date = date('d-m-Y', strtotime($val['confirmed_at'])); if($confirmed_date !== $current_date){ continue; // 日期不匹配直接跳过后续判断 } switch($val['pco']){ case '650': $pdv_message_a .= $val['link'] . "\n"; break; case '620': $pdv_message_b .= $val['link'] . "\n"; break; case '660': $pdv_message_p .= $val['link'] . "\n"; break; } }
内容的提问来源于stack exchange,提问作者OHICT
相关产品推荐
相关产品推荐

