Debug trace for WordPress, including ad hoc action hook and filter tracing.

  • The primary purpose of debug trace is to help in the development of PHP code: plugins or themes.
  • The primary purpose of action trace is to help you understand the sequence of events in the server.
  • The primary purpose of ad hoc tracing is to let you see what’s happening without changing any code.
  • The primary purpose of ‘string watch’ is to track the source of some output.
  • This plugin provides the admin interface to trace functions and methods and action and filter tracing.

Except for HTML comments, oik bwtrace does not alter the output of your web pages.

You can also use the oik trace facilities to assist in problem determination in a live site.
Output is written to files on the server in a user defined trace files directory.
When tracing a live or staging site you should ensure that the trace files directory is not publicly accessible.


  • Traces to a defined Trace files directory
  • Traces ALL server functionality, including AJAX, REST and other background requests
  • Writes summary trace record for each transaction into Daily Trace summary files
  • Traces browser transactions separately, if required
  • Traces AJAX transactions separately, if required
  • Traces REST requests separately, if required
  • Traces CLI requests separately, if required
  • Ability to choose the IP address to trace, defaults to ALL requests
  • Supports ad hoc tracing of user defined hooks
  • Action trace counts help you understand the sequence of actions and filters
  • Provides contextual information
  • Minimum performance overhead when tracing is not enabled
  • Tracing can be enabled programmatically
  • Traces and backtraces PHP Error, Warning and Notice messages
  • Backtraces deprecated logic messages
  • Does not require WP_DEBUG to be defined
  • Does not require SAVEQUERIES to be defined
  • Dynamically activates trace functions
  • Implemented as lazy just-in-time code
  • Can be used during regression testing
  • Can be activated in wp-config.php and db.php to trace code before WordPress is fully loaded
  • Plugin does not need to be activated if started programmatically or from wp-config.php
  • Operates as a standalone plugin
  • Integrated with oik-lib shared library management
  • Easy to code APIs: bw_trace2(), bw_backtrace().
  • API supports multiple trace levels

Ad hoc tracing allows you to:

  • trace parameters
  • trace results
  • trace registered functions
  • trace the global post
  • set the priority for the trace hook
  • debug backtrace hook invocation
  • perform ‘string watch’ to watch for a particular string

The trace record output can include:

  • Fully qualified source file name
  • Trace record count and trace error count
  • Time stamp
  • Current filter information
  • Hook count
  • Number of database queries that have been performed.
  • Current post ID
  • Current and peak memory usage (in bytes)
  • Files loaded count
  • Contextual information

The output for action tracing can include trace records showing:

  • Count of action hooks and filters
  • Invocation of the ‘wp’ actions
  • Contents of the global wp_rewrite for the ‘wp’ action
  • Summary reports at ‘shutdown’
  • Information about deprecated logic
  • Information related to Errors, Warnings and Notices

New in v3.3.0

  • Optionally traces plugin load times
  • Supports ad-hoc Action timing points

New in v3.2.0

  • Daily trace summary records contains the http response code

New in v3.0.0

  • All trace files are written within a user defined Trace files directory.
  • Tracing will not be activated if the Trace files directory is not specified or is not valid.
  • Supports purging of trace files from the Dashboard using a defined retention period.
  • The Daily Trace Summary file base name is now user defined.
  • Separated Trace ‘shutdown’ status report from Daily Trace summary.
  • Improvements to the [bwtrace] shortcode; moved from the oik plugin.
  • Improved support for tracing REST requests.
  • Added support for WP-CLI; initial prototype of ‘wp trace’ command.
  • Supports trace file generation logic for tracing parallel requests.
  • Improved support for tracing REST requests, with early detection of REST API calls
  • Fixes to logic broken by WordPress 4.7
  • Tested: With Gutenberg
  • Tested: With PHP 7.2 thru’ 7.4
  • Tested: With WordPress 5.3 and WordPress Multi Site

See also:

Is there a tutorial?

See this page and short video
Introduction to oik-bwtrace

