如何在WP多站点中为wp_get_sites()添加自定义元数据
为WordPress多站点添加自定义元数据并在wp_get_sites()中返回
WordPress多站点有专门的表用来存储站点级自定义元信息,同时可以通过钩子将这些元数据注入到wp_get_sites()的返回结果中,具体实现如下:
一、站点自定义元数据的存储表
存在官方提供的wp_blogmeta表(表前缀会根据你的WordPress配置调整),这个表和文章元数据表wp_postmeta结构一致,包含meta_id、blog_id、meta_key、meta_value四个字段,专门用来存储单个站点的自定义信息,完全适合存放blog_currency: "USD"这类字段。
二、实现步骤
1. 添加自定义站点元数据
使用WordPress内置的add_blog_meta()函数添加元数据,示例:
// 给ID为1的站点添加货币字段 add_blog_meta( 1, 'blog_currency', 'USD' );
你可以在插件激活逻辑、后台设置保存时调用这个函数,也可以通过WordPress后台的代码片段工具执行,尽量避免直接操作数据库。
2. 让wp_get_sites()返回自定义元数据
通过site_details过滤器,把自定义元数据注入到每个站点的返回结果里,将以下代码添加到主题的functions.php或自定义插件中:
add_filter( 'site_details', 'inject_custom_blog_meta', 10, 2 ); function inject_custom_blog_meta( $site_data, $blog_id ) { // 获取已添加的货币元数据 $blog_currency = get_blog_meta( $blog_id, 'blog_currency', true ); if ( ! empty( $blog_currency ) ) { $site_data['blog_currency'] = $blog_currency; } // 要添加更多字段,直接重复上面的逻辑即可 return $site_data; }
之后调用wp_get_sites(),返回的每个站点对象就会包含blog_currency字段。
三、关于弃用的get_blog_list()
get_blog_list()已经被WordPress官方标记为弃用,建议优先使用wp_get_sites()。如果必须兼容旧代码,可以用blog_list过滤器处理:
add_filter( 'blog_list', 'inject_custom_meta_to_blog_list' ); function inject_custom_meta_to_blog_list( $blogs ) { foreach ( $blogs as &$blog ) { $blog_currency = get_blog_meta( $blog['blog_id'], 'blog_currency', true ); if ( $blog_currency ) { $blog['blog_currency'] = $blog_currency; } } return $blogs; }
内容的提问来源于stack exchange,提问作者Joseph Adegbola
相关产品推荐
相关产品推荐

