add_menu( array( 'id' => 'queries', 'title' => __('Debug'), 'meta' => array( 'class' => $class ) ) ); } add_action( 'admin_bar_menu', 'debug_bar_menu', 1000 ); function debug_bar_menu_init() { if ( ! is_super_admin() || ! is_admin_bar_showing() ) return; $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : ''; wp_enqueue_style( 'admin-bar-debug', plugins_url("debug-bar/debug-bar$suffix.css"), array(), '20110112' ); wp_enqueue_script( 'admin-bar-debug', plugins_url("debug-bar/debug-bar$suffix.js"), array(), '20110112' ); // Silence E_NOTICE for deprecated usage. foreach ( array( 'function', 'file', 'argument' ) as $item ) add_filter( "deprecated_{$item}_trigger_error", '__return_false' ); } add_action('admin_bar_init', 'debug_bar_menu_init'); function debug_bar_list() { global $wpdb, $wp_object_cache; if ( ! is_super_admin() || ! is_admin_bar_showing() ) return; $debugs = array(); if ( defined('SAVEQUERIES') && SAVEQUERIES ) $debugs['wpdb'] = array( __('Queries'), 'debug_bar_queries' ); if ( is_object($wp_object_cache) && method_exists($wp_object_cache, 'stats') ) $debugs['object-cache'] = array( __('Object Cache'), 'debug_bar_object_cache' ); if ( WP_DEBUG ) { $debugs['php'] = array( __('Notices / Warnings'), 'debug_bar_php' ); } $debugs['deprecated'] = array( __('Deprecated'), 'debug_bar_deprecated' ); $debugs['wp_query'] = array( __( 'WP Query' ), 'debug_bar_wp_query' ); if ( ! is_admin() ) $debugs['request'] = array( __( 'Request' ), 'debug_bar_request' ); $debugs = apply_filters( 'debug_bar_list', $debugs ); if ( empty($debugs) ) return; ?>

db_version() ); ?>

