WordPress多站点:调用get_site_option无法获取wp_sitemeta中template_color值
问题分析与解决方案
你遇到的问题核心是混淆了WordPress多站点中两种不同存储机制对应的读取函数:
- 你用的
get_site_option()函数,是从当前站点的专属选项表(比如wp_3_options,对应site_id=3的站点)里读取配置,而不是全局的wp_sitemeta表。 - 前任开发者把
template_color存在了wp_sitemeta表——这张表是用来存储多站点网络中每个站点的元数据的,对应的正确读取函数是get_site_meta()(WordPress 4.7及以上版本推荐),旧版本可以用get_sitemeta()。
而且你其实不需要调用 switch_to_blog(),因为读取 wp_sitemeta 表不需要切换到目标站点,直接通过站点ID就能访问,这样代码更高效。
修改后的代码如下:
foreach ( $sites as $site ) { $site_id = $site->blog_id; // 第三个参数设为true,确保返回单个字符串值而非数组 $value = get_site_meta( $site_id, 'template_color', true ); // 处理值为空的情况,输出默认提示 echo $value ?: 'not available'; }
如果你的WordPress版本比较旧(低于4.7),可以替换成 get_sitemeta(),用法几乎一致:
$value = get_sitemeta( $site_id, 'template_color', true );
这样就能正确读取到 wp_sitemeta 表中存储的主题颜色值了。
内容的提问来源于stack exchange,提问作者Hanny
相关产品推荐
相关产品推荐

