如何筛选MySQL单字段中存储的多条目s2member用户权限数据
快速提取s2member用户权限到期时间的落地方案
方案1:MySQL直接查询+导出CSV(最快直接)
s2member的序列化数据可以用MySQL字符串函数直接解析,不需要额外工具。先根据你的实际表名(默认是wp_usermeta)执行以下SQL查询:
SELECT user_id AS 用户ID, -- 提取等级数值 SUBSTRING_INDEX(SUBSTRING_INDEX(meta_value, '"level";i:', -1), ';', 1) AS 等级, -- 转换等级到期时间为可读格式 FROM_UNIXTIME(SUBSTRING_INDEX(SUBSTRING_INDEX(meta_value, '"level_time";i:', -1), ';', 1)) AS 等级到期时间, -- 提取自定义权限(ccap)名称 SUBSTRING_INDEX(SUBSTRING_INDEX(meta_value, '"ccap";s:[0-9]+:"', -1), '";', 1) AS 自定义权限, -- 转换权限到期时间为可读格式 FROM_UNIXTIME(SUBSTRING_INDEX(SUBSTRING_INDEX(meta_value, '"ccap_time";i:', -1), ';', 1)) AS 权限到期时间 FROM wp_usermeta -- 替换成你的实际表名 WHERE meta_key IN ('s2member_access_meta', 's2member_subscr_meta') -- 根据你的实际meta_key调整 AND meta_value LIKE '%level_time%'
执行后,用MySQL客户端(phpMyAdmin/Navicat等)的「导出」功能选择CSV格式,直接得到可用于Excel/Google Sheets的表格。
方案2:导出原始CSV后用Excel/Google Sheets公式解析(无需代码)
先把wp_usermeta表导出为CSV,然后在Excel/Google Sheets中用公式提取数据:
Excel公式示例:
- 提取等级:
=MID(D2,FIND("""level"";i:",D2)+LEN("""level"";i:"),FIND(";",D2,FIND("""level"";i:",D2)+LEN("""level"";i:")) - (FIND("""level"";i:",D2)+LEN("""level"";i:"))) - 转换等级到期时间:
=IFERROR(FROMUNIXTIME(MID(D2,FIND("""level_time"";i:",D2)+LEN("""level_time"";i:"),FIND(";",D2,FIND("""level_time"";i:",D2)+LEN("""level_time"";i:")) - (FIND("""level_time"";i:",D2)+LEN("""level_time"";i:")))),"无") - 提取自定义权限:
=MID(D2,FIND("""ccap"";s:",D2)+LEN("""ccap"";s:")+2,FIND(""";",D2,FIND("""ccap"";s:",D2)) - (FIND("""ccap"";s:",D2)+LEN("""ccap"";s:")+2))
Google Sheets公式示例:
Google Sheets没有FROMUNIXTIME,用以下公式转换时间戳:
=IFERROR(DATE(1970,1,1)+(MID(D2,FIND("""level_time"";i:",D2)+LEN("""level_time"";i:"),FIND(";",D2,FIND("""level_time"";i:",D2)+LEN("""level_time"";i:")) - (FIND("""level_time"";i:",D2)+LEN("""level_time"";i:")))/86400),"无")
方案3:WordPress一键导出脚本(复制即用)
在WordPress根目录新建一个名为export-s2member-perms.php的文件,粘贴以下代码,访问该文件即可直接下载CSV:
<?php require_once('wp-load.php'); // 设置CSV响应头 header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=s2member-user-permissions.csv'); $output = fopen('php://output', 'w'); // 写入表头 fputcsv($output, ['用户ID', '等级', '等级到期时间', '自定义权限(CCAP)', '权限到期时间']); // 遍历所有用户 $users = get_users(); foreach ($users as $user) { // 替换为你的实际meta_key,比如s2member_access_meta或s2member_subscr_meta $access_meta = get_user_meta($user->ID, 's2member_access_meta', true); // 跳过无效数据 if (!is_array($access_meta)) { fputcsv($output, [$user->ID, '无', '无', '无', '无']); continue; } // 提取并格式化数据 $level = $access_meta['level'] ?? '无'; $level_expiry = isset($access_meta['level_time']) ? date('Y-m-d H:i:s', $access_meta['level_time']) : '无'; $ccap = isset($access_meta['ccap']) ? (is_array($access_meta['ccap']) ? implode(', ', $access_meta['ccap']) : $access_meta['ccap']) : '无'; $ccap_expiry = isset($access_meta['ccap_time']) ? date('Y-m-d H:i:s', $access_meta['ccap_time']) : '无'; fputcsv($output, [$user->ID, $level, $level_expiry, $ccap, $ccap_expiry]); } fclose($output); exit;
注意:使用前确认wp-load.php的路径正确,执行完后建议删除该脚本以保证安全。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

