Most WordPress debugging guides focus on Query Monitor’s database query features. The hooks panel is equally useful for a different class of problems: understanding why WordPress is behaving in an unexpected way, finding which plugin owns a specific behaviour, and diagnosing filter conflicts where two plugins modify the same data.
Finding Which Plugin Does Something
You notice your post titles are being modified – they have something prepended or appended. You do not know which plugin is doing it. Open Query Monitor, go to the Hooks panel, and filter for “the_title”. You will see every function hooked to that filter, with the file path of each. The culprit is in that list.
The same approach works for any unexpected behaviour: find the relevant WordPress hook, look at what is hooked to it. Common hooks to check:
the_content– anything modifying post content outputwp_head– scripts and styles added to the page headtemplate_redirect– unexpected redirectsposts_where– unexpected query modificationswoocommerce_checkout_fields– checkout field changes
Hook Priority Conflicts
Two plugins – for example ACF and a field mapper – both hook into save_post and the one that runs second overwrites data the first one saved. Query Monitor shows hook priorities in the Hooks panel – you can see that Plugin A hooks at priority 10 and Plugin B also hooks at priority 10, meaning execution order is undefined.
Fix: change your own hook priority to run after the conflicting plugin. If the conflict is between two third-party plugins, hook at a high priority (99 or later) to run after both:
// Run after both plugins have done their save_post processing
add_action('save_post', 'my_post_save_handler', 99, 2);
Need this built properly? Describe the project and get a free estimate.
Tracing Unexpected Output
Something is printing HTML on your page that should not be there – an extra div, an unwanted script tag, or invisible whitespace breaking your layout. Query Monitor helps trace it:
- View page source and find the unexpected output
- In Query Monitor’s Output panel (if present) or by adding temporary debugging, trace which hook generated it
- Add a temporary filter early in your theme to trace which hook generates the output
- Or use Query Monitor’s request panel to see all hooked callbacks for footer hooks
Debugging Cron Jobs With Query Monitor
Query Monitor’s request panel shows the current page context. For WP-Cron debugging, you can temporarily add Query Monitor output to cron requests by adding your user ID to the query_monitor_authentication filter:
add_filter('query_monitor_authentication', function($auth) {{
// Temporarily show QM data on cron requests for debugging
if (defined('DOING_CRON') && DOING_CRON) {{
return true;
}}
return $auth;
}});
Using the Request Panel for Conditional Loading
Query Monitor’s Request panel shows the current template file, template hierarchy tried, matched rewrite rules, and query variables. This is invaluable for debugging template loading problems: why is the wrong template loading? The panel shows you which template files WordPress looked for (in order) and which one it used.
Combined with the conditional tags shown (is_single, is_archive, is_tax, etc.), you can immediately see why conditional logic in your theme or plugin is not behaving as expected.