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

WordPress百万用户库慢查询排查及终止方案咨询

定位慢查询触发来源

要找到这个慢查询的触发位置,可添加以下调试代码到主题的functions.php文件:

add_action('query', function($query) {
    // 标准化查询语句,避免格式差异导致匹配失败
    $target = trim(preg_replace('/\s+/', ' ', "SELECT wp_users.ID FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id ) WHERE 1=1 AND ( ( wp_usermeta.meta_key = 'wp_user_level' AND wp_usermeta.meta_value != '0' ) ) ORDER BY display_name ASC LIMIT 0, 50"));
    $current = trim(preg_replace('/\s+/', ' ', $query));
    
    if ($current === $target) {
        // 将调用栈写入服务器错误日志(生产环境推荐)
        error_log(print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true));
        // 调试阶段也可直接输出调用栈到页面(仅临时使用)
        // echo '<pre>' . print_r(debug_backtrace(), true) . '</pre>';
    }
});

部署后触发查询,查看服务器日志或页面输出的调用栈,就能明确是哪个插件、主题文件或核心功能发起的请求。

阻止慢查询执行

根据触发来源的不同,采取对应方案:

  • 插件/主题触发:直接禁用对应插件,或修改主题/插件代码,移除该查询逻辑。
  • 核心功能触发:若为WordPress核心功能发起,可通过pre_user_query钩子拦截,强制返回空结果:
add_action('pre_user_query', function($user_query) {
    $meta_query = $user_query->meta_query;
    // 匹配目标查询的元数据条件
    if (isset($meta_query[0]['key'], $meta_query[0]['value'], $meta_query[0]['compare'])
        && $meta_query[0]['key'] === 'wp_user_level'
        && $meta_query[0]['value'] === '0'
        && $meta_query[0]['compare'] === '!=') {
        // 修改查询语句,直接返回空结果
        $user_query->query_from = "FROM wp_users WHERE 1=0";
    }
});

你之前使用的remove_post_type_support仅作用于文章类型的作者模块,和该用户查询无关,因此无法解决问题。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:08:18