Many panels in Query Monitor display function names or stack traces. Wouldn’t it be great if you could click the function name and the file opens up in your text editor or IDE at the correct position? With the clickable file links feature you can, and you’ll wonder how you lived without it:

There are two steps to enabling this in Query Monitor.
1. Configure Your Editor’s URL Handler
In order for a link on a web page to be able to open your editor, you need to configure your editor so it opens when a certain URL scheme is encountered. Here are the instructions for some common editors:
PhpStorm
You don’t need to do anything. PhpStorm natively supports phpstorm://
URLs.
VS Code
You don’t need to do anything. VS Code natively supports code://
URLs.
Atom
Install the Atom Open package to add support for atom://
URLs.
Sublime Text
Install the subl-handler package to add support for subl://
URLs.
Netbeans
Follow these instructions by Simon Wheatley to add support for nbopen://
URLs.
2. Enable Clickable File Links in Query Monitor
Clickable file links can be configured directly in Query Monitor since version 3.5. Open up the Settings panel (click the cog next to the Close icon) to choose your editor, then you’re good to go!
Xdebug Setting
Pro tip: Query Monitor respects Xdebug’s xdebug.file_link_format
directive in your php.ini
file, so you can skip the need to select your editor if you set this directive to the correct format. Xdebug doesn’t even need to be enabled for this to work. More info here.
I use VS Code, so the directive looks like this:
xdebug.file_link_format = "vscode://file/%f:%l"
Remote File Path Mapping
If you’re debugging a remote site, or using Docker or a virtual machine, you’ll need to map the path on the server to its path on your local machine so your editor doesn’t try to load a non-existent file. You can do this using a filter on the qm/output/file_path_map
hook which accepts an array of remote paths and the local path they map to.
For example, if you use Chassis or another Vagrant-based VM, your path mapping needs to look like this:
add_filter( 'qm/output/file_path_map', function( $map ) {
$map['/vagrant/'] = '/path/to/local/project/';
return $map;
} );
If you’ve changed the paths
configuration in Chassis, you may need to map the /chassis
directory instead:
add_filter( 'qm/output/file_path_map', function( $map ) {
$map['/chassis/'] = '/path/to/local/project/';
return $map;
} );
If you use the Docker-based development environment that’s built in to WordPress core, your path mapping needs to look like this:
add_filter( 'qm/output/file_path_map', function( $map ) {
$map['/var/www/'] = '/path/to/wordpress/';
return $map;
} );
If you use VVV your path mapping needs to look like this:
add_filter( 'qm/output/file_path_map', function( $map ) {
$map['/srv/'] = '/path/to/v/';vv
return $map;
} );
That’s It!
I hope you enjoy clicking on your newly-clickable file links.
My links are showing as “vscode://file//home/cpanel_user/public_html/development/wp-content/themes/salient/nectar/helpers/woocommerce.php:359”
How do I change that to work with “C:\Repos\project_dir”?
You can do this by using the filter mentioned in the “Remote File Path Mapping” section to replace the remote path with your remote one.
Hi, I’m using Lando on Linux and my local web folder is called ‘wordpress’.
The filter that I use does not seem to work:
add_filter( ‘qm/output/file_path_map’, function( $map ) {
$map[‘/app/wordpress/’] = ‘/app/wordpress/’;
return $map;
} );
The link I’m getting now eg is vscode://file/%2Fwordpress%2Fwp-includes%2Fformatting.php:934 but that one fails.
Any tips on how I can fix this?
Mapping `/app/wordpress` to `/app/wordpress` isn’t going to achieve anything. You need to map the the remote path to your local one, eg. `/app/wordpress` to `/my/documents/wordpress`.