{"id":272773,"date":"2026-01-08T18:07:00","date_gmt":"2026-01-08T18:07:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hooktrace\/"},"modified":"2026-01-14T15:44:03","modified_gmt":"2026-01-14T15:44:03","slug":"hooktrace","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/hooktrace\/","author":23223521,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.1.0","stable_tag":"1.1.0","tested":"6.9.4","requires":"5.0","requires_php":"8.0","requires_plugins":null,"header_name":"HookTrace - Trace Hooks with Precision","header_author":"smilingsyntax","header_description":"Cross-Plugin Debug & Trace Recorder - Records and visualizes hook execution order for WordPress developers.","assets_banners_color":"acc5c8","last_updated":"2026-01-14 15:44:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/smilingsyntax.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":197,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"smilingsyntax","date":"2026-01-08 18:06:41"},"1.1.0":{"tag":"1.1.0","author":"smilingsyntax","date":"2026-01-14 15:44:03"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3435404,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3435404,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3439673,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3435404,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3435404,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3435404,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3435404,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3435404,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3435404,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Hook list view showing all hooks that fired, with search and filter options","2":"Selected hook detail view showing all callbacks with priority, execution order, duration, and file paths","3":"Color-coded badges indicating source (core\/theme\/plugin) and type (action\/filter)"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2679,253606,4073,23044,18991],"plugin_category":[59],"plugin_contributors":[164903,238007],"plugin_business_model":[],"class_list":["post-272773","plugin","type-plugin","status-publish","hentry","plugin_tags-debugging","plugin_tags-hook-trace","plugin_tags-hooks","plugin_tags-profiling","plugin_tags-trace","plugin_category-utilities-and-tools","plugin_contributors-codemadan","plugin_contributors-smilingsyntax","plugin_committers-codemadan","plugin_committers-smilingsyntax","plugin_support_reps-codemadan"],"banners":{"banner":"https:\/\/ps.w.org\/hooktrace\/assets\/banner-772x250.png?rev=3439673","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/hooktrace\/assets\/icon-128x128.png?rev=3435404","icon_2x":"https:\/\/ps.w.org\/hooktrace\/assets\/icon-256x256.png?rev=3435404","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hooktrace\/assets\/screenshot-1.png?rev=3435404","caption":"Hook list view showing all hooks that fired, with search and filter options"},{"src":"https:\/\/ps.w.org\/hooktrace\/assets\/screenshot-2.png?rev=3435404","caption":"Selected hook detail view showing all callbacks with priority, execution order, duration, and file paths"},{"src":"https:\/\/ps.w.org\/hooktrace\/assets\/screenshot-3.png?rev=3435404","caption":"Color-coded badges indicating source (core\/theme\/plugin) and type (action\/filter)"},{"src":"https:\/\/ps.w.org\/hooktrace\/assets\/screenshot-4.png?rev=3435404","caption":""},{"src":"https:\/\/ps.w.org\/hooktrace\/assets\/screenshot-5.png?rev=3435404","caption":""},{"src":"https:\/\/ps.w.org\/hooktrace\/assets\/screenshot-6.png?rev=3435404","caption":""}],"raw_content":"<!--section=description-->\n<p>HookTrace is a developer observability tool that records and visualizes the runtime execution order of WordPress hooks, filters, and plugin initialization for a single page request.<\/p>\n\n<p><strong>For Developers Only<\/strong><\/p>\n\n<p>This plugin is designed exclusively for development and staging environments. It helps developers understand:<\/p>\n\n<ul>\n<li>Which hooks fired, in what order<\/li>\n<li>Which callbacks executed on each hook<\/li>\n<li>Callback priority and execution time<\/li>\n<li>Source plugin, theme, or core location<\/li>\n<li>Exact file and line number<\/li>\n<li>Plugin and theme load timeline<\/li>\n<\/ul>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Hook List Tracking<\/strong> - Records all hooks that fire during a page request with type and source information<\/li>\n<li><strong>Detailed Callback Inspection<\/strong> - When a hook is selected, displays comprehensive callback information including priority, execution order, duration, file path, and source<\/li>\n<li><strong>Modern Modal UI<\/strong> - Beautiful, searchable interface with filtering capabilities<\/li>\n<li><strong>Zero Performance Impact<\/strong> - In-memory storage only, no database writes<\/li>\n<li><strong>Early Boot Support<\/strong> - MU-plugin bootstrap captures hooks from the very beginning<\/li>\n<\/ul>\n\n<p><strong>Requirements:<\/strong><\/p>\n\n<ul>\n<li><code>WP_DEBUG<\/code> must be set to <code>true<\/code> in <code>wp-config.php<\/code><\/li>\n<li>User must have <code>manage_options<\/code> capability (administrator)<\/li>\n<li>PHP 8.0 or higher<\/li>\n<\/ul>\n\n<p><strong>Safety Features:<\/strong><\/p>\n\n<ul>\n<li>Automatically disables when <code>WP_DEBUG<\/code> is false<\/li>\n<li>Never runs for non-admin users<\/li>\n<li>Never modifies WordPress behavior<\/li>\n<li>Observational only - no code execution changes<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>hooktrace<\/code> folder to <code>\/wp-content\/plugins\/<\/code> directory<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Ensure <code>WP_DEBUG<\/code> is set to <code>true<\/code> in your <code>wp-config.php<\/code> file<\/li>\n<li>(Optional) For early hook capture, copy <code>hooktrace-bootstrap.php<\/code> from the plugin directory to <code>\/wp-content\/mu-plugins\/<\/code><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20this%20plugin%20work%20in%20production%3F'><h3>Does this plugin work in production?<\/h3><\/dt>\n<dd><p>No. This plugin is designed exclusively for development and staging environments. It requires <code>WP_DEBUG<\/code> to be enabled and will automatically disable itself if <code>WP_DEBUG<\/code> is false.<\/p><\/dd>\n<dt id='will%20this%20slow%20down%20my%20site%3F'><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>The plugin is designed with minimal overhead (5-10ms average). However, it should only be used in development\/staging environments where performance is not critical.<\/p><\/dd>\n<dt id='do%20i%20need%20to%20install%20the%20mu-plugin%20bootstrap%3F'><h3>Do I need to install the MU-plugin bootstrap?<\/h3><\/dt>\n<dd><p>The MU-plugin bootstrap is optional but recommended. It allows the plugin to capture hooks from the very beginning of WordPress initialization, including must-use plugins and early core hooks.<\/p><\/dd>\n<dt id='can%20i%20use%20this%20to%20debug%20plugin%20conflicts%3F'><h3>Can I use this to debug plugin conflicts?<\/h3><\/dt>\n<dd><p>Yes! The timeline view shows which hooks fire and which plugins are registering callbacks, making it easier to identify conflicts and execution order issues.<\/p><\/dd>\n<dt id='does%20this%20modify%20wordpress%20behavior%3F'><h3>Does this modify WordPress behavior?<\/h3><\/dt>\n<dd><p>No. This plugin is purely observational. It never modifies hook execution, suppresses errors, or changes WordPress behavior in any way.<\/p><\/dd>\n<dt id='what%20data%20is%20stored%3F'><h3>What data is stored?<\/h3><\/dt>\n<dd><p>No data is stored. All trace information is kept in memory for the current request only and is discarded after the page loads.<\/p><\/dd>\n<dt id='how%20do%20i%20inspect%20a%20specific%20hook%3F'><h3>How do I inspect a specific hook?<\/h3><\/dt>\n<dd><p>Click on any hook in the list to see detailed information about all callbacks registered for that hook, including priority, execution order, duration, and source file location.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added local editor integration - Open files directly in your favorite IDE (VS Code, PhpStorm, Sublime Text, Atom, Cursor, Antigravity, or custom protocol)<\/li>\n<li>Added settings page (Tools \u2192 HookTrace) for configuring local editor and path mapping<\/li>\n<li>Added function filter for single hook tracing - Filter callbacks by function name<\/li>\n<li>Added execution statistics - Display min, max, avg, and total execution time for filtered functions<\/li>\n<li>Improved callback execution tracking - Each callback execution is now tracked separately with accurate timing<\/li>\n<li>Enhanced UI\/UX - Single scroll area, sticky filter and stats, more compact callback items<\/li>\n<li>Improved labels - Full descriptive words instead of abbreviations (Priority, Execution Order, etc.)<\/li>\n<li>Added translation support - All strings are now translatable with POT file included<\/li>\n<li>Added dual editor links - Display both local editor and WordPress editor links when available<\/li>\n<li>Improved modal positioning - Aligned to top to prevent flickering with dynamic content<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Hook list tracking (all hooks that fire)<\/li>\n<li>Detailed callback inspection for selected hooks<\/li>\n<li>Modern modal UI with search and filtering<\/li>\n<li>Admin bar integration<\/li>\n<li>MU-plugin bootstrap support<\/li>\n<li>Color-coded badges for source and type identification<\/li>\n<li>Responsive design with smooth animations<\/li>\n<\/ul>","raw_excerpt":"Cross-Plugin Debug &amp; Trace Recorder - Records and visualizes hook execution order for WordPress developers.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/272773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=272773"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/smilingsyntax"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=272773"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=272773"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=272773"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=272773"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=272773"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=272773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}