_load_remote_featured_patterns()
云策文档标注
概述
_load_remote_featured_patterns() 函数用于从 wordpress.org/patterns 注册“Featured”类别的远程块模式。它通过 REST API 获取模式数据,并在满足条件时将其注册到 WordPress 块模式注册表中。
关键要点
- 函数检查主题是否支持核心块模式(通过 get_theme_support('core-block-patterns'))和 should_load_remote_block_patterns 过滤器,以决定是否加载远程模式。
- 使用 WP_REST_Request 向 /wp/v2/pattern-directory/patterns 发送 GET 请求,并设置 category 参数为 26(对应“Featured”类别)。
- 获取响应数据后,通过 wp_normalize_remote_block_pattern() 规范化模式属性,并使用 register_block_pattern() 注册模式,避免重复注册。
- 相关 Hook:should_load_remote_block_patterns 过滤器可用于禁用远程块模式的加载。
代码示例
function _load_remote_featured_patterns() {
$supports_core_patterns = get_theme_support( 'core-block-patterns' );
$should_load_remote = apply_filters( 'should_load_remote_block_patterns', true );
if ( ! $should_load_remote || ! $supports_core_patterns ) {
return;
}
$request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' );
$featured_cat_id = 26;
$request->set_param( 'category', $featured_cat_id );
$response = rest_do_request( $request );
if ( $response->is_error() ) {
return;
}
$patterns = $response->get_data();
$registry = WP_Block_Patterns_Registry::get_instance();
foreach ( $patterns as $pattern ) {
$pattern['source'] = 'pattern-directory/featured';
$normalized_pattern = wp_normalize_remote_block_pattern( $pattern );
$pattern_name = sanitize_title( $normalized_pattern['title'] );
$is_registered = $registry->is_registered( $pattern_name ) || $registry->is_registered( "core/$pattern_name" );
if ( ! $is_registered ) {
register_block_pattern( $pattern_name, $normalized_pattern );
}
}
}注意事项
- 函数在 WordPress 5.9.0 中引入,后续版本有更新:6.2.0 添加了模式规范化,6.3.0 添加了模式来源标识。
- 依赖多个 WordPress 核心函数和类,如 WP_REST_Request、WP_Block_Patterns_Registry 等,确保环境兼容。
- 错误处理:如果 REST 请求失败或条件不满足,函数会静默返回,不注册任何模式。
原文内容
Register Featured (category) patterns from wordpress.org/patterns.
Source
function _load_remote_featured_patterns() {
$supports_core_patterns = get_theme_support( 'core-block-patterns' );
/** This filter is documented in wp-includes/block-patterns.php */
$should_load_remote = apply_filters( 'should_load_remote_block_patterns', true );
if ( ! $should_load_remote || ! $supports_core_patterns ) {
return;
}
$request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' );
$featured_cat_id = 26; // This is the `Featured` category id from pattern directory.
$request->set_param( 'category', $featured_cat_id );
$response = rest_do_request( $request );
if ( $response->is_error() ) {
return;
}
$patterns = $response->get_data();
$registry = WP_Block_Patterns_Registry::get_instance();
foreach ( $patterns as $pattern ) {
$pattern['source'] = 'pattern-directory/featured';
$normalized_pattern = wp_normalize_remote_block_pattern( $pattern );
$pattern_name = sanitize_title( $normalized_pattern['title'] );
// Some patterns might be already registered as core patterns with the `core` prefix.
$is_registered = $registry->is_registered( $pattern_name ) || $registry->is_registered( "core/$pattern_name" );
if ( ! $is_registered ) {
register_block_pattern( $pattern_name, $normalized_pattern );
}
}
}
Hooks
- apply_filters( ‘should_load_remote_block_patterns’, bool $should_load_remote )
-
Filter to disable remote block patterns.