Developer Guide - Overview
WP Career Board is built to be extended. The plugin fires 108 unique hooks (actions and filters), registers 41 REST routes, 5 WP-CLI command groups, and ships a JSON manifest that lets your code (or another plugin) reach into every part of the job-board flow without forking the source.
Version note: this guide tracks WP Career Board 1.4.3. Exact counts are re-enumerated on every release in
audit/manifest.summary.json- treat that file as the canonical number if it ever disagrees with this prose.
Use this guide when:
- You’re building a custom job-board theme or feature.
- You’re writing a companion plugin that integrates with Career Board (e.g. a Slack notifier, a Salesforce sync, a custom apply flow).
- You’re auditing the plugin’s surface area before going live.
For customers running a job board: use the for-employers, for-candidates, and admin-guide directories instead. This section assumes you read code.
Architecture at a glance
Section titled “Architecture at a glance”| Layer | Where | Purpose |
|---|---|---|
| Blocks | blocks/<name>/render.php + view.js |
Customer-facing UI - server-rendered, hydrated by the Interactivity API |
| Shortcodes | core/class-plugin.php::register_shortcodes() |
18 shortcode tags wrapping the frontend blocks (page builders, classic editor) |
| REST API | api/endpoints/class-*-endpoint.php |
41 routes under wcb/v1/* - all extending WCB\Api\RestController |
| Modules | modules/<area>/ |
Feature modules: jobs, applications, candidates, employers, boards, antispam, gdpr, moderation, notifications, themeintegration |
| Core services | core/class-*.php |
Cross-cutting: Settings, Abilities, Locations, Pro coordination, Theme accent bridge |
| CLI | cli/class-*.php |
wp wcb * command groups - jobs, applications, migrate, scale benchmark |
Every layer follows the same conventions:
- All globals prefixed
wcb_. - All abilities use
wcb/<slug>(kebab-case, namespaced). - All REST routes register through
WCB\Api\RestController. - All DB writes go through
$wpdb->prepare().
Contents
Section titled “Contents”| Doc | What’s inside |
|---|---|
| 02-hooks-reference.md | Every action and filter the plugin fires, grouped by area |
| 03-rest-api.md | The full REST endpoint catalog with auth, params, response shape |
| 04-wp-cli.md | WP-CLI commands and arguments |
| 05-extension-cookbook.md | Recipes for common extension tasks |
Companion plugin development
Section titled “Companion plugin development”If you’re building a Pro-like companion plugin, also read:
wp-career-board-pro/docs/website/developer-guide/02-extending-free.md- the canonical contract for extending Free, including the dependency guard, REST namespace sharing, and lockstep version requirements.
plan/INVARIANTS.yamlin either repo - machine-enforceable architectural invariants the local-CI gate checks on every commit.
Where the source of truth lives
Section titled “Where the source of truth lives”For introspecting the plugin programmatically:
audit/manifest.json- canonical inventory of every block, REST endpoint, hook, CPT, taxonomy, capability, service, and CLI command. Generated by/wp-plugin-onboard. Refreshed on every release.audit/journeys/- customer-flow regression sentinels. Each journey is a Markdown file that the smoke skill walks before a release tag.audit/qa-coverage.json- coverage gate tracking which REST/CLI/hook surfaces have regression tests. Pre-commit hook blocks reductions in coverage.
If you’re building tooling that reads any of these, do so via the
manifest’s $schema - it’s stable and versioned.