Can I get support?

Use the contact form on the oik-plugins website.

How can I contribute?

[github bobbingwide oik-bwtrace]

Further reading

If you want to read more about the oik plugins then please visit the
oik plugin
“the oik plugin – for often included key-information”


  • Trace files directory box
  • Trace options - Requests sections
  • Trace options - Trace records
  • Daily Trace Summary box
  • Action options - Options
  • Action options - Ad hoc tracing
  • Trace information box
  • Raw trace output
  • Daily Trace Summary file


  1. Upload the contents of the oik-bwtrace plugin to the `/wp-content/plugins/oik-bwtrace’ directory
  2. Activate the oik-bwtrace plugin through the ‘Plugins’ menu in WordPress
  3. Define your trace options using Settings > oik trace options
  4. Define your action trace options using Settings > oik action options
  5. Don’t forget to disable tracing when you no longer need it
  6. Don’t forget to purge the trace output when you no longer need it


Where is the FAQ?

oik-bwtrace FAQ

Where is the documentation?

oik-bwtrace – debug trace for WordPress


September 3, 2016
With the addition of Ad hoc tracing and the fact that oik-bwtrace doesn't affect what's displayed on the front end(*) oik-bwtrace is my GO TO plugin for problem determination... finding out what's really going on. Most of the other debugging plugins only work on the front end and alter what's sent to the browser. (*) With some minor exceptions.
Read all 1 review

Contributors & Developers

“oik-bwtrace” is open source software. The following people have contributed to this plugin.


“oik-bwtrace” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “oik-bwtrace” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Changed: Correct plugin load time heading #87
  • Changed: Reconcile shared library file change
  • Tested: With WordPress 5.9.2 and WordPress Multi Site


  • Added: Action timing points showing the first invocation of relevant hooks #87
  • Added: Add Plugin load times #87
  • Added: Add trace_plugin_load option to control display of Plugin load times report #87
  • Changed: Set $timer_start to $_SERVER[‘REQUEST_TIME_FLOAT’] #87
  • Changed: Add end of life for PHP 8.1 #106
  • Tested: With WordPress 5.9 and WordPress Multi Site
  • Tested: With PHP 8.0


  • Fixed: Check get_current_screen is available before calling it,[github bobbingwide oik-bwtrace issues 104]
  • Fixed: Check bw_add_shortcode exists before calling it, [github bobbingwide oik-bwtrace issues 103]
  • Fixed: Don’t write trace summary report for customizer; when request contains customize_changeset_uuid,[github bobbingwide oik-bwtrace issues 102]
  • Fixed: Trim trace_directory before storing.,[github bobbingwide oik-bwtrace issue 101]
  • Fixed: Don’t write trace summary report when exporting from Visual-Form-Builder (VFB),[github bobbingwide oik-bwtrace issues 100]
  • Tested: With PHP 8.0
  • Tested: With PHPUnit 9
  • Tested: With WordPress 5.8 and WordPress Multi Site


  • Changed: Set EOL date for PHP 8.0 to 2023/11/26,[github bobbingwide oik-bwtrace issues 98]
  • Changed: Support PHP 8.0,[github bobbingwide oik-bwtrace issues 98]
  • Changed: Update language files
  • Fixed: Avoid deprecated messages from PHP 8.0,[github bobbingwide oik-bwtrace issues 98]
  • Fixed: Don’t call attempt_reset when there’s no trace file selector instance,[github bobbingwide oik-bwtrace issues 99]
  • Tested: With PHP 8.0
  • Tested: With PHPUnit 9
  • Tested: With WordPress 5.7 and WordPress Multi Site


  • Added: Add http_response_code output to daily trace summary record,[github bobbingwide oik-bwtrace issues 96]
  • Changed: Set trace admin block width to 100%
  • Changed: Updated some shared library files
  • Fixed: Attempt to avoid out of memory tracing large objects,[github bobbingwide oik-bwtrace issues 97]
  • Fixed: In bw_lazy_log() check if the $value is scalar first; avoid calling bw_trace_print_r(),[github bobbingwide oik-bwtrace issues 97]
  • Tested: With WordPress 5.6 and WordPress Multi Site
  • Tested: With Gutenberg 9.8.2
  • Tested: With PHP 7.4


  • Added: Add saved queries report ordered by longest query time,[github bobbingwide oik-bwtrace issues 93]
  • Added: Add saved queries report grouped by calling function,[github bobbingwide oik-bwtrace issues 93]
  • Changed: Updated saved queries report to make it easier to load into a spreadsheet,[github bobbingwide oik-bwtrace issues 93]
  • Fixed: Trace ‘shutdown’ status report causes Gutenberg’s Site Editor (beta) to fail,[github bobbingwide oik-bwtrace issues 92]
  • Fixed: Avoid tracing enormous objects with little value. Use wp_json_encode to see what the $result actually contains,[github bobbingwide oik-bwtrace issues 88]
  • Changed: Update shared library for plugin updates,[github bobbingwide oik-bwtrace issues 89]
  • Fixed: Trace fails if you don’t complete a file name but check the Enabled checkbox,[github bobbingwide oik-bwtrace issues 85]
  • Tested: With WordPress 5.6-beta4 and WordPress Multi Site
  • Tested: With Gutenberg 9.3.0
  • Tested: With PHP 7.4


  • Changed: Reintroduced logic to only trace a specific IP,[github bobbingwide oik-bwtrace issues 17]
  • Changed: Remove test on $_REQUEST[‘wc-ajax’] now that trace file generation limit logic’s available,[github bobbingwide oik-bwtrace issues 49]
  • Changed: Document Hook count in the Daily Trace Summary file,[github bobbingwide oik-bwtrace issues 53]
  • Changed: Don’t count BW_TRACE_INFO as a Trace error,[github bobbingwide oik-bwtrace issues 73]
  • Changed: Support PHP 7.4,[github bobbingwide oik-bwtrace issues 81]


  • Changed: Tidy up bw_trace_http_user_agent,[github bobbingwide oik-bwtrace issues 22]
  • Added: Hook count in daily trace summary and trace records,[github bobbingwide oik-bwtrace issues 53]
  • Fixed: check for edd_action in bw_trace_oik_to_echo,[github bobbingwide oik-bwtrace issues 41]
  • Changed: Eliminate gob() – gobang – calls,[github bobbingwide oik-bwtrace issues 70]
  • Changed: Add button to purge daily trace summary files separately from other trace files,[github bobbingwide oik-bwtrace issues 71]
  • Changed: Remove anything to do with bwtron and bwtroff,[github bobbingwide oik-bwtrace issues 71]
  • Changed: Further changes to fields traced at startup,[github bobbingwide oik-bwtrace issues 72]
  • Changed: Add option to purge the trace file if no errors traced,[github bobbingwide oik-bwtrace issues 73]
  • Changed: Change bw_trace2()’s to make them BW_TRACE_ERROR level,[github bobbingwide oik-bwtrace issues 73]
  • Changed: Check count( $handlers ) when reporting active output buffering handlers,[github bobbingwide oik-bwtrace issues 74]
  • Fixed: Don’t append Trace Summary when Wordfence is downloading .htaccess,[github bobbingwide oik-bwtrace issues 75]
  • Fixed: Add hex dump support for trace output wth helper function bw_trace_hexdump,[github bobbingwide oik-bwtrace issues 76]
  • Fixed: Don’t echo trace summary for health check,[github bobbingwide oik-bwtrace issues 77]
  • Changed: Don’t write trace status report when request is edd-api,[github bobbingwide oik-bwtrace issues 78]
  • Fixed: Add tests for PHP 7.3 end-of-life and zlib.output_compression,[github bobbingwide oik-bwtrace issues 79]
  • Fixed: Tested under PHPUnit 8,[github bobbingwide oik-bwtrace issues 80]
  • Tested: Add PHPUnit test for bw_trace_inspect_current,[github bobbingwide oik-bwtrace issues 63]
  • Tested: With WordPress 5.3 and WordPress Multi Site
  • Tested: With PHP 7.3
  • Tested: With PHPUnit 8


  • Changed: No longer register [bwtron] and [bwtroff] shortcodes,[github bobbingwide oik-bwtrace issues 71]
  • Changed: Ignore any files in tests\bwtrace
  • Changed: Add end of life date for PHP 7.3 and prepare for 7.4,[github bobbingwide oik-bwtrace issues 79]
  • Fixed: Don’t write trace status report when …,[github bobbingwide oik-bwtrace issues 78]
  • Changed: Update language files,[github bobbingwide oik-bwtrace issues 69]
  • Changed: Simplify [bwtrace] shortcode,[github bobbingwide oik-bwtrace issues 69]
  • Changed: Adjust tests for bwtrace shortcode,[github bobbingwide oik-bwtrace issues 69]
  • Changed: Delete deprecated functions from deprecated.php,[github bobbingwide oik-bwtrace issues 69]
  • Changed: Update oik_trace_notes, don’t call oik_trace_reset_notes,[github bobbingwide oik-bwtrace issues 71]
  • Changed: Start increasing robustness of bw_trace_log
  • Changed: Correct class trace_file_selector tests,[github bobbingwide oik-bwtrace issues 16]
  • Tested: Incomplete object class tracing tested elsewhere,[github bobbingwide oik-bwtrace issues 56]
  • Tested: Update tests for trace options page,[github bobbingwide oik-bwtrace issues 71]


  • Fixed: Don’t write trace summary for site health check,[github bobbingwide oik-bwtrace issues 77]
  • Changed: Update bobbforms library file and adjust tests accordingly
  • Fixed: Ensure includes\oik-actions.php loaded for bwtrace_get_remote_addr call,[github bobbingwide oik-bwtrace issues 71]


  • Changed: Improve logic to get the remote IP address [github bobbingwide oik-bwtrace issues 71]
  • Changed: Check trace levels before tracing $_SERVER [github bobbingwide oik-bwtrace issues 72]
  • Changed: Include list of output buffer handlers in bw_trace_print_r [github bobbingwide oik-bwtrace issues 74]


  • Fixed: Problems noted with v3.0.0-alpha-20180524 [github bobbingwide oik-bwtrace issues 71]
  • Changed: Reconciled shared libraries; updating version numbers


  • Fixed: Problems noted with v3.0.0-alpha-20180523 [github bobbingwide oik-bwtrace issues 71]


  • Added: Trace files Purge capability with defined retention period [github bobbingwide oik-bwtrace issues 71]
  • Added: Trace files directory required before any tracing can be performed [github bobbingwide oik-bwtrace issues 71]
  • Changed: Improvements to the Daily Trace Summary report [github bobbingwide oik-bwtrace issues 68]
  • Changed: Move shortcodes from oik and add bwtrace option=logs [github bobbingwide oik-bwtrace issues 69]
  • Fixed: Cater for Linux file name case sensitivity on includes/class-BW-trace-controller.php
  • Fixed: Fix trace file reset when $this->limit is null [github bobbingwide oik-bwtrace issues 16]
  • Tested: With Gutenberg 2.9.0
  • Tested: With PHP 7.1 and 7.2
  • Tested: With WordPress 4.9.6 and 5.0-alpha and WordPress Multisite


  • Added: WP-CLI support [github bobbingwide oik-bwtrace issues 54]
  • Added: Support trace limits by request type [github bobbingwide oik-bwtrace issues 16]
  • Changed: Change trace of SAVEQUERIES to verbose [github bobbingwide oik-bwtrace issues 34]
  • Changed: Improve support for tracing REST requests [github bobbingwide oik-bwtrace issues 67]
  • Changed: Improved Daily Trace Summary logic [github bobbingwide oik-bwtrace issues 68]
  • Changed: Pre-detect REST API calls [github bobbingwide oik-bwtrace issues 52]
  • Fixed: bw_trace_get_attached_hook_count not working since WordPress 4.7 [github bobbingwide oik-bwtrace issues 66]
  • Fixed: bw_trace_inspect_current no longer determines the current priority [github bobbingwide oik-bwtrace issues 63]
  • Tested: With Gutenberg 2.7.0
  • Tested: With PHP 7.1 and 7.2
  • Tested: With WordPress 4.9.5 and 5.0-alpha and WordPress Multsite


  • Added: Display information related to WPMS installations [github bobbingwide oik-bwtrace issues 51]
  • Changed: 100% translatable and localizable on wordpress.org [github bobbingwide oik-bwtrace issues 60]
  • Changed: Convert php.net URLs into links [github bobbingwide oik-bwtrace issues 51]
  • Changed: Display End of Life for PHP 7.2 [github bobbingwide oik-bwtrace issues 55]
  • Changed: First pass at tracing $_GET and $_POST as well as $_REQUEST [github bobbingwide oik-bwtrace issues 61]
  • Changed: Fix Warning: Count() messages for PHP 7.2
  • Changed: Logic to watch for a constant changing [github bobbingwide oik-bwtrace issues 57]
  • Changed: Test bw_invoke_shortcode exists even if oik-sc-help loaded [github bobbingwide oik-bwtrace issues 62]
  • Tested: With WordPress 4.9.1 and WordPress Multisite
  • Tested: With PHP 7.1 and 7.2


  • Changed: Synchronized shared libraries with oik v3.2.0-RC1,
  • Changed: Regenerate language files for en_GB and bb_BB
  • Added: bw_trace_all_attached_hooks() for when problem determination gets serious
  • Tested: With WordPress 4.8.2 and 4.9-beta3


  • Added: Logic to limit tracing to CLI processing [github bobbingwide oik-bwtrace issues 58]
  • Changed: Logic to detect changes to a constant ( e.g. PHP_SAPI ) [github bobbingwide oik-bwtrace issue 57]
  • Changed: Further analysis in oik_yourehavingmeon()
  • Fixed: Catchable fatal error when tracing __PHP_Incomplete_Class [github bobbingwide oik-bwtrace issues 56]
  • Changed: Reduce messages produced by bw_trace_reset() [github bobbingwide oik-bwtrace issues 46]


  • Changed: Improve handling of temporary (random?) problems with file_exists()
  • Added: Add an Information section to improve problem determination [github bobbingwide oik-bwtrace issues 51]
  • Added: Include output_buffering and implicit_flush, EOL for PHP 7.1 [github bobbingwide oik-bwtrace issues 51]


  • Changed: Add logging library functions under bw_log [github bobbingwide oik-bwtrace issues 50]
  • Changed: Cater for REST API v2 [github bobbingwide oik-bwtrace issues 42]
  • Changed: Do not enqueue jQuery when DOING_AJAX [github bobbingwide oik-bwtrace issues 47]
  • Changed: Improve bw_trace_error_handler output [github bobbingwide oik-bwtrace issues 44]
  • Changed: Make bw_trace_reset_status() more context sensitive [github bobbingwide oik-bwtrace issues 49]
  • Changed: Part 1 – include yyyy in the file name [github bobbingwide oik-bwtrace issues 45]
  • Changed: Reconcile shared libraries with oik v3.1.0
  • Changed: Reduce messages produced by trace reset [github bobbingwide oik-bwtrace issue 46]
  • Fixed: trace shutdown sometimes can’t find all the functions it needs; Wrong type of slash [github bobbingwide oik-bwtrace issues 43]
  • Tested: With WordPress 4.7-RC1


  • Added: ‘String watch’ capability [github bobbingwide oik-bwtrace issues 36]
  • Changed: Support tracing of nested Closures in bw_trace_obsafe_print_r() [github bobbingwide oik-bwtrace issues 28]
  • Changed: Improve output for saved queries [github bobbingwide oik-bwtrace issues 29]
  • Changed: Improve formatting of included files [github bobbingwide oik-bwtrace issues 32]
  • Changed: Improve formatting of hooks [github bobbingwide oik-bwtrace issues 33]
  • Changed: Blessed task – reduce trace output produced [github bobbingwide oik-bwtrace issues 34]
  • Changed: Add attached functions to hook shortcode [github bobbingwide oik-bwtrace issues 35]
  • Changed: Trace real memory usage [github bobbingwide oik-bwtrace issue 40]
  • Changed: Sync shared libraries with oik and oik-libs
  • Fixed: Don’t call undefined c() function from bw_trace_c3() [github bobbingwide oik-bwtrace issues 37]
  • Fixed: bw_trace_c3() should not produce comments after “load-async-upload.php” action [github bobbingwide oik-bwtrace issues 38]
  • Fixed: Avoid Notice when $GLOBALS[‘id’] is not just a post ID [github bobbingwide oik-bwtrace issues 39]
  • Tested: With WordPress 4.5.2 and WordPress MultiSite


  • Added: github issue 21 – Show intentions to work on issue – though not yet implemented
  • Fixed: github issue 19 – don’t use timer_stop()
  • Fixed: github issue 20 – don’t write trace summary output to robots.txt
  • Fixed: github issue 22 – Record additional information in the daily trace summary report
  • Fixed: github issue 23 – Support tracing of Closures and protected fields in bw_trace_obsafe_print_r()
  • Fixed: github issue 24 – Update bw_trace_inspect_current() with better solution
  • Fixed: github issue 25 – Uncaught Error: Call to undefined function bw_invoke_shortcode()
  • Tested: up to WordPress 4.4.2 and WordPress MultiSite


  • Fixed: Tracing being performed when the specific IP does not match. github issues 17


  • Fixed: Issue github issue 15 – Handle WP_Error from oik_require_lib() in bw_trace_query_plugins
  • Tested: Tested with WordPress 4.4 and WordPress MultiSite


  • Added: Ad hoc debug backtracing of selected hooks ( github issue 14 )
  • Changed: No longer calls oik_register_plugin_server() ( github issue 13 )
  • Changed: Updated readme to better reflect ad hoc tracing


  • Added: Trace AJAX transactions to a separate file, if defined
  • Added: Control tracing of AJAX transactions
  • Changed: Improve setting of ABSPATH for Windows
  • Changed: Removed unused constants
  • Changed: Support trace level parameter on bw_trace()
  • Changed: Improve output from bw_trace_included_files()
  • Changed: Cater for failure to fopen() in bw_write() – store results for later
  • Changed: Delete some previously commented out code
  • Changed: bw_trace_the_post() trace level should be ALWAYS
  • Fixed: Issue #10 – Ad hoc tracing should allow selection of the hook priority
  • Fixed: Issue #11 – Re-enable the logic for the Trace enabled checkbox


  • Added: Ad hoc tracing of filter functions for selected hooks ( Issue #3 )
  • Added: Ad hoc tracing of parameters to selected hooks ( Issue #2 )
  • Added: Ad hoc tracing of the global post object on selected hooks ( Issue #2 )
  • Added: Ad hoc tracing of filter results ( Issue #6 )
  • Added: Ad hoc tracing should allow selection of the hook priority ( Issue #10 )
  • Added: BW_TRACE_VERBOSE ( 64 ) level, which is even more detailed than BW_TRACE_DEBUG ( 32 )
  • Changed: Enhanced output from Count action hooks and filters ( Issue #7 )
  • Changed: Functions traced should allow OO methods invoking trace ( Issue #8 )
  • Fixed: Ensure BW_TRACE_level constants are defined ( Issue #4 )
  • Fixed: Fix for problem with symlinked file’s drive letters ( similar to TRAC #33265 )
  • Fixed: Only trace $errcontext when tracing with BW_TRACE_VERBOSE ( Issue #5 )
  • Fixed: Strings containing commas in the trace summary file should be wrapped in quotes ( Issue #9 )


  • Added: $level parameter (default BW_TRACE_ALWAYS) to the bw_trace2() and bw_backtrace() APIs
  • Added: Select box to choose the level of tracing
  • Changed: Some bw_trace2() and bw_backtrace() calls to make use of the level capability
  • Fixed: Problem when BW_COUNT_ON defined in wp-config.php


  • Changed: Now detects when output buffering is in place and uses an alternative function to print_r()


  • Added: bw_trace_error_handler() logic for Error, Warning and Notice type messages
  • Added: Add logic for each deprecated action or filter
  • Changed: Anonymize path in output from bw_trace_included_files()
  • Changed: Updated bw_trace_count_report()


  • Changed: Now supports deprecated filters and actions
  • Changed: Enabled using “Trace deprecated messages” checkbox


  • Changed: libs/bwtrace.php now at 2.0.1
  • Changed: libs/oik-lib.php now at 0.0.2
  • Changed: libs/oik_boot.php now at 3.0.0
  • Changed: libs/bobbfunc.php now at 3.0.0
  • Changed: libs/oik-admin.php now at 3.0.0 and uses _bw_c() instead of c()
  • Changed: Uses “wp_loaded” to test for shared libraries for admin logic
  • Changed: Implements “oik_query_libs” with priority 12, was 10


  • Changed: Summary trace record doesn’t show trace file name if 0 trace records produced
  • Changed: Merged shared libraries with oik-libs v0.0.1
  • Changed: Reversioned using semantic versioning, to reflect incompatibility with oik v2.5
  • Changed: Must Use plugin also version 2.0.0
  • Changed: Some docblock comment updates
  • Deleted: Some commented out code removed


  • Added: Shared library files in /libs folder to enable standalone operation
  • Added: includes/bwtrace_actions.php to register trace action processing
  • Added: option to control inclusion of the current filter ( cf=aaa ) in trace records
  • Added: option to control the files loaded count ( F=nnn ) in trace records
  • Changed: Admin pages no longer display “oik documentation” or “support oik” boxes
  • Changed: Sequence of input fields in the oik trace options page
  • Changed: Some functions deleted from libs/bobbfunc.php
  • Changed: Some functions renamed in libs/bobbfunc.php
  • Changed: Trace options and action options admin pages are only available when “oik-admin” library is available
  • Changed: Uses bw_trace_anonymize_symlinked_file() to cater for symlinked files
  • Changed: admin/oik-bwaction.inc is now redundant; but not yet deleted.
  • Changed: oik_trace_reset_notes() checks for “oik-sc-help” library.
  • Deleted: oik_action_summary()
  • Fixed: br() does not attempt to translate null text
  • Tested: With WordPress and WPMS 4.2 and above.
  • Tested: With and without: oik-lib v0.1 and oik v2.6


  • Changed: current filter now shows the full tree. No longer necessary to trace the array separately
  • Fixed: Trace function count no longer doubly incremented.
  • Added: Option to report the $bw_trace_functions array at shutdown. bw_trace_functions_traced()
  • Changed: Sequence of action hooks invoked for ‘shutdown’: included files, saved queries, output buffer, functions traced, status report
  • Changed: Improved more docblock comments and some programming style


  • Changed: Improved activating/de-activating of the oik-bwtrace MU plugin when BW_COUNT_ON is not defined true
  • Deprecated: Moved more deprecated functions and logic related to the original action tracing and logging to includes/deprecated.php
  • Changed: bw_lazy_trace_config_startup() no longer references BW_ACTIONS_ON nor BW_ACTIONS_RESET; deprecated constants
  • Changed: bw_trace_plugin_startup() loads global $bw_action_options regardless of the $bw_trace_options settings.
  • Changed: bw_trace_count_plugins_loaded() now uses global $bw_action_options
  • Changed: bw_trace_output_buffer() checks the output buffer status


  • Added: includes/deprecated.php for deprecated functions, excluding original immediate action tracing
  • Changed: Dependent upon oik v2.6-alpha.0525 for .php versions of include files
  • Changed: Deprecated some .inc files in favour of .php files.
  • Changed: Moved bw_this_plugin_first() to admin/oik-bwtrace.inc
  • Changed: Relabelled ‘Count immediate actions’ to ‘Count action hooks and filters’
  • Changed: Added options for specific action tracing functionality that was previously hardcoded
  • Changed: bw_summarise_actions() – deprecated; no longer called by bw_action_summary()
  • Changed: oik action options page rewrite;
  • Changed: removed the slow action trace logic.
  • Disabled: Disabled immediate action tracing… the last WordPress version for which this logic was supported was 3.6
  • Changed: Improved some docblock comments
  • Added: includes/_oik-bwtrace-mu.php – implements the MU version of the plugin
  • Changed: Moved bw_lazy_trace_config_startup() to includes/bwtrace-config.php
  • Changed: bw_lazy_trace_config_startup() now supports BW_COUNT_ON constant. When true it loads the action hook and filter counting logic and ‘activates’ the MU version of the plugin
  • Changed: oik-bwtrace.php now uses oik_bwtrace_loaded() to perform startup processing


  • Added: records the trace file name in the summary log file
  • Added: remote IP address included in the summary log file
  • Fixed: Doesn’t write HTML comments for JSON or XMLRPC requests
  • Fixed: Doesn’t write HTML comments for SiteGround cache check: sgCacheCheck
  • Changed: Commented out tracing of global wp_rewrite


  • Fixed: Warning $wpdb->elapsed_query_time property missing
  • Changed: Documented the fields in the bwtrace.vt.mmdd log file; where vt is simply an abbreviation of value and text


  • Added: Automatically sets SAVEQUERIES if recording the total number of queries performed
  • Changed: bw_trace_saved_queries() formats the output in the trace log
  • Changed: bw_trace_included_files() formats the output in the trace log
  • Fixed: bw_trace_c3() now detects “short” parameter – set for async-upload of a new file
  • Added: bwtrace.vt file stores summary of all activity
  • Added: trace action counting – with “Count immediate actions” checkbox
  • Added: Responds to “plugins_loaded” to start trace count logic
  • Added: bw_trace_wp()
  • Added: bw_trace_add_shutdown_actions() to defer adding actions responding to “shutdown”


  • Added: Logic originally developed for oik-shortcodes to display summary information at shutdown
  • Added: Logic to trace included files: at startup and shutdown
  • Added: Logic to trace saved queries: at startup and shutdown
  • Added: Trace elapsed time – displayed after current timestamp
  • Added: Trace number of included files as F=nnnn
  • Changed: bw_lazy_backtrace() handles args which are arrays


  • Fixed: oik action tracing is not invoked if oik action settings have not been defined
  • Added: Lists loaded files during shutdown processing
  • Changed: trace IP is trimmed on input validation
  • Added: Support for action trace output to be written in CSV format
  • Added: bw_trace_bwechos()
  • Added: tracing will attempt to use obsafe_print_r() instead of print_r()
  • Changed: Minor improvement in determining the calling function
  • Added: bw_trace_hook_all() for performing immediate action tracing. Makes original solution partially redundant.
  • Changed: bw_action_file() – minor performance improvements
  • Changed: bw_lazy_trace_action_immediate() also logs $arg3

= 1.19.0307
* Added official support for WordPress 3.5.1
* Added support for WordPress 3.6-alpha-23627 – there have been some minor comment changes in plugin.php


  • Added support for WordPress 3.5.1-alpha (as of 2012/12/19)

= 1.18.1218.2100
* Fixed: New optional values no longer included in the action log


  • Added: Immediate action tracing helps you discover ALL the actions and filters
  • Added: Immediate action tracing automatically replaces wp-includes/plugin.php
  • Added: Trace record may includes current and peak memory usage (in bytes)
  • Added: Inclusion of post ID and number of queries now optional


  • Added: Code to relocate from part of oik to a separate plugin
  • Added: Updates are provided from oik-plugins

up to 1.16

  • Please see the change log in oik for versions prior to 1.17