install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/WordPress/agent-skills/wp-phpstan" ~/.claude/skills/comeonoliver-skillshub-wp-phpstan && rm -rf "$T"
manifest:
skills/WordPress/agent-skills/wp-phpstan/SKILL.mdsource content
WP PHPStan
When to use
Use this skill when working on PHPStan in a WordPress codebase, for example:
- setting up or updating
/phpstan.neonphpstan.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
output (run first if you haven't)wp-project-triage- 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
in the inspect report).composer.dependencies - Ensure the PHPStan config references the stubs (see
).references/third-party-classes.md
2) Ensure a sane phpstan.neon
for WordPress projects
phpstan.neon- Keep
focused on first-party code (plugin/theme directories).paths - Exclude generated and vendored code (
,vendor/
, build artifacts, tests unless explicitly analyzed).node_modules/ - Keep
entries narrow and documented.ignoreErrors
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
types for callback args@param - Database results and iterables: use array shapes or object shapes for query results
- Action Scheduler: type
array shapes for job callbacks$args
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
patterns for the specific vendor prefix.ignoreErrors
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 (
orcomposer run ...
).vendor/bin/phpstan analyse - Confirm the baseline file (if used) is included and didn’t grow unexpectedly.
- Re-run after changing
to ensure patterns are not masking unrelated issues.ignoreErrors
Failure modes / debugging
- “Class not found”:
- confirm autoloading/stubs, or add a narrow ignore pattern
- Huge error counts after enabling PHPStan:
- reduce
, addpaths
, start at a lower level, then ratchet upexcludePaths
- 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.