Query Monitor - Version 3.3.1

Version Description

Download this release

Release Info

Developer johnbillion
Plugin Icon 128x128 Query Monitor
Version 3.3.1
Comparing to
See all releases

Code changes from version 3.3.0 to 3.3.1

assets/query-monitor-dark.css CHANGED
@@ -265,6 +265,10 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
265
  width: 4px !important;
266
  z-index: 2 !important;
267
  }
 
 
 
 
268
  #query-monitor-main #qm-wrapper {
269
  display: flex;
270
  flex-grow: 1 !important;
@@ -557,8 +561,21 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
557
  #query-monitor-main .qm-non-tabular p {
558
  margin-bottom: 10px !important;
559
  }
 
 
 
 
 
 
 
 
 
 
 
560
  #query-monitor-main .qm-non-tabular dd {
561
- margin: 0 0 10px 10px !important;
 
 
562
  }
563
  #query-monitor-main .qm-non-tabular h3 a {
564
  float: right !important;
265
  width: 4px !important;
266
  z-index: 2 !important;
267
  }
268
+ #query-monitor-main.qm-show-right.qm-peek {
269
+ height: 100vh !important;
270
+ top: 0 !important;
271
+ }
272
  #query-monitor-main #qm-wrapper {
273
  display: flex;
274
  flex-grow: 1 !important;
561
  #query-monitor-main .qm-non-tabular p {
562
  margin-bottom: 10px !important;
563
  }
564
+ #query-monitor-main .qm-non-tabular dl {
565
+ display: flex !important;
566
+ flex-wrap: wrap !important;
567
+ max-width: 60em !important;
568
+ }
569
+ #query-monitor-main .qm-non-tabular dt {
570
+ border-top: 1px solid #bbc8d4 !important;
571
+ flex-grow: 0;
572
+ flex: 1 0 16em;
573
+ padding: 10px 10px 10px 0 !important;
574
+ }
575
  #query-monitor-main .qm-non-tabular dd {
576
+ border-top: 1px solid #bbc8d4 !important;
577
+ flex: 1 0 calc(100% - 10px - 16em);
578
+ padding: 10px 0 !important;
579
  }
580
  #query-monitor-main .qm-non-tabular h3 a {
581
  float: right !important;
assets/query-monitor.css CHANGED
@@ -258,6 +258,10 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
258
  width: 4px !important;
259
  z-index: 2 !important;
260
  }
 
 
 
 
261
  #query-monitor-main #qm-wrapper {
262
  display: flex;
263
  flex-grow: 1 !important;
@@ -550,8 +554,21 @@ body.admin-color-light #wp-admin-bar-query-monitor:not(.qm-all-clear):not(:hover
550
  #query-monitor-main .qm-non-tabular p {
551
  margin-bottom: 10px !important;
552
  }
 
 
 
 
 
 
 
 
 
 
 
553
  #query-monitor-main .qm-non-tabular dd {
554
- margin: 0 0 10px 10px !important;
 
 
555
  }
556
  #query-monitor-main .qm-non-tabular h3 a {
557
  float: right !important;
258
  width: 4px !important;
259
  z-index: 2 !important;
260
  }
261
+ #query-monitor-main.qm-show-right.qm-peek {
262
+ height: 100vh !important;
263
+ top: 0 !important;
264
+ }
265
  #query-monitor-main #qm-wrapper {
266
  display: flex;
267
  flex-grow: 1 !important;
554
  #query-monitor-main .qm-non-tabular p {
555
  margin-bottom: 10px !important;
556
  }
557
+ #query-monitor-main .qm-non-tabular dl {
558
+ display: flex !important;
559
+ flex-wrap: wrap !important;
560
+ max-width: 60em !important;
561
+ }
562
+ #query-monitor-main .qm-non-tabular dt {
563
+ border-top: 1px solid #ddd !important;
564
+ flex-grow: 0;
565
+ flex: 1 0 16em;
566
+ padding: 10px 10px 10px 0 !important;
567
+ }
568
  #query-monitor-main .qm-non-tabular dd {
569
+ border-top: 1px solid #ddd !important;
570
+ flex: 1 0 calc(100% - 10px - 16em);
571
+ padding: 10px 0 !important;
572
  }
573
  #query-monitor-main .qm-non-tabular h3 a {
