Skip to content

Instantly share code, notes, and snippets.

@woodwardtw
Created April 12, 2025 12:45
Show Gist options
  • Save woodwardtw/716a18245441ca1faa50d2445a9d05ea to your computer and use it in GitHub Desktop.
Save woodwardtw/716a18245441ca1faa50d2445a9d05ea to your computer and use it in GitHub Desktop.
Put block patterns in rest API for WordPress
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