populate_site_meta()
云策文档标注
概述
populate_site_meta() 函数用于为指定站点创建元数据并设置默认值,支持自定义元数据键值对,并包含过滤钩子以在创建时修改元数据。
关键要点
- 函数接受两个参数:必需的站点 ID 和可选的元数据数组。
- 使用 apply_filters('populate_site_meta', $meta, $site_id) 钩子允许在插入前过滤元数据。
- 自动处理数组类型元数据的序列化,并批量插入到 blogmeta 表中。
- 操作后清除相关缓存以确保数据一致性。
代码示例
function populate_site_meta( $site_id, array $meta = array() ) {
global $wpdb;
$site_id = (int) $site_id;
if ( ! is_site_meta_supported() ) {
return;
}
if ( empty( $meta ) ) {
return;
}
$site_meta = apply_filters( 'populate_site_meta', $meta, $site_id );
$insert = '';
foreach ( $site_meta as $meta_key => $meta_value ) {
if ( is_array( $meta_value ) ) {
$meta_value = serialize( $meta_value );
}
if ( ! empty( $insert ) ) {
$insert .= ', ';
}
$insert .= $wpdb->prepare( '( %d, %s, %s)', $site_id, $meta_key, $meta_value );
}
$wpdb->query( "INSERT INTO $wpdb->blogmeta ( blog_id, meta_key, meta_value ) VALUES " . $insert );
wp_cache_delete( $site_id, 'blog_meta' );
wp_cache_set_sites_last_changed();
}注意事项
- 函数仅在站点元数据支持启用时执行,否则直接返回。
- 传入的元数据数组为空时,函数不会执行任何操作。
- 使用 wpdb::prepare() 确保 SQL 查询的安全性,防止注入攻击。
- 操作后需手动管理缓存,以保持系统性能和数据准确性。
原文内容
Creates WordPress site meta and sets the default values.
Parameters
$site_idintrequired-
Site ID to populate meta for.
$metaarrayoptional-
Custom meta $key => $value pairs to use.
Default:
array()
Source
function populate_site_meta( $site_id, array $meta = array() ) {
global $wpdb;
$site_id = (int) $site_id;
if ( ! is_site_meta_supported() ) {
return;
}
if ( empty( $meta ) ) {
return;
}
/**
* Filters meta for a site on creation.
*
* @since 5.2.0
*
* @param array $meta Associative array of site meta keys and values to be inserted.
* @param int $site_id ID of site to populate.
*/
$site_meta = apply_filters( 'populate_site_meta', $meta, $site_id );
$insert = '';
foreach ( $site_meta as $meta_key => $meta_value ) {
if ( is_array( $meta_value ) ) {
$meta_value = serialize( $meta_value );
}
if ( ! empty( $insert ) ) {
$insert .= ', ';
}
$insert .= $wpdb->prepare( '( %d, %s, %s)', $site_id, $meta_key, $meta_value );
}
$wpdb->query( "INSERT INTO $wpdb->blogmeta ( blog_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
wp_cache_delete( $site_id, 'blog_meta' );
wp_cache_set_sites_last_changed();
}
Hooks
- apply_filters( ‘populate_site_meta’, array $meta, int $site_id )
-
Filters meta for a site on creation.
Changelog
| Version | Description |
|---|---|
| 5.1.0 | Introduced. |