函数文档

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.