Skip to main content

Debugging

Sloth integrates PHP DebugBar for local development. It is only active when the package is installed and WP_ENV is local.

Installation

DebugBar is a dev dependency — install it via Composer:

composer require php-debugbar/php-debugbar --dev

Sloth detects the package automatically. No further configuration needed.

The toolbar

In local environments, the DebugBar toolbar is injected at the bottom of every HTML page. It includes:

CollectorWhat it shows
Messagesdebug() calls and dumps
SlothLoaded models, modules, providers
ACFACF field resolution
WordPressWordPress hooks timeline
QueriesDatabase queries with timing
PHP InfoPHP version, memory limit
MemoryPeak memory usage

Dumping values

Use the global debug() helper to dump values into the DebugBar:

debug($post);
debug($projects->toArray());
debug('checkpoint reached');

In Twig:

{{ post | debug }}
{{ debug(projects) }}

In local environments debug() sends to the DebugBar Messages collector. In production it falls back to var_dump().

JSON responses

When a route returns a JSON response, DebugBar injects a __debug key into the response body:

{
"__debug": [
{ "file": "app/Model/Project.php:42", "message": "..." }
],
"data": [...]
}

Configuration

Publish the config file to customize the DebugBar:

wp sloth vendor:publish --provider="Sloth\Debug\DebugServiceProvider" --tag=config
// app/config/debugger.php
return [
'editor' => 'phpstorm', // or 'vscode', 'sublime', etc.
'bar' => [
'display' => true, // show the toolbar
'dump_all' => true, // dump all debug() calls
'collector_providers' => [
// Add or remove collectors
],
],
'json' => [
'prepend' => true, // inject __debug into JSON responses
'key' => '__debug', // the key name
],
];

Custom collectors

Add your own DebugBar collector via the collector_providers config key. A collector provider is a class that implements CollectorProviderInterface:

use Sloth\Debug\CollectorProviders\CollectorProviderInterface;
use DebugBar\DebugBar;

class MyCollectorProvider implements CollectorProviderInterface
{
public function register(DebugBar $debugBar): void
{
$debugBar->addCollector(new MyCollector());
}
}

Then add it to the config:

'collector_providers' => [
// framework collectors...
MyCollectorProvider::class,
],