WordPress按日、按月统计注册用户数 代码修正调试求助
代码问题说明
原代码存在4个导致运行异常/统计错误的问题:
- SQL逻辑错误:调用
MONTH()取注册月份,却传入代表当月日期的mday参数,字段和参数完全不匹配 - 统计范围缺失:没有加年份约束,会把历年同月/同日期的注册用户全部统计进去,结果不准
- 方法选择错误:统计单个数值用
get_results()会返回多余的对象结构,取值麻烦且效率低 - 语法不规范:数组键
mday未加引号,会触发PHP语法警告
修复后可直接使用的代码
以下代码适配WordPress原生环境,符合官方开发规范,可直接放在主题模板文件或功能插件中使用:
// 初始化WordPress数据库对象 global $wpdb; // 读取站点配置的时区对应时间,避免服务器时区和站点时区不一致导致统计偏差 $site_current_time = current_time('mysql'); // 统计今日新增注册用户 $today_new_users = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->users} WHERE DATE(user_registered) = DATE(%s)", $site_current_time )); // 统计本月新增注册用户 $month_new_users = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->users} WHERE YEAR(user_registered) = YEAR(%s) AND MONTH(user_registered) = MONTH(%s)", $site_current_time, $site_current_time )); // 按需求格式输出 echo '今日新增用户:' . esc_html($today_new_users) . '<br>'; echo '本月新增用户:' . esc_html($month_new_users);
代码说明:使用
$wpdb->prepare()做SQL参数预处理,规避SQL注入风险;输出时用esc_html()做内容转义,避免异常字符导致页面显示错乱;直接取用户ID计数比COUNT(*)查询效率更高。
内容的提问来源于stack exchange,提问作者masoud92
相关产品推荐
相关产品推荐

