如何在匹配评论者邮箱时从配置数组输出对应作者角色?
解决评论者邮箱匹配后输出对应角色的问题
你的现有代码存在几个逻辑错误,导致无法正确匹配邮箱并输出对应角色,以下是修正方案:
原代码的问题
- 变量混淆:第二层循环里,
$author才是邮箱字符串,$email是包含role的数组,原判断$email === $match_email是拿数组和字符串对比,永远不会成立 have_comments()的位置错误:这个函数应该在循环前判断是否有评论,而非放在循环内的条件里重复判断- 循环层级冗余:不需要遍历整个
$config数组,直接取verified_email组即可
修正后的完整代码
// 获取评论及评论者邮箱 $comment = get_comment(); $match_email = $comment->comment_author_email; // 配置数组 $config = [ 'verified_email' => [ 'sakshikr652@gmail.com' => [ 'role' => 'Seo Expert', ], 'sabhitra628@gmail.com' => [ 'role' => 'Manager', ] ] ]; // 先判断是否有评论且邮箱不为空 if (have_comments() && !empty($match_email)) { // 直接获取已验证邮箱组 $verified_users = $config['verified_email']; // 检查当前邮箱是否在配置中 if (isset($verified_users[$match_email])) { // 输出对应角色 echo $verified_users[$match_email]['role']; } }
代码说明
- 先通过
have_comments()确认有评论,同时确保$match_email不为空,避免无效判断 - 直接提取
$config里的verified_email用户组,省去多余的循环层级 - 用
isset()快速判断当前邮箱是否在配置数组中,存在则直接输出对应的role
如果后续需要扩展多个用户组,也可以用循环实现,修正后的循环代码如下:
if (have_comments() && !empty($match_email)) { foreach ($config as $group => $users) { // 检查当前用户组中是否存在匹配的邮箱 if (isset($users[$match_email])) { echo $users[$match_email]['role']; break; // 找到匹配后退出循环,提升效率 } } }
内容的提问来源于stack exchange,提问作者Samar Dev
相关产品推荐
相关产品推荐

