Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion includes/classes/BlockEditor/Patterns.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function setup() {
* @return void
*/
public function remove_woocommerce_patterns(): void {
$patterns = \WP_Block_Patterns_Registry::get_instance()->get_all_registered();
$patterns = $this->get_registered_patterns();

if ( ! empty( $patterns ) ) {
foreach ( $patterns as $pattern ) {
Expand All @@ -47,6 +47,31 @@ public function remove_woocommerce_patterns(): void {
}
}

/**
* Get all registered patterns, using cache if available.
*
* WordPress core does not provide a public global pattern cache:
* - WP_Block_Patterns_Registry has no internal caching (in-memory registry only)
* - WP_Theme::get_pattern_cache() is private and only caches theme patterns
* - WooCommerce BlockPatterns cache is plugin-specific and not publicly accessible
*
* Therefore, we use our own transient cache to avoid repeatedly calling
* get_all_registered() which, while lightweight, is still unnecessary overhead.
*
* @return array Array of registered patterns.
*/
private function get_registered_patterns(): array {
$cache_key = 'orbit_registered_patterns';
$patterns = get_transient( $cache_key );

if ( false === $patterns ) {
$patterns = \WP_Block_Patterns_Registry::get_instance()->get_all_registered();
set_transient( $cache_key, $patterns, 300 );
}

return $patterns;
}

/**
* Filter WooCommerce patterns from REST API responses.
*
Expand Down