89 lines
2.0 KiB
PHP
89 lines
2.0 KiB
PHP
|
<?php declare(strict_types = 1);
|
||
|
/**
|
||
|
* Hooks and actions collector.
|
||
|
*
|
||
|
* @package query-monitor
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @extends QM_DataCollector<QM_Data_Hooks>
|
||
|
*/
|
||
|
class QM_Collector_Hooks extends QM_DataCollector {
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
public $id = 'hooks';
|
||
|
|
||
|
/**
|
||
|
* @var bool
|
||
|
*/
|
||
|
protected static $hide_core;
|
||
|
|
||
|
public function get_storage(): QM_Data {
|
||
|
return new QM_Data_Hooks();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return void
|
||
|
*/
|
||
|
public function process() {
|
||
|
/**
|
||
|
* @var array<string, int> $wp_actions
|
||
|
* @var array<string, WP_Hook> $wp_filter
|
||
|
*/
|
||
|
global $wp_actions, $wp_filter;
|
||
|
|
||
|
self::$hide_qm = self::hide_qm();
|
||
|
self::$hide_core = ( defined( 'QM_HIDE_CORE_ACTIONS' ) && QM_HIDE_CORE_ACTIONS );
|
||
|
|
||
|
$hooks = array();
|
||
|
$all_parts = array();
|
||
|
$components = array();
|
||
|
|
||
|
if ( has_action( 'all' ) ) {
|
||
|
$hooks[] = QM_Hook::process( 'all', 'action', $wp_filter, self::$hide_qm, self::$hide_core );
|
||
|
}
|
||
|
|
||
|
$this->data->all_hooks = defined( 'QM_SHOW_ALL_HOOKS' ) && QM_SHOW_ALL_HOOKS;
|
||
|
|
||
|
if ( $this->data->all_hooks ) {
|
||
|
// Show all hooks
|
||
|
$hook_names = array_keys( $wp_filter );
|
||
|
} else {
|
||
|
// Only show action hooks that have been called at least once
|
||
|
$hook_names = array_keys( $wp_actions );
|
||
|
}
|
||
|
|
||
|
foreach ( $hook_names as $name ) {
|
||
|
$type = 'action';
|
||
|
|
||
|
if ( $this->data->all_hooks ) {
|
||
|
$type = array_key_exists( $name, $wp_actions ) ? 'action' : 'filter';
|
||
|
}
|
||
|
|
||
|
$hook = QM_Hook::process( $name, $type, $wp_filter, self::$hide_qm, self::$hide_core );
|
||
|
$hooks[] = $hook;
|
||
|
|
||
|
$all_parts = array_merge( $all_parts, $hook['parts'] );
|
||
|
$components = array_merge( $components, $hook['components'] );
|
||
|
|
||
|
}
|
||
|
|
||
|
$this->data->hooks = $hooks;
|
||
|
$this->data->parts = array_unique( array_filter( $all_parts ) );
|
||
|
$this->data->components = array_unique( array_filter( $components ) );
|
||
|
|
||
|
usort( $this->data->parts, 'strcasecmp' );
|
||
|
usort( $this->data->components, 'strcasecmp' );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
# Load early to catch all hooks
|
||
|
QM_Collectors::add( new QM_Collector_Hooks() );
|