求助:统计meta字段含当前用户邮箱的WordPress文章数量
解决方法
问题出在原代码用了精确匹配,当pds_project_manager字段存储多个邮箱(比如用逗号分隔的字符串)时,只有字段内容和当前用户邮箱完全一致才会被统计,自然匹配不到包含该邮箱的多条记录。
你需要修改meta_query里的匹配规则,改用模糊匹配或正则匹配来定位包含当前用户邮箱的项目。下面是两种可行的修改方案:
方案1:LIKE模糊匹配(适合简单场景)
如果你的邮箱是用固定分隔符(比如逗号、空格)分开的,直接用LIKE匹配即可:
$current_user = wp_get_current_user(); $display_name = $current_user->display_name; $args_pm = array( 'posts_per_page' => -1, 'post_type' => 'project', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'status', 'value' => '1' ), array( 'key' => 'pds_project_manager', 'value' => $current_user->user_email, 'compare' => 'LIKE' // 添加模糊匹配规则 ) ) ); $posts_pm = get_posts($args_pm); $pm_count = count($posts_pm); echo "$display_name's Active Projects: $pm_count";
方案2:正则匹配(更严谨,避免误匹配)
如果担心LIKE会匹配到类似user@example.com和user@example.com.cn这种部分重叠的邮箱,可以用正则匹配,确保匹配到完整的邮箱:
$current_user = wp_get_current_user(); $display_name = $current_user->display_name; $user_email = $current_user->user_email; $args_pm = array( 'posts_per_page' => -1, 'post_type' => 'project', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'status', 'value' => '1' ), array( 'key' => 'pds_project_manager', 'value' => "(^|,)$user_email(,|$)", // 匹配开头/逗号后的邮箱,以及邮箱后的逗号/结尾 'compare' => 'REGEXP' // 使用正则匹配 ) ) ); $posts_pm = get_posts($args_pm); $pm_count = count($posts_pm); echo "$display_name's Active Projects: $pm_count";
说明
- 方案1简单直接,但如果邮箱存在部分字符重叠的情况可能会误统计;
- 方案2用正则限定了邮箱的前后边界(要么是字符串开头/结尾,要么是分隔符逗号),匹配更精准,适合对数据准确性要求高的场景。
内容的提问来源于stack exchange,提问作者Webbb
相关产品推荐
相关产品推荐

