在WordPress中如何获取当前用户的特定格式用户元数据
获取特定格式的用户元数据及提取用户ID列表
要获取当前用户所有键为add-user-id-[用户ID]格式的元数据并提取其中的用户ID列表,可以用以下两种方法实现:
方法一:直接查询数据库(高效推荐)
通过$wpdb执行SQL查询匹配元键前缀,性能更优,适合数据量较大的场景:
global $wpdb; $current_user_id = get_current_user_id(); // 查询所有以add-user-id-开头的元键 $meta_rows = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key LIKE %s", $current_user_id, 'add-user-id-%' ) ); $user_ids = []; if (!empty($meta_rows)) { foreach ($meta_rows as $row) { // 拆分出用户ID部分 $parts = explode('add-user-id-', $row->meta_key); if (isset($parts[1]) && is_numeric($parts[1])) { $user_ids[] = (int)$parts[1]; } } } // 去除重复的用户ID $user_ids = array_unique($user_ids);
方法二:获取所有元数据后过滤(适合小数据量)
先获取当前用户的全部元数据,再过滤出符合前缀的键并提取ID:
$current_user_id = get_current_user_id(); $all_user_meta = get_user_meta($current_user_id); $user_ids = []; foreach ($all_user_meta as $meta_key => $meta_value) { // 检查元键前缀是否匹配 if (str_starts_with($meta_key, 'add-user-id-')) { $user_id = str_replace('add-user-id-', '', $meta_key); if (is_numeric($user_id)) { $user_ids[] = (int)$user_id; } } } // 去重处理 $user_ids = array_unique($user_ids);
补充提示
- 如果你的PHP版本低于8.0,
str_starts_with()无法使用,可以替换为substr($meta_key, 0, 13) === 'add-user-id-'(13是add-user-id-的字符长度) - 若需要同时获取元数据的值,可在SQL查询中加入
meta_value字段,或在第二种方法中直接使用$meta_value变量
内容的提问来源于stack exchange,提问作者arena arens
相关产品推荐
相关产品推荐

