Is there any way to know what functions are added to actions on a certain page in WordPress?
3 s
There is a magic action all
which is called on every action or filter. You can hook into this action and log all associated functions. In $GLOBALS['wp_filter']
which you can inspect too you can find all active hooks, eg. hooks that are actually used.
I have written a small plugin T5 Debug Hook to see all functions for one hook:
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: T5 Debug Hook
* Description: Adds a list of registered filters and action for a hook. Call a page with <code>?hook=NAME</code> to see it.
*/
add_action( 'shutdown', 't5_debug_hook' );
function t5_debug_hook()
{
if ( ! isset ( $_GET['hook'] ) or ! current_user_can( 'update_core') )
{
return;
}
$f = $GLOBALS['wp_filter'];
if ( ! isset ( $f[ $_GET['hook'] ] ) )
{
print 'Nothing found for ' . esc_html( $_GET['hook'] );
return;
}
print '<pre>' . esc_html( var_export( $f[ $_GET['hook'] ], TRUE ) ) . '</pre>';
}
To get a list of all available actions on a page try this:
<?php # -*- coding: utf-8 -*-
/*
Plugin Name: All Actions List
Description: Lists all actions run during one request.
Version: 1.0
Required: 3.1
Author: Thomas Scholz
Author URI: http://toscho.de
License: GPL
*/
! defined( 'ABSPATH' ) and exit;
add_action( 'all', 'aal_handler', 99999, 99 );
function aal_handler()
{
static $list = array ();
// exclude certain actions:
$exclude = array ( 'gettext', 'gettext_with_context' );
$action = current_filter();
if ( ! in_array( $action, $exclude ) )
{
$list[] = $action;
}
// shutdown is the last action
if ( 'shutdown' == $action )
{
print '<pre>' . implode( "\n", $list ) . '</pre>';
}
}