You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:统计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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:35:35