{"id":50373871,"url":"https://github.com/devuri/wp-hook-scanner","last_synced_at":"2026-05-30T08:31:07.374Z","repository":{"id":332527217,"uuid":"1134067628","full_name":"devuri/wp-hook-scanner","owner":"devuri","description":"A PHP tool that scans your codebase for WordPress hooks (add_action, do_action, add_filter, apply_filters) and generates categorized reports.","archived":false,"fork":false,"pushed_at":"2026-01-14T08:35:23.000Z","size":42,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-14T12:19:01.176Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devuri.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-14T07:47:53.000Z","updated_at":"2026-01-14T08:35:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devuri/wp-hook-scanner","commit_stats":null,"previous_names":["devuri/wp-hook-scanner"],"tags_count":1,"template":false,"template_full_name":"devuri/dot-access","purl":"pkg:github/devuri/wp-hook-scanner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devuri%2Fwp-hook-scanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devuri%2Fwp-hook-scanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devuri%2Fwp-hook-scanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devuri%2Fwp-hook-scanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devuri","download_url":"https://codeload.github.com/devuri/wp-hook-scanner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devuri%2Fwp-hook-scanner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33686018,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-30T08:31:07.311Z","updated_at":"2026-05-30T08:31:07.368Z","avatar_url":"https://github.com/devuri.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WP Hook Scanner\n\nA PHP tool that scans your codebase for WordPress hooks (`add_action`, `do_action`, `add_filter`, `apply_filters`) and generates categorized reports.\n\nPerfect for:\n- **Documenting** hooks in your WordPress plugins and themes\n- **CI/CD pipelines** to track hook changes between releases\n- **Code audits** to understand hook dependencies\n\n## Requirements\n\n- PHP 8.1 or higher\n\n## Installation\n\nInstall via Composer:\n\n```bash\ncomposer require --dev devuri/wp-hook-scanner\n```\n\nOr add to your `composer.json`:\n\n```json\n{\n    \"require-dev\": {\n        \"devuri/wp-hook-scanner\": \"^1.0\"\n    }\n}\n```\n\n## Usage\n\n### Command Line\n\n**Pretty output (default):**\n\n```bash\nvendor/bin/scan-hooks src\n```\n\nOutput:\n```\n  Hook Scanner v1.0\n  ══════════════════════════════════════════════════\n\n  ▶ Registered Actions (3)\n  ────────────────────────────────────────────────\n    ✓ admin_init → src/Admin.php:45\n    ✓ init → src/Plugin.php:23\n    ✓ wp_loaded → src/Bootstrap.php:12\n\n  ⚡ Fired Actions (2)\n  ────────────────────────────────────────────────\n    ✓ my_plugin_loaded → src/Plugin.php:30\n    ✓ my_custom_event (2 occurrences)\n\n  ══════════════════════════════════════════════════\n  Summary: 5 unique hooks found\n  3 registered actions · 2 fired actions\n```\n\n**JSON output:**\n\n```bash\nvendor/bin/scan-hooks src --json\n```\n\n**All options:**\n\n```bash\nvendor/bin/scan-hooks [directory] [options]\n\nOptions:\n  --json                 Output results as JSON\n  --update               Create/update snapshot file\n  --check                Compare against snapshot (for CI)\n  --snapshot=\u003cpath\u003e      Custom snapshot file path (default: .hooks-snapshot.json)\n  --no-color             Disable colored output\n  --help, -h             Show help message\n  --version, -v          Show version information\n```\n\n### Snapshot Mode (CI/CD)\n\nTrack hook changes across releases using snapshots:\n\n**Create a snapshot:**\n\n```bash\nvendor/bin/scan-hooks src --update\n```\n\nThis creates `.hooks-snapshot.json` containing all current hooks.\n\n**Check against snapshot:**\n\n```bash\nvendor/bin/scan-hooks src --check\n```\n\nReturns exit code `0` if hooks match, `1` if there are differences.\n\n**Custom snapshot path:**\n\n```bash\nvendor/bin/scan-hooks src --update --snapshot=hooks.json\nvendor/bin/scan-hooks src --check --snapshot=hooks.json\n```\n\n### GitHub Actions Example\n\n```yaml\nname: Hook Check\n\non: [push, pull_request]\n\njobs:\n  hooks:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      \n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: '8.1'\n          \n      - name: Install dependencies\n        run: composer install --no-progress\n        \n      - name: Check hooks\n        run: vendor/bin/scan-hooks src --check\n```\n\n### Programmatic Usage\n\n```php\nuse WPHookScanner\\HookScanner;\n\n$scanner = new HookScanner();\n$scanner-\u003escan('src');\n\n// Get all hooks as array\n$hooks = $scanner-\u003etoArray();\n\n// Get hooks as JSON\n$json = $scanner-\u003etoJson();\n\n// Check for specific hook\nif ($scanner-\u003ehasHook('my_custom_action', 'add_action')) {\n    echo \"Found it!\";\n}\n\n// Get hooks by type\n$actions = $scanner-\u003egetHooksByType('add_action');\n$filters = $scanner-\u003egetHooksByType('apply_filters');\n\n// Get total count\n$total = $scanner-\u003egetTotalCount();\n\n// Snapshot operations\n$scanner-\u003esaveSnapshot('.hooks-snapshot.json');\n$snapshot = HookScanner::loadSnapshot('.hooks-snapshot.json');\n$diff = $scanner-\u003ecompareToSnapshot($snapshot);\n```\n\n## Hook Types Detected\n\n| Type | Description | Symbol |\n|------|-------------|--------|\n| `add_action` | Registered action hooks | ▶ |\n| `do_action` | Fired/triggered actions | ⚡ |\n| `add_filter` | Registered filter hooks | ◆ |\n| `apply_filters` | Applied filter hooks | ✦ |\n\n## Output Formats\n\n### Pretty Print (Terminal)\n\nColorized, categorized output ideal for development.\n\n### JSON\n\nMachine-readable format for tooling integration:\n\n```json\n{\n    \"add_action\": {\n        \"init\": [\n            {\"file\": \"src/Plugin.php\", \"line\": 23}\n        ],\n        \"admin_init\": [\n            {\"file\": \"src/Admin.php\", \"line\": 45}\n        ]\n    },\n    \"do_action\": { ... },\n    \"add_filter\": { ... },\n    \"apply_filters\": { ... }\n}\n```\n\n### Snapshot\n\nNormalized format for comparison (excludes line numbers):\n\n```json\n{\n    \"add_action\": [\"admin_init\", \"init\", \"wp_loaded\"],\n    \"do_action\": [\"my_custom_event\", \"my_plugin_loaded\"],\n    \"add_filter\": [\"the_content\", \"the_title\"],\n    \"apply_filters\": [\"my_plugin_value\"]\n}\n```\n\n## Testing\n\nRun the test suite:\n\n```bash\ncomposer test\n```\n\nOr directly:\n\n```bash\nvendor/bin/phpunit\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevuri%2Fwp-hook-scanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevuri%2Fwp-hook-scanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevuri%2Fwp-hook-scanner/lists"}