Created
April 12, 2025 12:45
-
-
Save woodwardtw/716a18245441ca1faa50d2445a9d05ea to your computer and use it in GitHub Desktop.
Put block patterns in rest API for WordPress
This file contains hidden or 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
add_action( 'rest_api_init', function () { | |
register_rest_route( 'custom/v1', '/patterns/', [ | |
'methods' => 'GET', | |
'callback' => function( $request ) { | |
$pattern_name = $request->get_param( 'name' ); | |
$pattern_title = $request->get_param( 'title' ); | |
$registry = WP_Block_Patterns_Registry::get_instance(); | |
$patterns = array_values( $registry->get_all_registered() ); | |
// Filter by name if provided | |
if ( $pattern_name ) { | |
$filtered_patterns = array_filter( $patterns, function( $pattern ) use ( $pattern_name ) { | |
return isset( $pattern['name'] ) && $pattern['name'] === $pattern_name; | |
}); | |
if ( !empty( $filtered_patterns ) ) { | |
return array_values( $filtered_patterns )[0]; | |
} | |
return new WP_Error( | |
'pattern_not_found', | |
'Pattern not found', | |
array( 'status' => 404 ) | |
); | |
} | |
// Filter by title if provided | |
if ( $pattern_title ) { | |
$filtered_patterns = array_filter( $patterns, function( $pattern ) use ( $pattern_title ) { | |
return isset( $pattern['title'] ) && $pattern['title'] === $pattern_title; | |
}); | |
if ( !empty( $filtered_patterns ) ) { | |
return array_values( $filtered_patterns ); | |
} | |
return new WP_Error( | |
'pattern_not_found', | |
'Pattern not found', | |
array( 'status' => 404 ) | |
); | |
} | |
// Otherwise return all patterns | |
return $patterns; | |
}, | |
'permission_callback' => '__return_true', // Use capabilities check in production | |
'args' => [ | |
'name' => [ | |
'description' => 'Block pattern name identifier', | |
'type' => 'string', | |
'required' => false, | |
], | |
'title' => [ | |
'description' => 'Block pattern title', | |
'type' => 'string', | |
'required' => false, | |
], | |
], | |
]); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment