is_registered( 'query' ) ) { register_block_pattern_category( 'query', array( 'label' => __( 'Query', 'gutenberg' ) ) ); } $patterns = array( 'query-standard-posts' => array( 'title' => _x( 'Standard', 'Block pattern title', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), 'categories' => array( 'query' ), 'content' => '

', ), 'query-medium-posts' => array( 'title' => _x( 'Image at left', 'Block pattern title', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), 'categories' => array( 'query' ), 'content' => '
', ), 'query-small-posts' => array( 'title' => _x( 'Small image and title', 'Block pattern title', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), 'categories' => array( 'query' ), 'content' => '
', ), 'query-grid-posts' => array( 'title' => _x( 'Grid', 'Block pattern title', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), 'categories' => array( 'query' ), 'content' => '
', ), 'query-large-title-posts' => array( 'title' => _x( 'Large title', 'Block pattern title', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), 'categories' => array( 'query' ), 'content' => '

', ), 'query-offset-posts' => array( 'title' => _x( 'Offset', 'Block pattern title', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), 'categories' => array( 'query' ), 'content' => '
', ), // Initial block pattern to be used with block transformations with patterns. 'social-links-shared-background-color' => array( 'title' => _x( 'Social links with a shared background color', 'Block pattern title', 'gutenberg' ), 'categories' => array( 'buttons' ), 'blockTypes' => array( 'core/social-links' ), 'viewportWidth' => 500, 'content' => ' ', ), ); foreach ( $patterns as $name => $pattern ) { $pattern_name = 'core/' . $name; if ( ! WP_Block_Patterns_Registry::get_instance()->is_registered( $pattern_name ) ) { register_block_pattern( $pattern_name, $pattern ); } } } /** * Deactivate the legacy patterns bundled with WordPress. */ function gutenberg_remove_core_patterns() { $core_block_patterns = array( 'text-two-columns', 'two-buttons', 'two-images', 'text-two-columns-with-images', 'text-three-columns-buttons', 'large-header', 'large-header-button', 'three-buttons', 'heading-paragraph', 'quote', '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 ) { $name = 'core/' . $core_block_pattern; if ( WP_Block_Patterns_Registry::get_instance()->is_registered( $name ) ) { unregister_block_pattern( $name ); } } } /** * Register Core's official patterns from wordpress.org/patterns. * * @since 5.8.0 */ function gutenberg_load_remote_core_patterns() { // This is the core function that provides the same feature. if ( function_exists( '_load_remote_block_patterns' ) ) { return; } /** * 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 ( $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 $settings ) { $pattern_name = 'core/' . sanitize_title( $settings['title'] ); register_block_pattern( $pattern_name, (array) $settings ); } } } /** * Register `Featured` (category) patterns from wordpress.org/patterns. * * @since 5.9.0 */ function gutenberg_load_remote_featured_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 ( ! $should_load_remote ) { return; } if ( ! WP_Block_Pattern_Categories_Registry::get_instance()->is_registered( 'featured' ) ) { register_block_pattern_category( 'featured', array( 'label' => __( 'Featured', 'gutenberg' ) ) ); } $request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' ); $request['category'] = 26; // This is the `Featured` category id from pattern directory. $response = rest_do_request( $request ); if ( $response->is_error() ) { return; } $patterns = $response->get_data(); foreach ( $patterns as $pattern ) { $pattern_name = sanitize_title( $pattern['title'] ); $registry = WP_Block_Patterns_Registry::get_instance(); // Some patterns might be already registerd 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) $pattern ); } } } add_action( 'init', function() { if ( ! get_theme_support( 'core-block-patterns' ) || ! function_exists( 'unregister_block_pattern' ) ) { return; } gutenberg_remove_core_patterns(); gutenberg_register_gutenberg_patterns(); } ); add_action( 'current_screen', function( $current_screen ) { if ( ! get_theme_support( 'core-block-patterns' ) ) { return; } $is_site_editor = ( function_exists( 'gutenberg_is_edit_site_page' ) && gutenberg_is_edit_site_page( $current_screen->id ) ); if ( $current_screen->is_block_editor || $is_site_editor ) { gutenberg_load_remote_core_patterns(); gutenberg_load_remote_featured_patterns(); } } );