$debug_output ) : ?>
>
queries) ) { $show_many = isset($_GET['debug_queries']); if ( $wpdb->num_queries > 500 && !$show_many ) $out .= "

" . sprintf( __('There are too many queries to show easily! Show them anyway'), add_query_arg( 'debug_queries', 'true' ) ) . "

"; $out .= '
    '; $first_query = 0; $counter = 0; foreach ( $wpdb->queries as $q ) { list($query, $elapsed, $debug) = $q; $total_time += $elapsed; if ( !$show_many && ++$counter > 500 ) continue; $query = nl2br(esc_html($query)); $out .= "
  1. $query
    $debug #{$counter} (" . number_format(sprintf('%0.1f', $elapsed * 1000), 1, '.', ',') . "ms)
  2. \n"; } $out .= '
'; } else { $out .= "

" . __('There are no queries on this page.') . "

"; } $query_count = '

Total Queries:' . number_format( $wpdb->num_queries ) . "

\n"; $query_time = '

Total query time:' . number_format(sprintf('%0.1f', $total_time * 1000), 1) . "ms

\n"; $memory_usage = '

Peak Memory Used:' . number_format( memory_get_peak_usage( ) ) . " bytes

\n"; $out = $query_count . $query_time . $memory_usage . $out; return $out; } function debug_bar_object_cache() { global $wp_object_cache; ob_start(); echo "
"; $wp_object_cache->stats(); echo "
"; $out = ob_get_contents(); ob_end_clean(); return $out; } function debug_bar_php() { global $_debug_bar_notices, $_debug_bar_warnings; echo "
"; echo '

Total Warnings:' . number_format( count( $_debug_bar_warnings ) ) . "

\n"; echo '

Total Notices:' . number_format( count( $_debug_bar_notices ) ) . "

\n"; if ( count( $_debug_bar_warnings ) ) { echo '
    '; foreach ( $_debug_bar_warnings as $location_message) { list( $location, $message) = $location_message; echo "
  1. WARNING: ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
  2. "; } echo '
'; } if ( count( $_debug_bar_notices ) ) { echo '
    '; foreach ( $_debug_bar_notices as $location_message) { list( $location, $message) = $location_message; echo "
  1. NOTICE: ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
  2. "; } echo '
'; } echo "
"; } function debug_bar_deprecated() { global $_debug_bar_deprecated_functions, $_debug_bar_deprecated_files, $_debug_bar_deprecated_arguments; echo "
"; echo '

Total Functions:' . number_format( count( $_debug_bar_deprecated_functions ) ) . "

\n"; echo '

Total Arguments:' . number_format( count( $_debug_bar_deprecated_arguments ) ) . "

\n"; echo '

Total Files:' . number_format( count( $_debug_bar_deprecated_files ) ) . "

\n"; if ( count( $_debug_bar_deprecated_functions ) ) { echo '
    '; foreach ( $_debug_bar_deprecated_functions as $location => $message) echo "
  1. ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
  2. "; echo '
'; } if ( count( $_debug_bar_deprecated_files ) ) { echo '
    '; foreach ( $_debug_bar_deprecated_files as $location => $message) echo "
  1. ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
  2. "; echo '
'; } if ( count( $_debug_bar_deprecated_arguments ) ) { echo '
    '; foreach ( $_debug_bar_deprecated_arguments as $location => $message) echo "
  1. ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
  2. "; echo '
'; } echo "
"; } function debug_bar_wp_query() { global $template, $wp_query; echo "
"; echo '

Queried Object ID:' . get_queried_object_id() . "

\n"; // Determine the query type. Follows the template loader order. $type = ''; if ( is_404() ) $type = '404'; elseif ( is_search() ) $type = 'Search'; elseif ( is_tax() ) $type = 'Taxonomy'; elseif ( is_front_page() ) $type = 'Front Page'; elseif ( is_home() ) $type = 'Home'; elseif ( is_attachment() ) $type = 'Attachment'; elseif ( is_single() ) $type = 'Single'; elseif ( is_page() ) $type = 'Page'; elseif ( is_category() ) $type = 'Category'; elseif ( is_tag() ) $type = 'Tag'; elseif ( is_author() ) $type = 'Author'; elseif ( is_date() ) $type = 'Date'; elseif ( is_archive() ) $type = 'Archive'; elseif ( is_paged() ) $type = 'Paged'; if ( !empty($type) ) echo '

Query Type:' . $type . "

\n"; if ( !empty($template) ) echo '

Query Template:' . basename($template) . "

\n"; $show_on_front = get_option( 'show_on_front' ); $page_on_front = get_option( 'page_on_front' ); $page_for_posts = get_option( 'page_for_posts' ); echo '

Show on Front:' . $show_on_front . "

\n"; if ( 'page' == $show_on_front ) { echo '

Page for Posts:' . $page_for_posts . "

\n"; echo '

Page on Front:' . $page_on_front . "

\n"; } echo '
'; if ( empty($wp_query->query) ) $query = 'None'; else $query = http_build_query( $wp_query->query ); echo '

Query Arguments:

'; echo '

' . esc_html( $query ) . '

'; if ( ! empty($wp_query->request) ) { echo '

Query SQL:

'; echo '

' . esc_html( $wp_query->request ) . '

'; } $object = get_queried_object(); if ( ! is_null( $object ) ) { echo '

Queried Object:

'; echo '
    '; foreach ($object as $key => $value) { echo '
  1. ' . $key . ' => ' . $value . '
  2. '; } echo '
'; } echo '
'; } function debug_bar_request() { global $wp; echo "
"; if ( empty($wp->request) ) $request = 'None'; else $request = $wp->request; echo '

Request:

'; echo '

' . esc_html( $request ) . '

'; if ( empty($wp->query_string) ) $query_string = 'None'; else $query_string = $wp->query_string; echo '

Query String:

'; echo '

' . esc_html( $query_string ) . '

'; if ( empty($wp->matched_rule) ) $matched_rule = 'None'; else $matched_rule = $wp->matched_rule; echo '

Matched Rewrite Rule:

'; echo '

' . esc_html( $matched_rule ) . '

'; if ( empty($wp->matched_query) ) $matched_query = 'None'; else $matched_query = $wp->matched_query; echo '

Matched Rewrite Query:

'; echo '

' . esc_html( $matched_query ) . '

'; echo '
'; } function debug_bar_error_handler( $type, $message, $file, $line ) { global $_debug_bar_real_error_handler, $_debug_bar_notices, $_debug_bar_warnings; $_key = md5( $file . ':' . $line . ':' . $message ); switch ( $type ) { case E_WARNING : case E_USER_WARNING : $_debug_bar_warnings[$_key] = array( $file.':'.$line, $message ); break; case E_NOTICE : case E_USER_NOTICE : $_debug_bar_notices[$_key] = array( $file.':'.$line, $message ); break; case E_STRICT : // TODO break; case E_DEPRECATED : case E_USER_DEPRECATED : // TODO break; case 0 : // TODO break; } if ( null != $_debug_bar_real_error_handler ) return call_user_func( $_debug_bar_real_error_handler, $type, $message, $file, $line ); else return false; } if ( WP_DEBUG ) { $GLOBALS['_debug_bar_real_error_handler'] = set_error_handler('debug_bar_error_handler'); $GLOBALS['_debug_bar_warnings'] = $GLOBALS['_debug_bar_notices'] = array(); } // Alot of this code is massaged from nacin's log-deprecated-notices plugin $_debug_bar_deprecated_functions = $_debug_bar_deprecated_files = $_debug_bar_deprecated_arguments = array(); function debug_bar_deprecated_function_run($function, $replacement, $version) { global $_debug_bar_deprecated_functions; $backtrace = debug_backtrace(); $bt = 4; // Check if we're a hook callback. if ( ! isset( $backtrace[4]['file'] ) && 'call_user_func_array' == $backtrace[5]['function'] ) { $bt = 6; } $file = $backtrace[ $bt ]['file']; $line = $backtrace[ $bt ]['line']; if ( ! is_null($replacement) ) $message = sprintf( __('%1$s is deprecated since version %2$s! Use %3$s instead.'), $function, $version, $replacement ); else $message = sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $function, $version ); $_debug_bar_deprecated_functions[$file.':'.$line] = $message; } add_action( 'deprecated_function_run', 'debug_bar_deprecated_function_run', 10, 3 ); function debug_bar_deprecated_file_included( $old_file, $replacement, $version, $message ) { global $_debug_bar_deprecated_files; $backtrace = debug_backtrace(); $file = $backtrace[4]['file']; $file_abs = str_replace(ABSPATH, '', $file); $line = $backtrace[4]['line']; $message = empty( $message ) ? '' : ' ' . $message; if ( ! is_null( $replacement ) ) $message = sprintf( __('%1$s is deprecated since version %2$s! Use %3$s instead.'), $file_abs, $version, $replacement ) . $message; else $message = sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $file_abs, $version ) . $message; $_debug_bar_deprecated_files[$file.':'.$line] = $message; } add_action( 'deprecated_file_included', 'debug_bar_deprecated_file_included', 10, 4 ); function debug_bar_deprecated_argument_run( $function, $message, $version) { global $_debug_bar_deprecated_arguments; $backtrace = debug_backtrace(); $bt = 4; if ( ! isset( $backtrace[4]['file'] ) && 'call_user_func_array' == $backtrace[5]['function'] ) { $bt = 6; } $file = $backtrace[ $bt ]['file']; $line = $backtrace[ $bt ]['line']; $_debug_bar_deprecated_arguments[$file.':'.$line] = $message; } add_action( 'deprecated_argument_run', 'debug_bar_deprecated_argument_run', 10, 3 ); ?>