Developer Guide - Overview
This guide covers WP Career Board Pro 1.4.3.
WP Career Board Pro is built as an extension of WP Career Board
(Free), not a fork. Every Pro feature consumes Free’s hooks; Free
never knows specifically about Pro. The runtime guard
(wcbp_free_active()) makes sure Pro degrades gracefully when
Free is deactivated.
Use this guide when:
- You’re writing an addon that consumes Pro features (resume builder, application kanban, AI hiring tools, credit SDK).
- You’re auditing the Free/Pro coupling contract.
- You’re writing a custom credit adapter or payment gateway.
For Free-side dev surface (the hooks, REST endpoints, and CLI commands every site is built on), start with the Free developer guide.
Free/Pro coupling contract
Section titled “Free/Pro coupling contract”Pro extends Free via four invariants
(plan/INVARIANTS.yaml A-group). The local-CI gate
(bin/architecture-checks.sh) automatically enforces A1-A3 on
every push; A4 is a review-enforced rule:
| ID | Title | What it guards |
|---|---|---|
| A1 | Lockstep version | WCBP_VERSION always equals WCB_VERSION. Half-installs (one updated, the other not) are impossible. |
| A2 | Dependency guard | Pro defines wcbp_free_active() and uses it to gate boot. Deactivating Free does not fatal Pro. |
| A3 | REST namespace shared, paths disjoint | Both register under wcb/v1; Free and Pro routes never collide. |
| A4 | No source modification | Pro hooks Free via documented filters only. Never patches Free’s classes. |
If you’re shipping your own Pro-side addon, follow the same invariants - they’re the operational contract that lets Pro and the addon coexist without one breaking the other.
Architecture at a glance
Section titled “Architecture at a glance”| Layer | Where | Purpose |
|---|---|---|
| Blocks | blocks/<name>/render.php + view.js |
16 Pro blocks (kanban, alerts, resume builder/search, credit balance, AI chat search, job/resume maps, etc.) |
| REST API | api/endpoints/class-*-endpoint.php |
34 Pro routes under wcb/v1/* extending Free’s WCB\Api\REST_Controller (via Pro’s WCB\Pro\Api\Pro_REST_Controller) |
| Modules | modules/<area>/ |
Pro features: ai, alerts, analytics, boards, credits, feed, fields, maps, migration, notificationsbell, notificationspro, pipeline, pwa, resume |
| SDK | libs/wbcom-credits-sdk/ |
Wbcom Credits SDK (bundled in libs/, not vendor/, so it ships in release zips). Adapters: WooCommerce, WC Subscriptions, WC Memberships, PMPro, MemberPress. Gateways: Stripe, PayPal |
| Core | core/class-*.php |
Lifecycle: ProInstall, ProPlugin, License, FreeCoordination |
Contents
Section titled “Contents”| Doc | What’s inside |
|---|---|
| 02-extending-free.md | The canonical Pro-extends-Free contract - dependency guard, REST sharing, lockstep |
| 03-hooks-reference.md | Pro’s own actions and filters |
| 04-credits-sdk.md | The Wbcom Credits SDK - registration, consumers, adapters, gateways, ledger |
| 05-ai-providers.md | The AI hiring tools - REST endpoints, provider drivers, and how to add a 4th provider |
Working against Pro from a third-party plugin
Section titled “Working against Pro from a third-party plugin”To build an addon that depends on Pro:
- Declare Pro as a
Requires Plugins:header in your main file. - Gate your runtime hooks behind a
defined( 'WCBP_VERSION' )check. - Verify your minimum Pro version with
version_compare()againstWCBP_VERSION. - Hook into Pro’s documented actions/filters from 03-hooks-reference.md. Never reach into internal classes - those aren’t part of the public contract.
The full template (including composer arch-checks for your own
addon) is in the Free repo’s bin/architecture-checks.sh - copy
it, change the namespace, add your invariants.

