78 lines
1.7 KiB
PHP
78 lines
1.7 KiB
PHP
<?php declare(strict_types = 1);
|
|
/**
|
|
* Hook processor.
|
|
*
|
|
* @package query-monitor
|
|
*/
|
|
|
|
class QM_Hook {
|
|
|
|
/**
|
|
* @param string $name
|
|
* @param string $type
|
|
* @param array<string, WP_Hook> $wp_filter
|
|
* @param bool $hide_qm
|
|
* @param bool $hide_core
|
|
* @return array<int, array<string, mixed>>
|
|
* @phpstan-param 'action'|'filter' $type
|
|
* @phpstan-return array{
|
|
* name: string,
|
|
* type: 'action'|'filter',
|
|
* actions: list<array{
|
|
* priority: int,
|
|
* callback: array<string, mixed>,
|
|
* }>,
|
|
* parts: list<string>,
|
|
* components: array<string, string>,
|
|
* }
|
|
*/
|
|
public static function process( $name, string $type, array $wp_filter, $hide_qm = false, $hide_core = false ) {
|
|
|
|
$actions = array();
|
|
$components = array();
|
|
|
|
if ( isset( $wp_filter[ $name ] ) ) {
|
|
|
|
# http://core.trac.wordpress.org/ticket/17817
|
|
$action = $wp_filter[ $name ];
|
|
|
|
foreach ( $action as $priority => $callbacks ) {
|
|
|
|
foreach ( $callbacks as $cb ) {
|
|
|
|
$callback = QM_Util::populate_callback( $cb );
|
|
|
|
if ( isset( $callback['component'] ) ) {
|
|
if (
|
|
( $hide_qm && 'query-monitor' === $callback['component']->context )
|
|
|| ( $hide_core && 'core' === $callback['component']->context )
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
$components[ $callback['component']->name ] = $callback['component']->name;
|
|
}
|
|
|
|
$actions[] = array(
|
|
'priority' => $priority,
|
|
'callback' => $callback,
|
|
);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
$parts = array_values( array_filter( (array) preg_split( '#[_/.-]#', $name ) ) );
|
|
|
|
return array(
|
|
'name' => $name,
|
|
'type' => $type,
|
|
'actions' => $actions,
|
|
'parts' => $parts,
|
|
'components' => $components,
|
|
);
|
|
|
|
}
|
|
|
|
}
|