-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
26965f3
commit c062fc5
Showing
6 changed files
with
321 additions
and
134 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
<?php | ||
/** | ||
* Overrides Core's wp-includes/block-patterns.php to add category descriptions for WP 6.3. | ||
* | ||
* @package gutenberg | ||
*/ | ||
|
||
/** | ||
* Registers the block pattern sources. | ||
*/ | ||
function gutenberg_register_core_block_patterns_sources() { | ||
$should_register_core_patterns = get_theme_support( 'core-block-patterns' ); | ||
|
||
if ( $should_register_core_patterns ) { | ||
$core_block_patterns = array( | ||
'query-standard-posts', | ||
'query-medium-posts', | ||
'query-small-posts', | ||
'query-grid-posts', | ||
'query-large-title-posts', | ||
'query-offset-posts', | ||
'social-links-shared-background-color', | ||
); | ||
|
||
foreach ( $core_block_patterns as $core_block_pattern ) { | ||
$pattern = require ABSPATH . WPINC . '/block-patterns/' . $core_block_pattern . '.php'; | ||
$pattern['source'] = 'core'; | ||
register_block_pattern( 'core/' . $core_block_pattern, $pattern ); | ||
} | ||
} | ||
} | ||
add_action( 'init', 'gutenberg_register_core_block_patterns_sources' ); | ||
|
||
/** | ||
* 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 'core' to the pattern's 'source'. | ||
* | ||
* @param WP_Screen $deprecated Unused. Formerly the screen that the current request was triggered from. | ||
*/ | ||
function gutenberg_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'] = 'core'; | ||
$normalized_pattern = gutenberg_normalize_remote_pattern( $pattern ); | ||
$pattern_name = 'core/' . sanitize_title( $normalized_pattern['title'] ); | ||
register_block_pattern( $pattern_name, (array) $normalized_pattern ); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Register `Featured` (category) patterns from wordpress.org/patterns. | ||
* | ||
* @since 5.9.0 | ||
* @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 'core' to the pattern's 'source'. | ||
*/ | ||
function gutenberg_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'] = 'core'; | ||
$normalized_pattern = gutenberg_normalize_remote_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, (array) $normalized_pattern ); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Registers patterns from Pattern Directory provided by a theme's | ||
* `theme.json` file. | ||
* | ||
* @since 6.0.0 | ||
* @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 'core' to the pattern's 'source'. | ||
* @access private | ||
*/ | ||
function gutenberg_register_remote_theme_patterns() { | ||
/** This filter is documented in wp-includes/block-patterns.php */ | ||
if ( ! apply_filters( 'should_load_remote_block_patterns', true ) ) { | ||
return; | ||
} | ||
|
||
if ( ! wp_theme_has_theme_json() ) { | ||
return; | ||
} | ||
|
||
$pattern_settings = gutenberg_get_remote_theme_patterns(); | ||
if ( empty( $pattern_settings ) ) { | ||
return; | ||
} | ||
|
||
$request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' ); | ||
$request['slug'] = $pattern_settings; | ||
$response = rest_do_request( $request ); | ||
if ( $response->is_error() ) { | ||
return; | ||
} | ||
$patterns = $response->get_data(); | ||
$patterns_registry = WP_Block_Patterns_Registry::get_instance(); | ||
foreach ( $patterns as $pattern ) { | ||
$pattern['source'] = 'core'; | ||
$normalized_pattern = gutenberg_normalize_remote_pattern( $pattern ); | ||
$pattern_name = sanitize_title( $normalized_pattern['title'] ); | ||
// Some patterns might be already registered as core patterns with the `core` prefix. | ||
$is_registered = $patterns_registry->is_registered( $pattern_name ) || $patterns_registry->is_registered( "core/$pattern_name" ); | ||
if ( ! $is_registered ) { | ||
register_block_pattern( $pattern_name, (array) $normalized_pattern ); | ||
} | ||
} | ||
} |
Oops, something went wrong.