Primeiros Passos com Xdebug
Este guia mostra como habilitar o Xdebug no WordPress Playground e começar a depurar seu código.
PHP WASM CLI vs Playground CLI
Primeiramente, o Xdebug está presente em dois CLI diferentes:
@php-wasm/cli: Execute scripts PHP independentes. Use isso quando estiver depurando código PHP, sem precisar de um ambiente WordPress.@wp-playground/cli: Execute uma instalação completa do WordPress. Útil para depurar plugins WordPress, temas ou funcionalidades do núcleo.
Para este guia, vamos utilizar o @wp-playground/cli. Se você não estiver familiarizado com a ferramenta, recomendamos ler o guia do @wp-playground/cli, mas o mesmo processo também pode ser aplicado à depuração de aplicações PHP com o @php-wasm/cli.
Início rápido com npx
A forma mais rápida de começar é usando npx, que não requer instalação:
npx @wp-playground/cli@latest server --xdebug
Isso inicia o WordPress em http://127.0.0.1:9400 com Xdebug habilitado. Agora você conecta um depurador.
Iniciando com DevTools
Para depurar com Chrome DevTools, adicione a flag --experimental-devtools:
npx @wp-playground/cli@latest server --xdebug --experimental-devtools
O terminal exibirá uma URL para conectar o Chrome DevTools:
Starting a PHP server...
Setting up WordPress latest
Resolved WordPress release URL: https://downloads.w.org/release/wordpress-6.8.3.zip
Fetching SQLite integration plugin...
Booting WordPress...
WordPress is running on http://127.0.0.1:9400 with 1 worker(s)
Starting XDebug Bridge...
Connect Chrome DevTools to CDP at:
devtools://devtools/bundled/inspector.html?ws=localhost:9229
Chrome connected! Initializing Xdebug receiver...
XDebug receiver running on port 9003
Running a PHP script with Xdebug enabled...
Clicando na URL fornecida, por exemplo, devtools://devtools/bundled/inspector.html?ws=localhost:9229, você pode acessar o DevTools conectado à sua aplicação, com a possibilidade de inspecionar todos os arquivos de uma instância WordPress.

Para um exemplo mais prático, vamos debugar um plugin que possui o seguinte código:
<?php
/**
* Plugin Name: Simple Admin Message
* Description: Displays a simple message in the WordPress admin
* Version: 1.0
* Author: Playground Team
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Display admin notice
function sam_display_admin_message() {
$message = 'Hello! This is a simple admin message.';
?>
<div class="notice notice-info is-dismissible">
<p><?php _e($message, 'simple-admin-message'); ?></p>
</div>
<?php
}
add_action('admin_notices', 'sam_display_admin_message');
Na pasta onde o plugin está localizado, vamos executar o comando em nosso terminal:
npx @wp-playground/cli@latest server --xdebug --experimental-devtools --auto-mount
O Playground CLI (@wp-playground/cli) detectará automaticamente a pasta do plugin e a montará. Abrindo o projeto em seu navegador e DevTools, você poderá adicionar breakpoints no código do seu plugin e testá-lo linha por linha.

Iniciando com integração IDE
Similar ao processo com DevTools, vamos utilizar o mesmo código do plugin anterior para depurar com VSCode, adicione a flag --experimental-unsafe-ide-integration=vscode. Esta flag otimizará o processo de configuração para VSCode. Se você trabalha com PhpStorm, apenas adicione a flag --experimental-unsafe-ide-integration=phpstorm.
Para depurar no VSCode você precisará dos seguintes pré-requisitos:
- Uma extensão para adicionar suporte a PHP profiling, por exemplo, PHP Profiler
- Uma pasta
.vscode/. Se o arquivolaunch.jsonnão existir, não se preocupe, o@wp-playground/clio criará. - Habilite os pontos de interrupção (breakpoints) em seu IDE. Alguns IDEs vêm com este recurso desativado, então preste atenção a este detalhe.
Se tudo estiver pronto, execute o comando:
npx @wp-playground/cli@latest server --xdebug --experimental-unsafe-ide-integration=vscode --auto-mount
Agora, vá para o seu código, adicione os breakpoints e bons testes.

Esta funcionalidade está em modo experimental. Até que seja concluída, precisaremos do seu feedback. Por favor, conecte-se conosco no canal Slack #playground e compartilhe seus pensamentos.