574
  float: right !important;
assets/query-monitor.js CHANGED
@@ -616,7 +616,7 @@ if ( window.jQuery ) {
616
  window.addEventListener('load', function() {
617
  if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
618
  /* Fallback for running without jQuery (`QM_NO_JQUERY`) */
619
- document.getElementById( 'query-monitor' ).className += ' qm-broken';
620
  console.error( document.getElementById( 'qm-broken' ).textContent );
621
 
622
  if ( 'undefined' === typeof jQuery ) {
@@ -630,7 +630,7 @@ window.addEventListener('load', function() {
630
  var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
631
  if ( menu_item ) {
632
  menu_item.addEventListener( 'click', function() {
633
- document.getElementById( 'query-monitor' ).className += ' qm-show';
634
  } );
635
  }
636
  }
616
  window.addEventListener('load', function() {
617
  if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
618
  /* Fallback for running without jQuery (`QM_NO_JQUERY`) */
619
+ document.getElementById( 'query-monitor-main' ).className += ' qm-broken';
620
  console.error( document.getElementById( 'qm-broken' ).textContent );
621
 
622
  if ( 'undefined' === typeof jQuery ) {
630
  var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
631
  if ( menu_item ) {
632
  menu_item.addEventListener( 'click', function() {
633
+ document.getElementById( 'query-monitor-main' ).className += ' qm-show';
634
  } );
635
  }
636
  }
classes/Collector.php CHANGED
@@ -151,14 +151,14 @@ abstract class QM_Collector {
151
 
152
  foreach ( $concerned_actions as $action ) {
153
  if ( has_action( $action ) ) {
154
- $this->concerned_actions[ $action ] = QM_Collector_Hooks::process_action( $action, $wp_filter, true, true );
155
  }
156
  $tracked[] = $action;
157
  }
158
 
159
  foreach ( $concerned_filters as $filter ) {
160
  if ( has_filter( $filter ) ) {
161
- $this->concerned_filters[ $filter ] = QM_Collector_Hooks::process_action( $filter, $wp_filter, true, true );
162
  }
163
  $tracked[] = $filter;
164
  }
@@ -180,7 +180,7 @@ abstract class QM_Collector {
180
  $option
181
  );
182
  if ( has_filter( $filter ) ) {
183
- $this->concerned_filters[ $filter ] = QM_Collector_Hooks::process_action( $filter, $wp_filter, true, true );
184
  }
185
  $tracked[] = $filter;
186
  }
151
 
152
  foreach ( $concerned_actions as $action ) {
153
  if ( has_action( $action ) ) {
154
+ $this->concerned_actions[ $action ] = QM_Hook::process( $action, $wp_filter, true, true );
155
  }
156
  $tracked[] = $action;
157
  }
158
 
159
  foreach ( $concerned_filters as $filter ) {
160
  if ( has_filter( $filter ) ) {
161
+ $this->concerned_filters[ $filter ] = QM_Hook::process( $filter, $wp_filter, true, true );
162
  }
163
  $tracked[] = $filter;
164
  }
180
  $option
181
  );
182
  if ( has_filter( $filter ) ) {
183
+ $this->concerned_filters[ $filter ] = QM_Hook::process( $filter, $wp_filter, true, true );
184
  }
185
  $tracked[] = $filter;
186
  }
classes/Hook.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Hook processor.
4
+ *
5
+ * @package query-monitor
6
+ */
7
+
8
+ class QM_Hook {
9
+
10
+ public static function process( $name, array $wp_filter, $hide_qm = false, $hide_core = false ) {
11
+
12
+ $actions = array();
13
+ $components = array();
14
+
15
+ if ( isset( $wp_filter[ $name ] ) ) {
16
+
17
+ # http://core.trac.wordpress.org/ticket/17817
18
+ $action = $wp_filter[ $name ];
19
+
20
+ foreach ( $action as $priority => $callbacks ) {
21
+
22
+ foreach ( $callbacks as $callback ) {
23
+
24
+ $callback = QM_Util::populate_callback( $callback );
25
+
26
+ if ( isset( $callback['component'] ) ) {
27
+ if (
28
+ ( $hide_qm && 'query-monitor' === $callback['component']->context )
29
+ || ( $hide_core && 'core' === $callback['component']->context )
30
+ ) {
31
+ continue;
32
+ }
33
+
34
+ $components[ $callback['component']->name ] = $callback['component']->name;
35
+ }
36
+
37
+ // This isn't used and takes up a ton of memory:
38
+ unset( $callback['function'] );
39
+
40
+ $actions[] = array(
41
+ 'priority' => $priority,
42
+ 'callback' => $callback,
43
+ );
44
+
45
+ }
46
+ }
47
+ }
48
+
49
+ $parts = array_filter( preg_split( '#[_/-]#', $name ) );
50
+
51
+ return array(
52
+ 'name' => $name,
53
+ 'actions' => $actions,
54
+ 'parts' => $parts,
55
+ 'components' => $components,
56
+ );
57
+
58
+ }
59
+
60
+ }
collectors/admin.php CHANGED
@@ -16,6 +16,10 @@ class QM_Collector_Admin extends QM_Collector {
16
  public function get_concerned_actions() {
17
  $actions = array(
18
  'current_screen',
 
 
 
 
19
  );
20
 
21
  if ( ! empty( $this->data['list_table'] ) ) {
16
  public function get_concerned_actions() {
17
  $actions = array(
18
  'current_screen',
19
+ 'admin_notices',
20
+ 'all_admin_notices',
21
+ 'network_admin_notices',
22
+ 'user_admin_notices',
23
  );
24
 
25
  if ( ! empty( $this->data['list_table'] ) ) {
collectors/hooks.php CHANGED
@@ -26,7 +26,7 @@ class QM_Collector_Hooks extends QM_Collector {
26
  $components = array();
27
 
28
  if ( has_filter( 'all' ) ) {
29
- $hooks[] = self::process_action( 'all', $wp_filter, self::$hide_qm, self::$hide_core );
30
  }
31
 
32
  if ( defined( 'QM_SHOW_ALL_HOOKS' ) && QM_SHOW_ALL_HOOKS ) {
@@ -39,7 +39,7 @@ class QM_Collector_Hooks extends QM_Collector {
39
 
40
  foreach ( $hook_names as $name ) {
41
 
42
- $hook = self::process_action( $name, $wp_filter, self::$hide_qm, self::$hide_core );
43
  $hooks[] = $hook;
44
 
45
  $all_parts = array_merge( $all_parts, $hook['parts'] );
@@ -55,56 +55,6 @@ class QM_Collector_Hooks extends QM_Collector {
55
  usort( $this->data['components'], 'strcasecmp' );
56
  }
57
 
58
- public static function process_action( $name, array $wp_filter, $hide_qm = false, $hide_core = false ) {
59
-
60
- $actions = array();
61
- $components = array();
62
-
63
- if ( isset( $wp_filter[ $name ] ) ) {
64
-
65
- # http://core.trac.wordpress.org/ticket/17817
66
- $action = $wp_filter[ $name ];
67
-
68
- foreach ( $action as $priority => $callbacks ) {
69
-
70
- foreach ( $callbacks as $callback ) {
71
-
72
- $callback = QM_Util::populate_callback( $callback );
73
-
74
- if ( isset( $callback['component'] ) ) {
75
- if (
76
- ( $hide_qm && 'query-monitor' === $callback['component']->context )
77
- || ( $hide_core && 'core' === $callback['component']->context )
78
- ) {
79
- continue;
80
- }
81
-
82
- $components[ $callback['component']->name ] = $callback['component']->name;
83
- }
84
-
85
- // This isn't used and takes up a ton of memory:
86
- unset( $callback['function'] );
87
-
88
- $actions[] = array(
89
- 'priority' => $priority,
90
- 'callback' => $callback,
91
- );
92
-
93
- }
94
- }
95
- }
96
-
97
- $parts = array_filter( preg_split( '#[_/-]#', $name ) );
98
-
99
- return array(
100
- 'name' => $name,
101
- 'actions' => $actions,
102
- 'parts' => $parts,
103
- 'components' => $components,
104
- );
105
-
106
- }
107
-
108
  }
109
 
110
  # Load early to catch all hooks
26
  $components = array();
27
 
28
  if ( has_filter( 'all' ) ) {
29
+ $hooks[] = QM_Hook::process( 'all', $wp_filter, self::$hide_qm, self::$hide_core );
30
  }
31
 
32
  if ( defined( 'QM_SHOW_ALL_HOOKS' ) && QM_SHOW_ALL_HOOKS ) {
39
 
40
  foreach ( $hook_names as $name ) {
41
 
42
+ $hook = QM_Hook::process( $name, $wp_filter, self::$hide_qm, self::$hide_core );
43
  $hooks[] = $hook;
44
 
45
  $all_parts = array_merge( $all_parts, $hook['parts'] );
55
  usort( $this->data['components'], 'strcasecmp' );
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
 
60
  # Load early to catch all hooks
dispatchers/Html.php CHANGED
@@ -301,6 +301,13 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
301
  }
302
  }
303
  }
 
 
 
 
 
 
 
304
  echo '</select>';
305
 
306
  echo '</div>';
@@ -370,7 +377,9 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
370
 
371
  echo '<p><button class="qm-auth qm-button" data-qm-text-on="' . esc_attr( $text['on'] ) . '" data-qm-text-off="' . esc_attr( $text['off'] ) . '">' . esc_html( $text[ $state ] ) . '</button></p>';
372
  echo '</section>';
 
373
 
 
374
  $constants = array(
375
  'QM_DB_EXPENSIVE' => array(
376
  /* translators: %s: The default value for a PHP constant */
@@ -472,7 +481,7 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
472
  window.addEventListener('load', function() {
473
  if ( ( 'undefined' === typeof QM_i18n ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
474
  /* Fallback for worst case scenario */
475
- document.getElementById( 'query-monitor' ).className += ' qm-broken';
476
  console.error( document.getElementById( 'qm-broken' ).textContent );
477
 
478
  if ( 'undefined' === typeof QM_i18n ) {
@@ -490,11 +499,11 @@ class QM_Dispatcher_Html extends QM_Dispatcher {
490
  var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
491
  if ( menu_item ) {
492
  menu_item.addEventListener( 'click', function() {
493
- document.getElementById( 'query-monitor' ).className += ' qm-show';
494
  } );
495
  }
496
  } else if ( ! document.getElementById( 'wpadminbar' ) ) {
497
- document.getElementById( 'query-monitor' ).className += ' qm-peek';
498
  }
499
  } );
500
  <?php
301
  }
302
  }
303
  }
304
+
305
+ printf(
306
+ '<option value="%1$s">%2$s</option>',
307
+ '#qm-settings',
308
+ esc_html__( 'Settings', 'query-monitor' )
309
+ );
310
+
311
  echo '</select>';
312
 
313
  echo '</div>';
377
 
378
  echo '<p><button class="qm-auth qm-button" data-qm-text-on="' . esc_attr( $text['on'] ) . '" data-qm-text-off="' . esc_attr( $text['off'] ) . '">' . esc_html( $text[ $state ] ) . '</button></p>';
379
  echo '</section>';
380
+ echo '</div>';
381
 
382
+ echo '<div class="qm-boxed">';
383
  $constants = array(
384
  'QM_DB_EXPENSIVE' => array(
385
  /* translators: %s: The default value for a PHP constant */
481
  window.addEventListener('load', function() {
482
  if ( ( 'undefined' === typeof QM_i18n ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
483
  /* Fallback for worst case scenario */
484
+ document.getElementById( 'query-monitor-main' ).className += ' qm-broken';
485
  console.error( document.getElementById( 'qm-broken' ).textContent );
486
 
487
  if ( 'undefined' === typeof QM_i18n ) {
499
  var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
500
  if ( menu_item ) {
501
  menu_item.addEventListener( 'click', function() {
502
+ document.getElementById( 'query-monitor-main' ).className += ' qm-show';
503
  } );
504
  }
505
  } else if ( ! document.getElementById( 'wpadminbar' ) ) {
506
+ document.getElementById( 'query-monitor-main' ).className += ' qm-peek';
507
  }
508
  } );
509
  <?php
output/Html.php CHANGED
@@ -225,6 +225,7 @@ abstract class QM_Output_Html extends QM_Output {
225
  * @param array $args {
226
  * @type string $highlight The name for the `data-` attributes that get highlighted by this control.
227
  * @type array $prepend Associative array of options to prepend to the list of values.
 
228
  * }
229
  * @return string Markup for the table filter controls.
230
  */
@@ -243,12 +244,16 @@ abstract class QM_Output_Html extends QM_Output {
243
  $args = array_merge( array(
244
  'highlight' => '',
245
  'prepend' => array(),
 
246
  ), $args );
247
 
248
- $core = __( 'Core', 'query-monitor' );
 
249
 
250
- if ( 'component' === $name && count( $values ) > 1 && in_array( $core, $values, true ) ) {
251
- $args['prepend']['non-core'] = __( 'Non-Core', 'query-monitor' );
 
 
252
  }
253
 
254
  $filter_id = 'qm-filter-' . $this->collector->id . '-' . $name;
@@ -268,6 +273,12 @@ abstract class QM_Output_Html extends QM_Output {
268
  $out .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $value ) . '</option>';
269
  }
270
 
 
 
 
 
 
 
271
  $out .= '</select>';
272
  $out .= '</div>';
273
 
@@ -352,33 +363,9 @@ abstract class QM_Output_Html extends QM_Output {
352
  }
353
 
354
  /**
355
- * Returns a file path, name, and line number. Safe for output.
356
- *
357
- * If clickable file links are enabled via the `xdebug.file_link_format` setting in the PHP configuration,
358
- * a link such as this is returned:
359
- *
360
- * <a href="subl://open/?line={line}&url={file}">{text}</a>
361
- *
362
- * Otherwise, the display text and file details such as this is returned:
363
- *
364
- * {text}<br>{file}:{line}
365
- *
366
- * Further information on clickable stack traces for your editor:
367
- *
368
- * PhpStorm: (support is built in)
369
- * `phpstorm://open?file=%f&line=%l`
370
- *
371
- * Visual Studio Code: (support is built in)
372
- * `vscode://file/%f:%l`
373
- *
374
- * Sublime Text: https://github.com/corysimmons/subl-handler
375
- * `subl://open/?url=file://%f&line=%l`
376
- *
377
- * Atom: https://github.com/WizardOfOgz/atom-handler
378
- * `atm://open/?url=file://%f&line=%l`
379
  *
380
- * Netbeans: http://simonwheatley.co.uk/2012/08/clickable-stack-traces-with-netbeans/
381
- * `nbopen://%f:%l`
382
  *
383
  * @param string $text The display text, such as a function name or file name.
384
  * @param string $file The full file path and name.
@@ -442,11 +429,12 @@ abstract class QM_Output_Html extends QM_Output {
442
  $format = ini_get( 'xdebug.file_link_format' );
443
 
444
  /**
445
- * Filters the file link format.
446
  *
 
447
  * @since 3.0.0
448
  *
449
- * @param string $format The format of the file link.
450
  */
451
  $format = apply_filters( 'qm/output/file_link_format', $format );
452
  if ( empty( $format ) ) {
@@ -461,11 +449,12 @@ abstract class QM_Output_Html extends QM_Output {
461
 
462
  public static function get_file_path_map() {
463
  /**
464
- * The file path map.
465
  *
 
466
  * @since 3.0.0
467
  *
468
- * @param array $file_map Array of file paths.
469
  */
470
  return apply_filters( 'qm/output/file_path_map', array() );
471
  }
225
  * @param array $args {
226
  * @type string $highlight The name for the `data-` attributes that get highlighted by this control.
227
  * @type array $prepend Associative array of options to prepend to the list of values.
228
+ * @type array $append Associative array of options to append to the list of values.
229
  * }
230
  * @return string Markup for the table filter controls.
231
  */
244
  $args = array_merge( array(
245
  'highlight' => '',
246
  'prepend' => array(),
247
+ 'append' => array(),
248
  ), $args );
249
 
250
+ $core_val = __( 'Core', 'query-monitor' );
251
+ $core_key = array_search( $core_val, $values, true );
252
 
253
+ if ( 'component' === $name && count( $values ) > 1 && false !== $core_key ) {
254
+ $args['append'][ $core_val ] = $core_val;
255
+ $args['append']['non-core'] = __( 'Non-Core', 'query-monitor' );
256
+ unset( $values[ $core_key ] );
257
  }
258
 
259
  $filter_id = 'qm-filter-' . $this->collector->id . '-' . $name;
273
  $out .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $value ) . '</option>';
274
  }
275
 
276
+ if ( ! empty( $args['append'] ) ) {
277
+ foreach ( $args['append'] as $value => $label ) {
278
+ $out .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $label ) . '</option>';
279
+ }
280
+ }
281
+
282
  $out .= '</select>';
283
  $out .= '</div>';
284
 
363
  }
364
 
365
  /**
366
+ * Returns a file path, name, and line number, or a clickable link to the file. Safe for output.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  *
368
+ * @link https://querymonitor.com/blog/2019/02/clickable-stack-traces-and-function-names-in-query-monitor/
 
369
  *
370
  * @param string $text The display text, such as a function name or file name.
371
  * @param string $file The full file path and name.
429
  $format = ini_get( 'xdebug.file_link_format' );
430
 
431
  /**
432
+ * Filters the clickable file link format.
433
  *
434
+ * @link https://querymonitor.com/blog/2019/02/clickable-stack-traces-and-function-names-in-query-monitor/
435
  * @since 3.0.0
436
  *
437
+ * @param string $format The format of the clickable file link.
438
  */
439
  $format = apply_filters( 'qm/output/file_link_format', $format );
440
  if ( empty( $format ) ) {
449
 
450
  public static function get_file_path_map() {
451
  /**
452
+ * Filters the file path mapping for clickable file links.
453
  *
454
+ * @link https://querymonitor.com/blog/2019/02/clickable-stack-traces-and-function-names-in-query-monitor/
455
  * @since 3.0.0
456
  *
457
+ * @param array $file_map Array of file path mappings.
458
  */
459
  return apply_filters( 'qm/output/file_path_map', array() );
460
  }
output/html/conditionals.php CHANGED
@@ -28,6 +28,9 @@ class QM_Output_Html_Conditionals extends QM_Output_Html {
28
  echo '</ul>';
29
 
30
  echo '</section>';
 
 
 
31
  echo '<section>';
32
  echo '<h3>' . esc_html__( 'False Conditionals', 'query-monitor' ) . '</h3>';
33
 
28
  echo '</ul>';
29
 
30
  echo '</section>';
31
+ echo '</div>';
32
+
33
+ echo '<div class="qm-boxed">';
34
  echo '<section>';
35
  echo '<h3>' . esc_html__( 'False Conditionals', 'query-monitor' ) . '</h3>';
36
 
query-monitor.php CHANGED
@@ -10,7 +10,7 @@
10
  *
11
  * Plugin Name: Query Monitor
12
  * Description: The Developer Tools Panel for WordPress.
13
- * Version: 3.3.0
14
  * Plugin URI: https://querymonitor.com/
15
  * Author: John Blackbourn
16
  * Author URI: https://querymonitor.com/
@@ -61,7 +61,7 @@ if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
61
  return;
62
  }
63
 
64
- foreach ( array( 'QueryMonitor', 'Backtrace', 'Collectors', 'Collector', 'Dispatchers', 'Dispatcher', 'Output', 'Timer' ) as $qm_class ) {
65
  require_once "{$qm_dir}/classes/{$qm_class}.php";
66
  }
67
 
10
  *
11
  * Plugin Name: Query Monitor
12
  * Description: The Developer Tools Panel for WordPress.
13
+ * Version: 3.3.1
14
  * Plugin URI: https://querymonitor.com/
15
  * Author: John Blackbourn
16
  * Author URI: https://querymonitor.com/
61
  return;
62
  }
63
 
64
+ foreach ( array( 'QueryMonitor', 'Backtrace', 'Collectors', 'Collector', 'Dispatchers', 'Dispatcher', 'Hook', 'Output', 'Timer' ) as $qm_class ) {
65
  require_once "{$qm_dir}/classes/{$qm_class}.php";
66
  }
67
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: johnbillion
3
  Tags: debug, debug-bar, debugging, development, developer, performance, profiler, queries, query monitor, rest-api
4
  Requires at least: 3.7
5
  Tested up to: 5.1
6
- Stable tag: 3.3.0
7
  License: GPLv2 or later
8
  Requires PHP: 5.3
9
 
3
  Tags: debug, debug-bar, debugging, development, developer, performance, profiler, queries, query monitor, rest-api
4
  Requires at least: 3.7
5
  Tested up to: 5.1
6
+ Stable tag: 3.3.1
7
  License: GPLv2 or later
8
  Requires PHP: 5.3
9