Get List of Registered Meta Boxes and Removing Them

Not really, but you can define your own. All meta boxes are stored in the global variable $wp_meta_boxes which is a multi-dimensional array.

function get_meta_boxes( $screen = null, $context="advanced" ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    return $wp_meta_boxes[$page][$context];          
}

This array will show all of the meta boxes registered for a specific screen and a specific context. You could also drill down even further because this array is also a multidimensional array that segregates meta boxes by priority and id.


So let’s say you want to get an array that contains all of the meta boxes that are of “normal” priority on the admin Dashboard. You’d call the following:

$dashboard_boxes = get_meta_boxes( 'dashboard', 'normal' );

This is identical to the global array $wp_meta_boxes['dashboard']['normal'] and it also a multi-dimensional array.

Removing core meta boxes

Let’s say you want to remove a bunch of meta boxes. The function above can be tweaked slightly to avail that:

function remove_meta_boxes( $screen = null, $context="advanced", $priority = 'default', $id ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    unset( $wp_meta_boxes[$page][$context][$priority][$id] );
}

If you wanted to remove, say, the incoming links widget from the Dashboard, you’d call:

remove_meta_boxes( 'dashboard', 'normal', 'core', 'dashboard_incoming_links' );

Leave a Comment