WordPress多站点get_sites()仅返回前99个站点的问题求助
嘿,这个情况我在维护大型WordPress多站点的时候碰过好多次!
为什么
get_sites()只返回前99个站点? 这其实是WordPress的默认参数限制搞的鬼:
get_sites()函数自带一个number参数,默认值就是99。WordPress这么设计是为了避免一次性拉取过多站点数据,防止服务器因为处理大量查询而变慢,算是一种性能保护机制。- 当你的站点总数超过99时,函数会自动启用分页逻辑,只返回第一页的99条结果,剩下的站点需要通过调整参数才能获取到。
解决方法:调整
get_sites()的参数 你有两种靠谱的方式拿到所有站点:
1. 直接设置number为-1获取全部
如果你的服务器性能足够,直接把number参数设为-1就能一次性拿到所有站点:
$all_sites = get_sites( array( 'number' => -1 ) ); print_r( array_values( $all_sites ) );
⚠️ 注意:如果站点数量特别多(比如上千个),这种方式可能会占用较多内存,建议先测试一下性能再投入使用。
2. 分页循环分批获取(更稳妥)
要是担心全量查询拖慢服务器,可以用分页循环的方式分批拉取:
$all_sites = array(); $current_page = 1; $sites_per_page = 100; // 可以根据服务器性能调整这个数值 while ( true ) { $batch_sites = get_sites( array( 'number' => $sites_per_page, 'offset' => ( $current_page - 1 ) * $sites_per_page ) ); if ( empty( $batch_sites ) ) { break; // 没有更多站点了,退出循环 } $all_sites = array_merge( $all_sites, $batch_sites ); $current_page++; } print_r( array_values( $all_sites ) );
这种方式每次只拉取固定数量的站点,能有效降低单次查询的资源消耗,适合超大型多站点环境。
至于你提到的插件只显示前99个站点,大概率是插件开发者没处理这个默认限制——他们直接调用了get_sites()而没修改number参数。你可以给插件作者提个issue,或者自己动手修改插件里调用get_sites()的代码,把参数改成上面提到的两种方式之一就行。
内容的提问来源于stack exchange,提问作者chrislovessushi
相关产品推荐
相关产品推荐

