How can I find out what functions are assigned to actions?

Is there any way to know what functions are added to actions on a certain page in WordPress?

3 s
3

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>';
    }
}

Leave a Comment