PluginProbe
Block Manager / 3.1.2
Block Manager v3.1.2
trunk 1.0 1.0.1 1.1 1.2 1.2.1 1.2.2 1.2.3c 1.2.4 1.2.5 2.0.0 2.1.0 2.1.0.1 2.1.1 3.0.0 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1
block-manager / classes / class-patterns.php

class-patterns.php in Block Manager 3.1.2, at classes/class-patterns.php

166 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * This file contains Patterns functions.
4 *
5 * @package blockmanager.
6 */
7
8 /**
9 * Block Manager Patterns class.
10 *
11 * @author ConnektMedia
12 * @since 1.0
13 */
14 class GBM_Patterns {
15
16 /**
17 * Construct method.
18 *
19 * @author ConnektMedia
20 */
21 public function __construct() {
22 add_action( 'init', [ $this, 'gbm_unregister_patterns' ] );
23 add_action( 'after_setup_theme', [ $this, 'gbm_remove_core_patterns' ] );
24
25 // Disable remote patterns.
26 if( in_array ( 'gbm/remote-patterns', self::gbm_get_all_disabled_patterns() ) ) {
27 add_filter( 'should_load_remote_block_patterns', '__return_false' );
28 }
29 }
30
31 /**
32 * Remove core patterns.
33 *
34 * @return void
35 */
36 public function gbm_remove_core_patterns() {
37 if( in_array ( 'gbm/core-patterns', self::gbm_get_all_disabled_patterns() ) ) {
38 remove_theme_support( 'core-block-patterns' );
39 }
40 }
41
42 /**
43 * Unregister block patterns.
44 *
45 * @return void
46 */
47 public function gbm_unregister_patterns() {
48 if( ! class_exists( 'WP_Block_Patterns_Registry' ) || ! function_exists( 'unregister_block_pattern' ) || ( isset( $_GET ) && isset( $_GET['page'] ) && $_GET['page'] === 'block-manager' ) ) {
49 return; // Exit if current page is block manager.
50 }
51
52 $patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered();
53 if ( ! empty ( $patterns ) ) {
54 $pattern_names = wp_list_pluck( $patterns, 'name' ); // Pluck pattern names.
55 $disabled_patterns = self::gbm_get_all_disabled_patterns();
56
57 if ( $disabled_patterns ) {
58 foreach ( $disabled_patterns as $pattern ) {
59 if ( in_array( $pattern, $pattern_names ) ) {
60 @unregister_block_pattern( $pattern );
61 }
62 }
63 }
64 }
65 }
66
67 /**
68 * Get all patterns.
69 *
70 * @author ConnektMedia
71 * @since 1.2
72 * @return array
73 */
74 public static function gbm_get_all_patterns() {
75 if ( ! class_exists( 'WP_Block_Patterns_Registry' ) ) {
76 return;
77 }
78
79 $patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered();
80 $categories = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered();
81 $disabled_patterns = self::gbm_get_all_disabled_patterns();
82
83 // Loop pattern categories and add to formatted array.
84 $formatted = [];
85 foreach( $categories as $category ) {
86 $formatted[$category['name']] = [
87 'label' => isset( $category['label'] ) ? $category['label'] : '',
88 'name' => isset( $category['name'] ) ? $category['name'] : '',
89 'description' => isset( $category['description'] ) ? $category['description'] : '',
90 'patterns' => []
91 ];
92 }
93
94 // Loop patterns and add to formatted array under each category.
95 foreach( $patterns as $pattern ) {
96 if ( empty( $pattern['title']) ) {
97 continue; // Exit if pattern title is empty.
98 }
99
100 if( isset( $pattern['categories'] ) && !empty( $pattern['categories'] ) ) {
101 $category = $pattern['categories'][0];
102 $formatted[$category]['patterns'][] = $pattern;
103 } else {
104 // Add uncategorized patterns to 'uncategorized' category.
105 if ( !in_array( 'gbm/uncategorized-patterns', $disabled_patterns ) ) {
106 $formatted['uncategorized']['patterns'][] = $pattern;
107 }
108 }
109 }
110
111 // Remove empty pattern categories.
112 foreach( $formatted as $key => $value ) {
113 if( empty( $value['patterns'] ) ) {
114 unset( $formatted[$key] );
115 }
116 }
117
118 // Create uncategorized category if not set.
119 if ( isset( $formatted['uncategorized'] ) ) {
120 $formatted['uncategorized']['label'] = __( 'Uncategorized', 'block-manager' );
121 $formatted['uncategorized']['name'] = 'Uncategorized';
122 }
123
124 return $formatted;
125 }
126
127 /**
128 * Get all disabled patterns.
129 *
130 * @author ConnektMedia
131 * @since 3.0
132 * @return array
133 */
134 public static function gbm_get_disabled_patterns() {
135 $patterns = get_option( BLOCK_MANAGER_PATTERNS, [] );
136 return ! empty( $patterns ) ? array_values( $patterns ) : [];
137 }
138
139 /**
140 * Get all filtered patterns.
141 *
142 * @author ConnektMedia
143 * @since 3.0
144 * @return array
145 */
146 public static function gbm_get_filtered_patterns() {
147 $patterns = apply_filters( 'gbm_disabled_patterns', [] ); // Get filtered block patterns.
148 return ! empty( $patterns ) ? array_values( $patterns ) : [];
149 }
150
151 /**
152 * Get all disabled patterns.
153 *
154 * @author ConnektMedia
155 * @since 3.0
156 * @return array
157 */
158 public static function gbm_get_all_disabled_patterns() {
159 $disabled = self::gbm_get_disabled_patterns();
160 $filtered = self::gbm_get_filtered_patterns();
161 $patterns = array_merge( $disabled, $filtered );
162 return ! empty( $patterns ) ? $patterns : [];
163 }
164 }
165 new GBM_Patterns();
166