首页 > 代码

wordpress——按条件移除 GROUP BY wp_posts.ID

如果你的网站文章量非常大(如几十万至上百万),你可以按条件移除 GROUP BY wp_posts.ID,以减少查询时间和临时表创建压力。

下面是一个推荐的代码片段,适用于大数据环境,只在前台主查询中生效,并排除搜索页和 admin 区域:

高性能环境推荐代码(适合大数据站点使用)


add_filter('posts_groupby', function ($groupby, $query) {
    // 仅作用于前台主查询,排除后台、搜索页、REST API等
    if (!is_admin() && $query->is_main_query() && !is_search() && !defined('REST_REQUEST')) {
        // 可按需限制到归档页、首页等(可选)
        if (is_home() || is_category() || is_tag() || is_tax() || is_date()) {
            if (strpos($groupby, 'wp_posts.ID') !== false) {
                return '';
            }
        }
    }
    return $groupby;
}, 10, 2);

条件 意义
!is_admin() 避免影响后台
$query->is_main_query() 确保是主循环(防止影响小工具、二次查询)
!is_search() 搜索页更容易出现重复文章,最好保留 GROUP BY
!defined(‘REST_REQUEST’) 防止影响 WordPress REST API 查询
strpos($groupby, ‘wp_posts.ID’) !== false 只有确实存在才移除,防止误操作



  • 彻底删除wordpress里的global-styles-inline-css
  • <style id='global-styles-inline-css' type= […]

  • 批量设置wordpress文章分类,把文章 ID 区间为 1256869 到 1257421批量设置分类为 ID =5
  • 将 cuwen.wp_posts 中 文章 ID 区间为 1256869 到 1257421(含) 的文章批量 […]

  • 同一台服务器里的两个wordpress数据库文章内容叠加复制
  • 问题:同一台服务器里的两个wordpress数据库,我要把名为temp数据库里的wp_posts的所有文章 全 […]

  • WordPress 如何在首页与内页用不同的菜单或header
  • 开发wordpress主题时,首页的header内容与内页的header内容希望不一样,这时就要用到WordP […]

  • wordpress有必要在body内加<body <?php body_class(); ?>吗?
  • 是 WordPress 主题开发中非常有用的一部分,建议保留。它会自动输出一些根据页面类型、用户状态、文章分类 […]

  • 推荐几个wordpress生成 整站 sitemap插件
  • 方法一:使用 WordPress 插件(推荐) 1. **使用 Rank Math SEO 插件(推荐)) 优 […]