v1.2.0 Latest
New
- Single-page job posting form. Drop a one-screen form into any sidebar, modal, partner page, or page builder via the new "Job Form (Single-Page)" block or [wcb_job_form_simple] shortcode. Sits alongside the existing multi-step wizard.
- Bulk applicant CSV export. Select applications in the admin list table and download a UTF-8 spreadsheet with applicant name, email, job, status, applied date, cover letter, and resume URL.
- Salary range slider on the Find Jobs page so candidates can filter by minimum and maximum salary live, with chip pills showing the active range.
- Application deadline reminder emails. Candidates who saved a job but have not applied get a 3-day and 1-day-out reminder automatically via daily cron.
- Resume upload on the apply form for guests. The previous build only accepted resumes from logged-in candidates. PDF, DOC, and DOCX, with configurable required-vs-optional and size cap up to 20 MB.
- Featured listings now expire automatically after a configurable duration (default 30 days), setting up Featured as a real time-bound paid SKU.
- Rebuilt Edit Application admin screen. Applicant card with avatar and contact info, cover letter, resume preview with Open / Download, status changer, quick-action buttons (Shortlist / Mark Hired / Reject / Message), and full status history. Replaces the previously empty native post-edit screen.
- Modular widget system. Every component on the rebuilt application screen also works as a [wcb_widget id="..."] shortcode on any page.
- Rich RSS at /jobs/feed/ with company, salary (currency, period, min, max), location, type, category, tags, experience, deadline, and apply URL. Works in any RSS reader, IFTTT, or Zapier flow.
- WPML / Polylang config so multilingual sites can translate job board CPTs, taxonomies, and key strings out of the box.
- Page-builder compatibility. Every shortcode ([wcb_job_listings], [wcb_job_form], [wcb_job_form_simple], etc.) now accepts attributes and forwards them to the block, so Elementor, Divi, Bricks, Beaver Builder, and classic editor users can scope blocks (e.g. [wcb_job_listings boardId="42" perPage="6"]).
- boardId and metaFilter attributes on the Job Listings block. Render a board-scoped or custom-relationship-scoped listing anywhere without writing custom code.
- REST ?meta_<key>=<value> query support for the jobs endpoint. Any _wcb_* namespaced meta key is allowed by default; custom meta opts in via the wcb_jobs_allowed_meta_filters filter.
- Custom-field flexibility on every form. Declarative filters (wcb_job_form_fields, wcb_company_form_fields, wcb_candidate_form_fields, wcb_application_form_fields_groups) take a single field-group schema. Add custom fields with one add_filter call.
- Local CI runner via npm run ci. Runs PHP lint, WPCS, PHPStan, and size-limit on the dev workstation before every push.
Improve
- Site-wide design token system extended with status color triplets, transition tokens, avatar size scale, and theme-aware primary tints. All blocks now token-driven so Reign and BuddyX integrators override one place to restyle the whole plugin.
- REST API list endpoints now return a structured envelope with total, pages, and has_more. Legacy X-WCB-Total and X-WCB-TotalPages response headers stay populated for one release cycle for back-compat.
- Mobile single-job page reading order corrected. "About This Role" now appears first on phones, previously sat below Job Details / Share / Company. Apply panel z-index lifted above theme toggles so light/dark switchers no longer overlap form fields.
- Setup wizard now centers between the admin sidebar and the right edge on wide viewports. Was previously narrow and left-aligned.
- Active filter pills on Find Jobs now sit with a comfortable bottom margin above the job cards. Pre-1.2.0 the pill row was flush against the cards.
- Company cards on the Companies archive now align their meta chips at the same y-position across the grid regardless of how long each tagline is.
- Plugin Check (PCP) and WPCS gates added to GitHub Actions CI alongside the existing PHP lint and PHPStan jobs.
- Custom database tables now declare ENGINE=InnoDB explicitly so the plugin works on hosts whose MySQL default storage engine is still MyISAM.
- Daily cron now schedules deadline reminders and featured-listing expiry sweeps automatically; deactivation cleanly clears scheduled events.
- Filter-panel chevron icons on Find Jobs and Companies now route through the Lucide icon system instead of hand-rolled inline SVGs, so they pick up the same stroke and color tokens as the rest of the UI.
Fix
- Test Email button on the Emails settings tab now succeeds even when the template is toggled off. Disabled templates were short-circuiting in send() so the row-delta check returned {sent:false} and the JS button painted "Failed". A new AbstractEmail::test_send() public bridge bypasses is_enabled() and marks the log row sent_test so admin previews do not pollute production delivery metrics.
- Single job page now lists the Apply Email and routes Apply Now to the external Apply URL when those fields are set on the job.
- Boards picker in the job form now hides BuddyPress group boards the employer is not a member of. Pro delivers the filtered list via the new wcb_board_options_for_employer hook.
- Buy Credits link in the job form is suppressed when the credit purchase URL is not configured, so the button no longer points at the current page.
- Pre-publish credit message ("Posting deducts N credits. Balance after: X (currently Y).") now reads its templates from translated PHP strings, with cost and balance interpolated live from the Wbcom Credits SDK.
- Uninstall.php now uses $wpdb->prepare('DROP TABLE IF EXISTS %i', $table) with the WP 6.2+ identifier placeholder.
- Removed all manage_options capability fallbacks from REST permission checks. Abilities API is now the single permission source.
- Per-page parameter on the jobs list endpoint is now clamped to 100 in the handler. The schema-only maximum was previously a warning, not an enforced cap.
- posts_per_page = -1 removed from frontend job query paths (replaced with bounded queries).
- BuddyPress group Jobs tab now correctly filters jobs to that group's board. The previous defaultBoardId block attribute was undeclared and silently dropped.
- Visual alignment issues on the single-page job form (salary row breaking awkwardly, remote-deadline pair misaligning, button placement).
Dev
- New filter wcb_board_options_for_employer( array $options, int $user_id ) lets Pro and integrators restrict the job-form Boards picker.
- New filter wcb_page_needs_frontend_assets( bool $needs ) lets contexts that render WCB blocks outside post_content (BuddyPress profile and group tabs, page builders that lazy-render) opt into the shared frontend stylesheets so primitives like .wcb-hidden resolve.
Compat
- Aligned with WP Career Board Pro 1.2.0. Install both updates together.