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;
?>
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 .= "- $query
$debug #{$counter} (" . number_format(sprintf('%0.1f', $elapsed * 1000), 1, '.', ',') . "ms)
\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 "- WARNING: ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
";
}
echo '
';
}
if ( count( $_debug_bar_notices ) ) {
echo '
';
foreach ( $_debug_bar_notices as $location_message) {
list( $location, $message) = $location_message;
echo "- NOTICE: ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
";
}
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 "- ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
";
echo '
';
}
if ( count( $_debug_bar_deprecated_files ) ) {
echo '
';
foreach ( $_debug_bar_deprecated_files as $location => $message)
echo "- ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
";
echo '
';
}
if ( count( $_debug_bar_deprecated_arguments ) ) {
echo '
';
foreach ( $_debug_bar_deprecated_arguments as $location => $message)
echo "- ".str_replace(ABSPATH, '', $location) . ' - ' . strip_tags($message). "
";
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 '- ' . $key . ' => ' . $value . '
';
}
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 );
?>