PHPStan + WordPress: статический анализ кода плагинов и тем (2026)
Почему PHPStan – must‑have для разработчиков WordPress
WordPress‑плагины и темы часто пишутся без строгой типизации, из‑за чего в продакшене появляются скрытые баги, уязвимости и снижение производительности. PHPStan – статический анализатор, который проверяет ваш код без выполнения, находя потенциальные ошибки до их появления в продакшене.
Сочетание PHPStan и WordPress позволяет:
- Сократить количество
undefined variableиcall to undefined method; - Обнаружить несовместимости с последними версиями PHP;
- Улучшить читаемость и поддерживаемость кода за счёт строгих типовых аннотаций.
Шаг 1. Установка PHPStan в проект WordPress
Самый простой способ – добавить PHPStan через Composer. Если ваш плагин или тема уже используют composer.json, выполните:
composer require --dev phpstan/phpstan:^1.10 Для чистого проекта без Composer можно создать composer.json вручную:
{
"require-dev": {
"phpstan/phpstan": "^1.10"
}
} После этого запустите composer install. Теперь в корне проекта появится файл vendor/bin/phpstan – ваш основной исполнитель.
Шаг 2. Базовая конфигурация PHPStan для WordPress
Создайте файл phpstan.neon в корне темы/плагина. Минимальная конфигурация выглядит так:
parameters:
level: max
paths:
- src
autoload_files:
- %rootDir%/../vendor/autoload.php
bootstrapFiles:
- wp-load.php
ignoreErrors:
- '#Call to undefined method .*#'
Обратите внимание на два важных параметра:
bootstrapFiles– подключаетwp-load.php, чтобы PHPStan «знал» функции WordPress;ignoreErrors– позволяет временно подавлять известные «ложные» предупреждения.
Если ваш код лежит в директории src, укажите её в paths. Для тем, где файлы находятся в корне, замените путь на ./.
Шаг 3. Выбор уровня анализа
PHPStan поддерживает уровни от 0 до 8 (и max). Чем выше уровень – тем строгие проверки. Рекомендуем начинать с уровня 3, чтобы не «переполнять» выводом, а затем постепенно повышать:
- Запустите анализ:
vendor/bin/phpstan analyse– получите базовый набор ошибок. - Увеличьте уровень до 5, исправьте найденные проблемы.
- Перейдите к
max(уровень 8). На этом этапе ваш код будет соответствовать лучшим практикам PHP.
Пример команды с указанием уровня:
vendor/bin/phpstan analyse -l 5 Шаг 4. Интеграция PHPStan в CI/CD
Автоматический запуск анализа при каждом пуше позволяет поддерживать качество кода. Ниже пример конфигурации для GitHub Actions:
name: PHPStan CI
on: [push, pull_request]
jobs:
phpstan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mbstring, intl
tools: composer
- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-suggest
- name: Run PHPStan
run: vendor/bin/phpstan analyse -l max
Если ваш проект использует GitLab CI, замените actions/checkout на gitlab/checkout и аналогично настройте шаги.
Не забудьте добавить автоматический бэкап перед запуском CI, чтобы в случае падения сборки вы могли восстановить рабочую ветку.
Шаг 5. Исправление типовых ошибок PHPStan в WordPress‑коде
Самые частые предупреждения и способы их устранения:
- Undefined variable – объявите переменную с типом в докблоке:
/** @var WP_Post $post */ global $post; - Call to undefined method – проверьте, что нужный класс подключён, либо добавьте
@methodв PHPDoc. - Argument type mismatch – используйте строгую типизацию функций:
function my_plugin_render(string $template, array $data = []): string { // ... } - Return type should be compatible – добавьте
: voidили: WP_Error|WP_Postв сигнатуру.
Для ускорения разработки включите Lazy Loading плагинов – это уменьшит количество файлов, которые нужно анализировать в каждом билде.
Шаг 6. Полезные плагины и расширения PHPStan для WordPress
Существует несколько готовых наборов правил, которые учитывают особенности WordPress API:
phpstan/wordpress– набор правил, покрывающих функции, хуки и глобальные переменные.phpstan/extension-installer– упрощает подключение сторонних расширений.- Для тем, использующих Gutenberg, полезно добавить
phpstan/phpstan-phpunitи проверять блоки через Gutenberg reusable blocks.
Установить расширения можно командой:
composer require --dev phpstan/wordpress phpstan/extension-installer После установки обновите phpstan.neon:
includes:
- vendor/phpstan/wordpress/extension.neon Шаг 7. Мониторинг и отчёты
Для удобного просмотра результатов можно генерировать HTML‑отчёт:
vendor/bin/phpstan analyse -l max --error-format=table > phpstan-report.txt
vendor/bin/phpstan analyse -l max --error-format=checkstyle > phpstan-report.xml XML‑отчёт удобно интегрировать в CI‑системы, а текстовый – в Slack‑уведомления.
Не забывайте периодически проверять мобильную версию вашего сайта: исправления, найденные PHPStan, могут влиять на клиентские скрипты и их совместимость с мобильными браузерами.
Заключение
Внедрение PHPStan в процесс разработки WordPress‑плагинов и тем – это инвестиция в надёжность, безопасность и масштабируемость проекта. Следуя 7‑шаговому плану, вы получите автоматизированный контроль качества кода, сократите количество багов в продакшене и сможете быстро реагировать на новые требования PHP.
Начните с установки, поднимите уровень анализа постепенно и интегрируйте проверку в CI/CD – и ваш код будет соответствовать современным стандартам разработки.
❓ Часто задаваемые вопросы
Как заставить PHPStan распознавать функции WordPress, если они не находятся в автолоадере?
Укажите путь к wp-load.php в параметре bootstrapFiles вашего phpstan.neon. Это загрузит все глобальные функции и константы WordPress перед анализом.
Можно ли использовать PHPStan с темами, где нет composer.json?
Да. Создайте минимальный composer.json только с dev‑зависимостями PHPStan, выполните composer install и добавьте путь к теме в параметр paths конфигурации.
Почему PHPStan иногда ругается на вызов хука do_action(‘init’)?
Это происходит из‑за отсутствия типовой информации о параметрах хука. Добавьте PHPDoc‑аннотации в функцию‑обработчик или используйте расширение phpstan/wordpress, которое учитывает хуки.
Как интегрировать результаты PHPStan в Slack?
Сгенерируйте текстовый отчёт командой phpstan analyse --error-format=table > report.txt, а затем в CI‑скрипте отправьте содержимое файла в Slack через webhook.