PluginProbe
Code Engine – PHP Snippets, AI Functions & Automation for WordPress / 0.4.2
Code Engine – PHP Snippets, AI Functions & Automation for WordPress v0.4.2
0.5.6 0.5.5 0.5.4 0.5.3 0.5.2 0.5.1 0.5.0 0.4.9 0.4.8 0.4.7 0.4.6 trunk 0.0.1 0.0.2 0.2.8 0.2.9 0.3.0 0.3.1 0.3.2 0.3.3 0.3.4 0.3.5 0.3.6 0.3.7 0.3.8 All 32 releases
← All changes | common/helpers.php +79 -33 0.3.50.4.2 View file →
@@ -1,10 +1,10 @@
1 1 <?php
2 2
3 -if ( !class_exists( 'MeowCommon_Helpers' ) ) {
3 +if ( !class_exists( 'MeowKit_MWCODE_Helpers' ) ) {
4 4
5 - class MeowCommon_Helpers {
6 - //public static $version = MeowCommon_Admin::version;
5 + class MeowKit_MWCODE_Helpers {
6 + //public static $version = MeowKit_MWCODE_Admin::version;
7 7 private static $startTimes = [];
8 8 private static $startQueries = [];
9 9
10 10 public static function is_divi_builder() {
@@ -92,42 +92,47 @@
92 92 $diff = array_diff( $first, $second );
93 93 return implode( ' ', $diff );
94 94 }
95 95
96 - // Originally created by matzeeable, modified by jordymeow
96 + // From August 2025: The New 'is_rest' function, more reliable, much cleaner.
97 97 public static function is_rest() {
98 98
99 - // WP_REST_Request init.
100 - $is_rest_request = defined( 'REST_REQUEST' ) && REST_REQUEST;
101 - if ( $is_rest_request ) {
102 - MeowCommon_Rest::init_once();
99 + // WP 6.5+: only reliable after parse_request; otherwise skip this branch.
100 + if ( function_exists( 'wp_is_serving_rest_request' ) && did_action( 'parse_request' ) && wp_is_serving_rest_request() ) {
101 + MeowKit_MWCODE_Rest::init_once();
103 102 return true;
104 103 }
105 104
106 - // Plain permalinks.
107 - $prefix = rest_get_url_prefix();
108 - $request_contains_rest = isset( $_GET['rest_route'] ) && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix, 0 ) === 0;
109 - if ( $request_contains_rest ) {
110 - MeowCommon_Rest::init_once();
105 + // Classic flag set during REST bootstrap (safe at any time).
106 + if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
107 + MeowKit_MWCODE_Rest::init_once();
111 108 return true;
112 109 }
113 110
114 - // It can happen that WP_Rewrite is not yet initialized, so better to do it.
115 - global $wp_rewrite;
116 - if ( $wp_rewrite === null ) {
117 - $wp_rewrite = new WP_Rewrite();
111 + // Plain permalinks: ?rest_route=/... (route does NOT include the prefix).
112 + if ( isset( $_GET['rest_route'] ) ) {
113 + MeowKit_MWCODE_Rest::init_once();
114 + return true;
118 115 }
119 - $rest_url = wp_parse_url( trailingslashit( get_rest_url() ) );
120 - $current_url = wp_parse_url( add_query_arg( [] ) );
121 - if ( !$rest_url || !$current_url ) {
122 - return false;
123 - }
124 116
125 - // URL Path begins with wp-json.
126 - if ( !empty( $current_url['path'] ) && !empty( $rest_url['path'] ) ) {
127 - $request_contains_rest = strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
128 - if ( $request_contains_rest ) {
129 - MeowCommon_Rest::init_once();
117 + // Pretty permalinks: compare request PATH to the site's REST base path, without using rest_url().
118 + // This works early in the bootstrap (no dependency on $wp_rewrite).
119 + $req_path = isset( $_SERVER['REQUEST_URI'] ) ? wp_parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) : null;
120 + if ( $req_path ) {
121 + $home_path = wp_parse_url( home_url( '/' ), PHP_URL_PATH ); // e.g. '/' or '/blog/'
122 + $home_path = trailingslashit( $home_path ? $home_path : '/' );
123 +
124 + $prefix = trim( rest_get_url_prefix(), '/' ); // e.g. 'wp-json' or custom
125 +
126 + // /wp-json/ or /blog/wp-json/
127 + $base = $home_path . trailingslashit( $prefix );
128 +
129 + // /index.php/wp-json/ or /blog/index.php/wp-json/ (index permalinks)
130 + $base_index = $home_path . 'index.php/' . trailingslashit( $prefix );
131 +
132 + $path = trailingslashit( $req_path );
133 + if ( strpos( $path, $base ) === 0 || strpos( $path, $base_index ) === 0 ) {
134 + MeowKit_MWCODE_Rest::init_once();
130 135 return true;
131 136 }
132 137 }
133 138
@@ -133,8 +138,49 @@
133 138
134 139 return false;
135 140 }
136 141
142 + // Originally created by matzeeable, modified by jordymeow
143 + // public static function is_rest() {
144 +
145 + // // WP_REST_Request init.
146 + // $is_rest_request = defined( 'REST_REQUEST' ) && REST_REQUEST;
147 + // if ( $is_rest_request ) {
148 + // MeowKit_MWCODE_Rest::init_once();
149 + // return true;
150 + // }
151 +
152 + // // Plain permalinks.
153 + // $prefix = rest_get_url_prefix();
154 + // $request_contains_rest = isset( $_GET['rest_route'] ) && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix, 0 ) === 0;
155 + // if ( $request_contains_rest ) {
156 + // MeowKit_MWCODE_Rest::init_once();
157 + // return true;
158 + // }
159 +
160 + // // It can happen that WP_Rewrite is not yet initialized, so better to do it.
161 + // global $wp_rewrite;
162 + // if ( $wp_rewrite === null ) {
163 + // $wp_rewrite = new WP_Rewrite();
164 + // }
165 + // $rest_url = wp_parse_url( trailingslashit( get_rest_url() ) );
166 + // $current_url = wp_parse_url( add_query_arg( [] ) );
167 + // if ( !$rest_url || !$current_url ) {
168 + // return false;
169 + // }
170 +
171 + // // URL Path begins with wp-json.
172 + // if ( !empty( $current_url['path'] ) && !empty( $rest_url['path'] ) ) {
173 + // $request_contains_rest = strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
174 + // if ( $request_contains_rest ) {
175 + // MeowKit_MWCODE_Rest::init_once();
176 + // return true;
177 + // }
178 + // }
179 +
180 + // return false;
181 + // }
182 +
137 183 public static function test_error( $error = 'timeout', $diceSides = 1 ) {
138 184 if ( mt_rand( 1, $diceSides ) === 1 ) {
139 185 if ( $error === 'timeout' ) {
140 186 header( 'HTTP/1.0 408 Request Timeout' );
@@ -234,19 +280,19 @@
234 280 // }
235 281 }
236 282
237 283 public static function timer_start( $timerName = 'default' ) {
238 - MeowCommon_Helpers::$startQueries[ $timerName ] = get_num_queries();
239 - MeowCommon_Helpers::$startTimes[ $timerName ] = microtime( true );
284 + MeowKit_MWCODE_Helpers::$startQueries[ $timerName ] = get_num_queries();
285 + MeowKit_MWCODE_Helpers::$startTimes[ $timerName ] = microtime( true );
240 286 }
241 287
242 288 public static function timer_elapsed( $timerName = 'default' ) {
243 - return microtime( true ) - MeowCommon_Helpers::$startTimes[ $timerName ];
289 + return microtime( true ) - MeowKit_MWCODE_Helpers::$startTimes[ $timerName ];
244 290 }
245 291
246 292 public static function timer_log_elapsed( $timerName = 'default' ) {
247 - $elapsed = MeowCommon_Helpers::timer_elapsed( $timerName );
248 - $queries = get_num_queries() - MeowCommon_Helpers::$startQueries[ $timerName ];
293 + $elapsed = MeowKit_MWCODE_Helpers::timer_elapsed( $timerName );
294 + $queries = get_num_queries() - MeowKit_MWCODE_Helpers::$startQueries[ $timerName ];
249 295 error_log( $timerName . ': ' . $elapsed . 'ms (' . $queries . ' queries)' );
250 296 }
251 297 }
252 298
@@ -251,8 +297,8 @@
251 297 }
252 298
253 299 // Asked by WP Security Team to remove this.
254 300
255 - // if ( MeowCommon_Helpers::is_rest() ) {
301 + // if ( MeowKit_MWCODE_Helpers::is_rest() ) {
256 302 // ini_set( 'display_errors', 0 );
257 303 // }
258 304 }