wp-phpstan
wordpress/agent-skills
Configure and fix PHPStan static analysis in WordPress projects with proper typing and baseline management.
What is wp-phpstan?
PHPStan static analysis skill for WordPress codebases (plugins, themes, sites). Use it to set up phpstan.neon configuration, generate and manage baselines, apply WordPress-specific type annotations, and safely handle third-party plugin classes.
- Inspect and discover PHPStan configuration and baseline files in WordPress projects
- Set up or update phpstan.neon with WordPress-appropriate paths and exclusions
- Generate and maintain phpstan-baseline.neon for legacy code migration
- Apply WordPress-specific PHPDoc annotations for hooks, REST endpoints, and database queries
- Handle third-party plugin/theme classes via stubs, autoloading, or targeted ignore patterns
How to install wp-phpstan
npx skills add https://github.com/wordpress/agent-skills --skill wp-phpstan- WordPress 6.9+ (PHP 7.2.24+)
- Composer-based PHPStan installation
- wp-project-triage skill output (recommended)
How to use wp-phpstan
- 1.Run the PHPStan inspection script to discover existing configuration: node skills/wp-phpstan/scripts/phpstan_inspect.mjs
- 2.Confirm WordPress core stubs (szepeviktor/phpstan-wordpress or php-stubs/wordpress-stubs) are installed
- 3.Review and update phpstan.neon to focus paths on first-party code and exclude vendor/node_modules/tests
- 4.Fix errors by adding WordPress-specific PHPDoc annotations (REST requests, hooks, query results) instead of ignoring them
- 5.For third-party classes, add plugin-specific stubs or narrow ignore patterns only when necessary
- 6.Run PHPStan via composer script or vendor/bin/phpstan analyse to verify changes
- 7.Manage baseline file as a migration tool—reduce it over time rather than adding new errors to it
Use cases
- Setting up PHPStan in a new WordPress plugin or theme project
- Fixing PHPStan errors by adding proper type hints to hook callbacks and REST parameters
- Integrating third-party plugin stubs (WooCommerce, ACF Pro) into analysis
- Reducing technical debt by gradually fixing baseline errors over time
- Configuring PHPStan to exclude vendor code and generated files while analyzing first-party code
- WordPress plugin developers
- WordPress theme developers
- WordPress site maintainers
- Teams adopting static analysis in existing WordPress projects
wp-phpstan FAQ
Confirm that WordPress core stubs (szepeviktor/phpstan-wordpress or php-stubs/wordpress-stubs) are installed and referenced in your phpstan.neon config. Without stubs, PHPStan cannot resolve WordPress core functions.
Use baseline only for legacy code as a migration tool. Do not baseline newly introduced errors. Gradually reduce the baseline over time by fixing the underlying type issues.
First confirm the dependency is actually installed. Prefer using existing plugin-specific stubs (e.g., php-stubs/woocommerce-stubs). Only add narrow, documented ignoreErrors patterns if stubs are unavailable.
Add explicit @param PHPDoc annotations to callback functions with accurate types for each argument. This is preferred over runtime type guards or ignoring errors.
Yes, but confirm with the user first before adding new dev dependencies. Common stubs like wordpress-stubs, woocommerce-stubs, and acf-pro-stubs are widely used and safe to add.
Full instructions (SKILL.md)
Source of truth, from wordpress/agent-skills.
name: wp-phpstan description: "Use when configuring, running, or fixing PHPStan static analysis in WordPress projects (plugins/themes/sites): phpstan.neon setup, baselines, WordPress-specific typing, and handling third-party plugin classes." compatibility: "Targets WordPress 6.9+ (PHP 7.2.24+). Requires Composer-based PHPStan."
WP PHPStan
When to use
Use this skill when working on PHPStan in a WordPress codebase, for example:
- setting up or updating
phpstan.neon/phpstan.neon.dist - generating or updating
phpstan-baseline.neon - fixing PHPStan errors via WordPress-friendly PHPDoc (REST requests, hooks, query results)
- handling third-party plugin/theme classes safely (stubs/autoload/targeted ignores)
Inputs required
wp-project-triageoutput (run first if you haven't)- Whether adding/updating Composer dev dependencies is allowed (stubs).
- Whether changing the baseline is allowed for this task.
Procedure
0) Discover PHPStan entrypoints (deterministic)
- Inspect PHPStan setup (config, baseline, scripts):
node skills/wp-phpstan/scripts/phpstan_inspect.mjs
Prefer the repo’s existing composer script (e.g. composer run phpstan) when present.
1) Ensure WordPress core stubs are loaded
szepeviktor/phpstan-wordpress or php-stubs/wordpress-stubs are effectively required for most WordPress plugin/theme repos. Without it, expect a high volume of errors about unknown WordPress core functions.
- Confirm the package is installed (see
composer.dependenciesin the inspect report). - Ensure the PHPStan config references the stubs (see
references/third-party-classes.md).
2) Ensure a sane phpstan.neon for WordPress projects
- Keep
pathsfocused on first-party code (plugin/theme directories). - Exclude generated and vendored code (
vendor/,node_modules/, build artifacts, tests unless explicitly analyzed). - Keep
ignoreErrorsentries narrow and documented.
See:
references/configuration.md
3) Fix errors with WordPress-specific typing (preferred)
Prefer correcting types over ignoring errors. Common WP patterns that need help:
- REST endpoints: type request parameters using
WP_REST_Request<...> - Hook callbacks: add accurate
@paramtypes for callback args - Database results and iterables: use array shapes or object shapes for query results
- Action Scheduler: type
$argsarray shapes for job callbacks
See:
references/wordpress-annotations.md
4) Handle third-party plugin/theme classes (only when needed)
When integrating with plugins/themes not present in the analysis environment:
- First, confirm the dependency is real (installed/required).
- Prefer plugin-specific stubs already used in the repo (common examples:
php-stubs/woocommerce-stubs,php-stubs/acf-pro-stubs). - If PHPStan still cannot resolve classes, add targeted
ignoreErrorspatterns for the specific vendor prefix.
See:
references/third-party-classes.md
5) Baseline management (use as a migration tool, not a trash bin)
- Generate a baseline once for legacy code, then reduce it over time.
- Do not “baseline” newly introduced errors.
See:
references/configuration.md
Verification
- Run PHPStan using the discovered command (
composer run ...orvendor/bin/phpstan analyse). - Confirm the baseline file (if used) is included and didn’t grow unexpectedly.
- Re-run after changing
ignoreErrorsto ensure patterns are not masking unrelated issues.
Failure modes / debugging
- “Class not found”:
- confirm autoloading/stubs, or add a narrow ignore pattern
- Huge error counts after enabling PHPStan:
- reduce
paths, addexcludePaths, start at a lower level, then ratchet up
- reduce
- Inconsistent types around hooks / REST params:
- add explicit PHPDoc (see references) rather than runtime guards
Escalation
- If a type depends on a third-party plugin API you can’t confirm, ask for the dependency version or source before inventing types.
- If fixing requires adding new Composer dependencies (stubs/extensions), confirm it with the user first.
Related skills
More from wordpress/agent-skills and the wider catalog.

wp-playground
Spin up fast, disposable WordPress instances locally or in-browser for testing, debugging, and CI workflows.

wp-plugin-development
Develop WordPress plugins with architecture, hooks, security, and release guidance.

wp-plugin-directory-guidelines
Use when reviewing WordPress plugins for GPL compliance, checking license headers or compatibility, evaluating upsell/freemium/trialware patterns, validating plugin naming or trademark rules, checking plugin slugs, understanding why a plugin was rejected from WordPress.org, or answering any question about the 18 WordPress.org Plugin Directory guidelines — even if the user doesn't mention 'guidelines' explicitly.

wp-project-triage
Deterministic inspection of WordPress repositories with structured JSON reports for workflow guidance.

wp-rest-api
Build, extend, and debug WordPress REST API endpoints with schema validation, authentication, and custom fields.

wp-wpcli-and-ops
Execute WordPress operations safely via WP-CLI: search-replace, database management, plugin/theme operations, and automation.