WordPress Version: 6.3
/**
* Register Core's official patterns from wordpress.org/patterns.
*
* @since 5.8.0
* @since 5.9.0 The $current_screen argument was removed.
* @since 6.2.0 Normalize the pattern from the API (snake_case) to the
* format expected by `register_block_pattern` (camelCase).
* @since 6.3.0 Add 'pattern-directory/core' to the pattern's 'source'.
*
* @param WP_Screen $deprecated Unused. Formerly the screen that the current request was triggered from.
*/
function _load_remote_block_patterns($deprecated = null)
{
if (!empty($deprecated)) {
_deprecated_argument(__FUNCTION__, '5.9.0');
$current_screen = $deprecated;
if (!$current_screen->is_block_editor) {
return;
}
}
$supports_core_patterns = get_theme_support('core-block-patterns');
/**
* Filter to disable remote block patterns.
*
* @since 5.8.0
*
* @param bool $should_load_remote
*/
$should_load_remote = apply_filters('should_load_remote_block_patterns', true);
if ($supports_core_patterns && $should_load_remote) {
$request = new WP_REST_Request('GET', '/wp/v2/pattern-directory/patterns');
$core_keyword_id = 11;
// 11 is the ID for "core".
$request->set_param('keyword', $core_keyword_id);
$response = rest_do_request($request);
if ($response->is_error()) {
return;
}
$patterns = $response->get_data();
foreach ($patterns as $pattern) {
$pattern['source'] = 'pattern-directory/core';
$normalized_pattern = wp_normalize_remote_block_pattern($pattern);
$pattern_name = 'core/' . sanitize_title($normalized_pattern['title']);
register_block_pattern($pattern_name, $normalized_pattern);
}
}
}