forked from WordPress/gutenberg
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Patterns: Allow for filtering of block patterns by source (WordPress#…
…51672) --------- Co-authored-by: kevin940726 <[email protected]> Co-authored-by: Daniel Richards <[email protected]>
- Loading branch information
1 parent
819ad07
commit 760a866
Showing
7 changed files
with
332 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
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,165 @@ | ||
<?php | ||
/** | ||
* Overrides Core's wp-includes/block-patterns.php to add category descriptions for WP 6.3. | ||
* | ||
* @package gutenberg | ||
*/ | ||
|
||
/** | ||
* Registers the block pattern sources. | ||
* | ||
* @since 6.3.0 Added source to core block patterns. | ||
*/ | ||
function gutenberg_register_core_block_patterns_and_categories() { | ||
$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'; // Added in 6.3.0. | ||
register_block_pattern( 'core/' . $core_block_pattern, $pattern ); | ||
} | ||
} | ||
} | ||
add_action( 'init', 'gutenberg_register_core_block_patterns_and_categories' ); | ||
|
||
/** | ||
* 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 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'] = 'pattern-directory/core'; // Added in 6.3.0. | ||
$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 'pattern-directory/featured' 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'] = 'pattern-directory/featured'; // Added in 6.3.0. | ||
$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 'pattern-directory/theme' 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'] = 'pattern-directory/theme'; // Added in 6.3.0. | ||
$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.