Wbcom Designs WP Career Board Docs
← Back to product Buy Now

Getting Started

Install, set up, and configure WP Career Board.

Introduction to WP Career Board

WP Career Board turns a WordPress site into a job board. Employers post jobs, candidates search and apply, and you review and manage everything from wp-admin. Search, filters and applying update in place without a page reload.

What you can do

As a site owner:

  • Control jobs, applications, employers and candidates from wp-admin.
  • Hold new jobs in a moderation queue until you approve them.
  • Set the emails sent for key events.
  • Export or erase a person's data with the GDPR tools.

As an employer:

  • Post jobs with a guided multi-step form.
  • Manage your jobs and applications from the employer dashboard.
  • Publish a company profile that candidates can see.

As a candidate:

  • Search and filter jobs by keyword, category, job type, location and experience level.
  • Save jobs to apply later.
  • Track your applications in the candidate dashboard.
  • Apply as any logged-in member. No Candidate role is needed unless you turn on Require Candidate Role in Career Board > Settings > Sign-ups.

How it is built

  • Every page is a block, and every block also works as a shortcode for page builders and the classic editor. See Adding blocks.
  • Front-end updates use the WordPress Interactivity API instead of jQuery.

Requirements

  • WordPress 6.9 or higher
  • PHP 8.1 or higher

Free and Pro

WP Career Board is a complete job board on its own. WP Career Board Pro is an add-on that adds:

  • Resume builder
  • Field builder for custom fields
  • Application pipeline with custom hiring stages
  • Credit system to charge employers for job posts
  • Multiple job boards
  • Job alerts
  • AI tools for descriptions, applicant ranking, recommended jobs and cover letters (you add your own AI provider key)
  • Job map
  • Job feed in XML format for job aggregators
  • CSV job import
  • Analytics
  • Installable web app (PWA)

See Pro features and Installing Pro.

Installation

You can install WP Career Board by uploading the plugin zip in wp-admin.

Before you begin

Check that your site has:

  • WordPress 6.9 or higher
  • PHP 8.1 or higher

Install the plugin

  1. Log in to your WordPress admin (/wp-admin).
  2. Go to Plugins > Add New > Upload Plugin.
  3. Click Choose File and select the wp-career-board.zip file.
  4. Click Install Now.
  5. Click Activate Plugin.

After activation, the Career Board menu appears in your admin sidebar.

What you get on activation

  • Custom post types for jobs, companies, applications, resumes and boards.
  • Job taxonomies: category, job type, location, experience level and tag.
  • Three user roles: Employer, Candidate and Job Moderator.
  • The Career Board menu, with Jobs, Applications, Candidates, Companies, Employers and Settings.
  • A redirect to the Setup Wizard the first time you activate.

After activation

The Setup Wizard creates your pages and asks for your basic settings. See Setup wizard.

To run the wizard again, go to Career Board > Settings and click Re-run Setup Wizard at the bottom of the page.

Updating the plugin

  1. Download the new zip.
  2. Go to Plugins > Add New > Upload Plugin.
  3. Upload the zip. WordPress asks if you want to replace the current version.
  4. Click Replace current with uploaded.

Your jobs, applications and settings stay in place.

Setup Wizard

You can set up your job board in the Setup Wizard. It creates your pages, sets your basic options for sign-ups, jobs, emails and spam protection, and can add sample data.

How it works

A stepper runs across the top of the wizard. The WordPress admin menu is hidden while the wizard runs. Click Exit setup in the wizard header to leave at any time. You can click a step you have already reached in the stepper to reopen it.

The Sign-ups, Jobs, Emails and Spam Protection steps have Save & Continue and Skip for now. Every answer can be changed later in Settings.

The steps

1. Pages

Creates the pages your board needs, each with the correct block already placed. Pages you already have are kept. The step lists each page as "Already set up" or "Will be created".

Page Block(s) Purpose
Find Jobs Heading + Job Search + Job Listings Main job board browse page
Post a Job Job Form Multi-step form for employers to submit listings
Employer Registration Employer Registration Unified registration for both employers and candidates (users choose "Find a Job" or "Hire Talent")
Employer Dashboard Employer Dashboard Employer manages jobs + applications
Candidate Dashboard Candidate Dashboard Candidate tracks applications + saved jobs
Find Companies Company Archive Browsable company directory

2. Sign-ups

  • Let people sign up - candidates and employers create their own accounts. This is WordPress's "Anyone can register" setting. Off: only you can add users, and the sign-up forms show a "registration closed" notice.
  • Confirm email addresses - new accounts click a link in their inbox before they can post or apply. Stops fake and mistyped sign-ups.

3. Jobs

  • Publish jobs without review - when off, every new job waits for your approval under Career Board > Jobs before candidates see it.
  • Default listing length - how long a job stays open when the employer sets no deadline.
  • Salary currency - pre-selected on the job form; employers can still pick another.

4. Emails

  • Sender name - shown as "From" on every Career Board email.
  • Sender email - use an address on your own domain so emails don't land in spam.
  • Send admin alerts to - new jobs waiting for review, reports, and other admin notices go here.

5. Spam protection

Choose a CAPTCHA option and enter its site key and secret key. The options are None (hidden honeypot only), Cloudflare Turnstile, Google reCAPTCHA v3 and Google reCAPTCHA v2 (invisible badge). A hidden honeypot always protects the sign-up, apply and post-a-job forms. See Settings > Anti-spam.

6. Sample data

Optionally install sample categories, job types, companies and demo jobs, so you can see how the board looks before you add real data. Click Finish Setup to complete.

Extra steps with Pro

WP Career Board Pro adds steps named License, How Employers Pay and Pro Pages.

Running the wizard again

If you dismissed the wizard or need to create missing pages:

  1. Go to Career Board > Settings.
  2. Click Re-run Setup Wizard at the bottom of the page.

Pages you already have are kept and reused.

After the wizard

Once complete, your site has a working job board. Next steps:

Adding Blocks to Pages

You can build your job board pages by adding blocks in the WordPress editor. Each block handles one part of the job board, and each has a shortcode for page builders.

Available blocks

Search the block inserter for "Career Board" or the block name to find them. (There is also a WP Career Board category in the pattern inserter for the bundled page patterns - Full Job Board, Post a Job Form, Employer Dashboard, Candidate Dashboard, and Company Directory.)

Block What It Does
Candidate Dashboard Candidate dashboard with a sidebar that includes Overview, My Applications, Saved Jobs, Saved Companies, Profile and Settings. With Pro it also shows sections such as My Resumes and Job Alerts.
Company Archive Interactive company directory with grid/list toggle and industry/size filters.
Company Profile Public company profile with owner inline-edit and active job listings.
Employer Dashboard Employer dashboard with a sidebar that includes Overview, My Jobs, Post a Job, Applications, Profile, Saved Jobs, Saved Companies and Settings. A Credits section appears when the Credit System (Pro) is on. Applications has a List / Board toggle. The Board groups applicants into status columns, and its Move to menu changes an applicant's status.
Employer Registration Unified registration form for both employers and candidates. Users choose "Find a Job" (candidate) or "Hire Talent" (employer) on the same form.
Featured Jobs Grid of featured jobs. Good for homepages.
Job Alerts CTA A card that prompts candidates to create a job alert. It shows only when Pro job alerts are on.
Job Filters Taxonomy filter dropdowns (category, type, location, experience) for the job listings grid.
Job Form Step-by-step form (Basics, Details, Categories, Preview) for employers to post new jobs.
Job Form (Single-Page) Every field on one screen. Use it in a sidebar, modal or partner page.
Job Listings Reactive job listings grid with load-more and bookmark toggle. Updates on search/filter without page reload.
Job Search Keyword search bar that drives the job listings grid.
Job Search Hero Full-width search form with optional category, location and job type dropdowns, in a horizontal or vertical layout. Good for homepages.
Job Single Full job detail view with an apply panel and a "Report this job" control.
Job Stats Stat strip showing the number of jobs, companies and candidates.
Recent Jobs List of the most recently published jobs. Good for sidebars or homepages.
Similar Companies A sidebar card listing companies related to the one being viewed.

WP Career Board Pro adds more blocks, including AI Chat Search, Application Kanban, Credit Balance, Featured Candidates, Featured Companies, Job Alerts, Job Map, My Applications, Open to Work, Resume Builder, Resume Map, Resume Search Hero and Resume Single. See the Pro docs, page named Pro Blocks Reference.

Adding a block to a page

  1. Open any page in the WordPress editor (Gutenberg)
  2. Click the + button to add a block
  3. Search for "Career Board" or the block name
  4. Click the block to insert it

For the main jobs page, add these blocks in order:

  1. Job Search - the search input
  2. Job Filters - the filter dropdowns
  3. Job Listings - the results

The blocks on one page work together, so a search or filter updates the listings.

Configuring block settings

Some blocks have settings you can adjust in the block sidebar:

Job Listings:

  • Job board - show only jobs assigned to one board; "All boards" shows everything
  • Layout - Grid (default) or List. Grid offers 3 columns or 4 columns.
  • Jobs per page (0 uses the site default)
  • Show filter sidebar
  • Show page heading - off by default; leave it off when the page already has a heading
  • Filter sidebar - reorder the filter groups (Job type, Experience, Category, Tags, Location, Job board, Salary) with Move up and Move down, and hide any you do not need. Settings are per-block, so each Job Listings placement can have its own filter order.

Job Search Hero:

  • Layout - horizontal (default) or vertical
  • Search placeholder and Button label
  • Show category filter, Show location filter, Show job type filter

Featured Jobs:

  • Number of jobs (default: 3)
  • Section title
  • Show "View all" link

Recent Jobs:

  • Number of jobs (default: 5)
  • Section title
  • Show "View all" link

Job Stats:

  • Show Jobs count, Show Companies count, Show Candidates count

Job Form (Single-Page) and Company Archive have no editor settings. You can still set their options in a shortcode. See below.

To access these settings, click the block in the editor and look at the Block panel in the right sidebar.

The setup wizard vs manual setup

The Setup Wizard creates pages with the correct blocks already placed. Add blocks yourself if:

  • You want to embed the job board on an existing page.
  • You want a custom layout.
  • You skipped the wizard.

Tip: Check Career Board > Settings > Pages to see which pages are assigned.

Using shortcodes (classic editor)

If you use the Classic Editor or a page builder without block support, use shortcodes instead. Every block in the table has a shortcode:

Shortcode Block
[wcb_job_listings] Job Listings
[wcb_job_search] Job Search
[wcb_job_search_hero] Job Search Hero
[wcb_job_filters] Job Filters
[wcb_job_form] Job Form (4-step wizard)
[wcb_job_form_simple] Job Form (Single-Page)
[wcb_job_single] Job Single
[wcb_employer_dashboard] Employer Dashboard
[wcb_candidate_dashboard] Candidate Dashboard
[wcb_employer_registration] Employer Registration (alias: [wcb_registration])
[wcb_company_archive] Company Archive
[wcb_company_profile] Company Profile
[wcb_job_stats] Job Stats
[wcb_recent_jobs] Recent Jobs
[wcb_featured_jobs] Featured Jobs
[wcb_similar_companies] Similar Companies
[wcb_job_alert_card] Job Alerts CTA

Paste the shortcode into any page or post. It shows the same output as the block. A shortcode also accepts the block's attributes, for example [wcb_job_listings boardId="42" perPage="6"]. Other examples are [wcb_job_form_simple boardId="42" compact="true"] and [wcb_company_archive perPage="12" layout="list"].

Day-1 quickstart

You can go from a fresh install to your first job and your first application in five tasks.

1. Finish the setup wizard

If you skipped the wizard, go to Career Board > Settings and click Re-run Setup Wizard at the bottom of the page. The wizard:

  • Creates the pages your board needs: Find Jobs, Post a Job, Employer Registration, Employer Dashboard, Candidate Dashboard and Find Companies. A page you already have is kept.
  • Can install sample categories, job types, companies and jobs, so you can see the board with content.

If you already ran it, check Career Board > Settings > Pages to confirm each page is assigned.

2. Add menu items

Open Appearance > Menus and add links to the pages you want visitors to reach:

  • Jobs: /find-jobs/
  • Employers: /post-a-job/ or /employer-dashboard/
  • Candidates: /candidate-dashboard/
  • Companies: /find-companies/

The paths above are the default page slugs. Use the real page links if you changed them.

3. Post your first job

  1. Go to /post-a-job/.
  2. Fill in the form: title, company, description, salary, location and category.
  3. Submit. If Auto-Publish Jobs is off, the job waits under Career Board > Jobs as Pending Review. Approve it.
  4. Open /find-jobs/. Your job appears in the listing.
  5. Click into it to see the page candidates see.

4. Apply to it as a test candidate

  1. Log out, or open a private window.
  2. Register a test account at /employer-registration/ and choose Find a Job. You can also apply as a guest unless Require login to apply is on.
  3. Apply to the job you posted.
  4. Log back in as admin and open Career Board > Applications. Your test application is listed.
  5. Open it to see what employers see when they review applicants.

5. Check moderation, credits and emails

  • Moderation: in Career Board > Settings > Jobs, the Auto-Publish Jobs toggle. Leave it off to approve each job yourself, or turn it on to publish jobs straight away.
  • Credits (Pro): Career Board > Settings > Credits. Use it to charge employers for job posts.
  • Emails: Career Board > Settings > Emails. Candidates get an application confirmation email and employers get a new application email.

Next steps

If you are running... Read next
A public job board Post a job
A paid job board Credit system
An internal hiring board Settings
Classic-editor pages Page builder embeds

Troubleshooting

  • Visitors cannot apply without an account: check Require login to apply under Career Board > Settings > Sign-ups. When it is on, only signed-in members can apply. If Require Candidate Role is also on, only users with the Candidate role can apply.
  • An employer has no Post a Job link: the account needs the wcb_post_jobs capability. Administrators and the Employer role have it.
  • Emails do not arrive: Career Board sends email through wp_mail, like other plugins. Set up an SMTP plugin with a real sending domain.

Install and activate Pro

You can add WP Career Board Pro to a site that already runs WP Career Board. Pro is a separate plugin.

Install the Pro plugin

  1. Install and activate WP Career Board (Free) first. Pro needs it and shows an admin error notice when Free is not active.
  2. In wp-admin, go to Plugins > Add New > Upload Plugin.
  3. Select the wp-career-board-pro.zip file and click Install Now.
  4. Click Activate Plugin.

Pro also needs a Free version that is new enough. If yours is too old, an admin notice asks you to update Free first.

Activate your license

Go to Career Board > Settings > License and enter your license key. The key keeps automatic updates working. The Pro features on your website do not depend on it.

For statuses, moving a license to another site and renewals, see the WP Career Board Pro docs, page named License activation.

What Pro adds

  • Extra tabs under Career Board > Settings, including Analytics, Boards, Field Builder, Credits, AI Settings, Job Feed, Integrations and License.
  • Extra blocks in the block inserter.
  • Extra setup wizard steps named License, How Employers Pay and Pro Pages.

To run the wizard again, click Re-run Setup Wizard at the bottom of Career Board > Settings.

What's new

You can use this page to see recent changes that affect how you set up and run your job board. For the full history, see the changelog in readme.txt.

Recent changes

  • Setup wizard. It has a stepper, an Exit setup button, and steps for Pages, Sign-ups, Jobs, Emails, Spam Protection and Sample Data.
  • Dashboards. The employer and candidate dashboards have a sidebar with an Overview item, grouped links and a Post a Job button on the employer side.
  • Applications board. Every card on the Board view has a Move to menu, so you do not have to drag cards.
  • Ratings and notes. Employers can rate an applicant and keep private notes on an application.
  • Applicant export. Employers can export applicants to CSV from the employer dashboard, and administrators can export from the Applications screen.
  • Job end dates. Jobs end at their deadline when End jobs at their deadline is on under Career Board > Settings > Jobs. Employers get an email 3 days before a job ends.
  • Google for Jobs. Under Career Board > Settings > Jobs you can set Require a location, Default country and Social sharing tags.
  • Job order. Default order under Career Board > Settings > Jobs sets how listings are sorted.
  • Emails. There are emails for Welcome, Account deletion requested, cancelled and completed, Application not selected, Application withdrawn, Report received and Confirm your email address. Members can turn off the optional deadline reminder and job ending soon emails in the Settings section of their dashboard.
  • Closed jobs. When a job closes, undecided applicants move to Position closed.
  • Personal data. Deleting an account or erasing personal data keeps the employer's application record and shows the candidate as "Deleted candidate".
  • Brand. Career Board > Settings > Brand sets your brand colour and logo.
  • Advanced settings. Keep Email History (days) and Remove Data on Delete are under Career Board > Settings > Advanced. Deleting the plugin keeps your data unless Remove Data on Delete is on.

Upgrading

Install WP Career Board and WP Career Board Pro updates together. Pro will not run with an older Free version and shows an admin notice.

Tutorials

End-to-end walkthroughs for common job-board scenarios.

Your first day as a site owner

You can go from a fresh install to a live job board with a test employer, a published job and a submitted application. This walkthrough covers each step in order. Set aside about an hour.

What you will have at the end

  • A working job board at /find-jobs/ and a company directory at /find-companies/.
  • One employer account that can post jobs.
  • One candidate account that can apply.
  • Email notifications tested.
  • A published test job and a test application.

Before you start

You need:

  • WordPress 6.9 or newer on PHP 8.1 or newer.
  • An admin account on the site.
  • A way to send email from the site, such as an SMTP plugin or your host's mail.

If you also want to try Pro features, install Pro after this walkthrough. The steps below use Free only.

Step 1 - Install and activate

  1. Go to Plugins > Add New > Upload Plugin and upload the wp-career-board.zip file.
  2. Click Activate.
  3. The Setup Wizard opens. Walk through it rather than dismissing it.

If you do not see the wizard, open Career Board > Settings and click Run Setup Wizard.

The plugin adds three roles: Employer, Candidate and Job Moderator. Learn what each can do in Capabilities and roles.

Step 2 - Walk through the setup wizard

The admin menu is hidden while the wizard runs. Click Exit setup at the top if you need to leave early. A stepper across the top lets you go back to any finished step. The steps are:

  1. Pages - creates the pages your board needs and assigns them in Settings:

    • Find Jobs
    • Employer Dashboard
    • Candidate Dashboard
    • Find Companies
    • Post a Job
    • Employer Registration

    If a page that already contains the matching Career Board block exists, the wizard reuses it.

  2. Sign-ups - turn on Let people sign up so candidates and employers can create their own accounts, and turn on Confirm email addresses to hold new accounts until they click a link in their inbox.

  3. Jobs - choose whether jobs publish immediately and set the default listing length in days.

  4. Emails - set the sender name, sender email and the address for admin alerts.

  5. Spam Protection - keep the hidden honeypot only, or add Cloudflare Turnstile or Google reCAPTCHA and enter its keys.

  6. Sample Data - install demo categories, job types, companies and jobs so the board is not empty while you test.

Each settings step has Save & Continue and Skip for now. You can change every answer later under Career Board > Settings.

To remove the sample data later, go to Career Board > Settings > Import and click Remove Sample Data.

Step 3 - Test email sending

If your site cannot send email, employers never hear about applications. Test this first.

  1. Go to Career Board > Settings > Emails.
  2. In the Email templates table, click Send test on any row. The test goes to your admin email address.
  3. If it does not arrive, install an SMTP plugin such as WP Mail SMTP or Fluent SMTP, connect your mail provider, and test again.

Every test send is recorded in the Email activity log on the same tab, with a Sent or Failed status.

Step 4 - Set the sender details

On Career Board > Settings > Emails, the Sender card holds three settings:

  • From Name - the name shown on Career Board emails. Defaults to your site name.
  • From Email - the sender address. Use an address on your own domain so mail passes SPF, DKIM and DMARC checks. Defaults to the site admin email.
  • Admin Notification Email - where admin alerts go, such as a new job waiting for review or a reported job. Defaults to the site admin email.

Below the Sender card, the Email templates table lists every email with its recipient, subject and an Enabled checkbox. Click Edit on a row to change the message. Keep Application Status Changed enabled, because it is how candidates hear about progress.

Step 5 - Add the pages to your menu

The wizard creates the pages but does not change your menu.

  1. Go to Appearance > Menus.
  2. Add Find Jobs, Find Companies, Candidate Dashboard, Employer Dashboard and Post a Job.
  3. Save the menu.

Step 6 - Create a test employer

Test as a real employer instead of posting from your admin account. Admin accounts skip role checks, which hides problems.

  1. Open a private browser window so you stay logged in as admin in your main window.
  2. Visit /employer-registration/.
  3. Choose Hire Talent, then fill in your name, email, password and company details. Use an email address you can read.
  4. If Email Verification is on, open the confirmation link in the email, then sign in. If it is off, you are signed in straight away and receive a Welcome email.

Registration creates the account with the Employer role and creates the company for it.

Step 7 - Post the first test job

Still as the test employer:

  1. Open the Employer Dashboard and click Post a Job.
  2. Complete the four steps: Job Basics, Job Details, Classify Your Job and Preview & Submit. Give the job a title and description, choose a category, job type and location, and leave Apply URL and Apply Email empty so candidates apply on your site.
  3. Submit.

If Auto-Publish Jobs is on under Settings > Jobs, the job is published straight away. If it is off, the job waits as Pending. Approve it from Career Board > Jobs in your admin window. The employer is emailed when the job is approved.

Check the job on /find-jobs/. If it does not appear:

  • Confirm its status is Published.
  • Confirm its deadline is not in the past.
  • Confirm your theme is not redirecting the page.

Handle reported jobs

When a logged-in visitor reports a job, a Flagged filter appears at the top of Career Board > Jobs. The visitor picks one reason: scam or fraudulent, spam or advertisement, expired or already filled, inaccurate or misleading, or offensive or inappropriate. Open the Flagged list and read the reasons in the Flags column. Then click Dismiss flag if the job is fine, or Unpublish if it is not.

Step 8 - Create a test candidate

  1. Open another private window.
  2. Visit /employer-registration/ again and choose Find a Job. The Candidate Dashboard also shows Sign In and Create an account buttons when you are logged out.
  3. Sign in. By default any logged-in member can apply, save jobs and build a resume, without needing the Candidate role. If you turn on Require Candidate Role under Settings > Sign-ups, only accounts with the Candidate role can.
  4. In the Candidate Dashboard, open My Resumes, click + New Resume or Upload CV, and add a resume.

Step 9 - Apply to the test job

As the candidate:

  1. Open /find-jobs/ and click the test job.
  2. Click Apply Now.
  3. Choose a saved resume or upload a file, and write a cover letter. The cover letter is optional.
  4. Click Submit Application.

The button changes to Application Submitted.

Step 10 - Check the employer side

Back in the employer window:

  1. Open the Employer Dashboard and go to Applications. Select the job, then select the applicant.
  2. Confirm the resume is available to view or download.
  3. Check the employer's inbox for the New application for your job email. If it is missing, go back to Step 3.
  4. Set the status to Reviewing.
  5. Check the candidate's inbox for the status email. If it is missing, check that Application Status Changed is enabled under Settings > Emails.
  6. Set the status to Shortlisted, then Hired. Each change emails the candidate.

Step 11 - Check the candidate dashboard

In the candidate window:

  1. Open My Applications. The test application shows the status Hired.
  2. Bookmark another job on /find-jobs/, then open Saved Jobs to confirm it appears.
  3. Open Profile and confirm your changes save.

Step 12 - Clean up

When you are done:

  1. Delete the test job from Career Board > Jobs.
  2. Delete the test application from Career Board > Applications.
  3. Delete the test candidate and employer accounts from Users.

What to do next

Common day-one mistakes

  • Skipping the email test. Without working email, employers are not told about new applications.
  • Posting jobs from the admin account. Test as a real employer and candidate.
  • Forgetting the listing length. A new job runs for the length set under Settings > Jobs > Default listing length (days), which is 30 by default. A board can set its own length, which wins over this one. When ending jobs at their deadline is on, a job leaves the listings within the hour of its deadline. New sites have this on. Older sites can turn it on with the End jobs at their deadline button under Settings > Jobs.
  • Not adding the pages to the menu. Visitors cannot reach the dashboards without links.
  • Not activating the Pro license. If you installed Pro, activate the license under Settings > License. It controls updates and the mobile app connection. Pro's web features keep working without it.

Employer end to end

You can run a full hiring round from the employer dashboard: register, set up your company, post a job, review applicants, hire, and close the role. This walkthrough covers each step.

Step 1 - Register as an employer

Open the employer registration page, usually at /employer-registration/. Your site owner may also link it from the menu or from a Post a Job button. If you cannot find a link, ask the site owner for the address.

  1. Choose Hire Talent.
  2. Enter your name, email and a password of at least 8 characters.
  3. Enter your company name. You can also add its website, industry, size and headquarters.
  4. Submit.

If the site asks new members to confirm their email, open the link in the message you receive, then sign in. Otherwise you are signed in straight away and receive a Welcome email.

Registration creates your company profile from the company name.

Step 2 - Complete your company profile

Applicants see your company profile on every job. Open the Employer Dashboard and go to Company > Profile. You can set:

  • Company Logo - a JPEG, PNG, WebP or GIF image. Save the profile first, then upload the logo.
  • Company Name and Tagline - the tagline is a one-line description shown on listings.
  • About the Company
  • Industry, Company Size and Company Type
  • HQ Location
  • Website, LinkedIn and X (Twitter)
  • Founded Year

The Live Preview beside the form shows how the profile looks. Click Save Profile. Your public company page lives under /companies/ on the site. Use Company > Public Page to open it.

Step 3 - Get posting credits, if your board charges for jobs

Free boards post jobs without charge. Charging for job posts and featured listings with credits is a Pro feature. If your board uses credits, your balance shows on the dashboard overview, and the Credits section of the dashboard is where you manage it. When your balance is too low to post, the job form shows a Buy Credits link if the site owner has set up a purchase page.

For how credits are set up and bought, see the Pro docs page Credit system.

Step 4 - Post your first job

Open Employer Dashboard > Post a Job. The form has four steps.

Job Basics

  • Job Title - write the title a candidate would search for. "Senior Frontend Engineer" works better than a clever title.
  • Job Description - open with what the role is, then list responsibilities and requirements. Use the inline toolbar and the block menu for headings, lists and links.

Job Details

  • Salary Range - choose the currency, a minimum and maximum, and the period (year, month or hour). Leave it blank to hide salary from candidates.
  • Remote-friendly position - tick this for remote roles.
  • Application Deadline - shown for information. It is filled in from the board's listing length and you cannot edit it. Ask the site owner if you need a longer listing.
  • Apply URL and Apply Email - both are optional. Leave them empty to receive applications inside the dashboard. Fill in Apply URL to send candidates to your own application system. The job page then shows Apply on Company Site. Fill in Apply Email to show an address candidates can apply to.

Classify Your Job

  • Category, Job Type and Location. Location is required unless the job is remote. Choose Other (enter manually) if your city is not in the list.
  • Experience Level
  • Skills / Tags - comma-separated. These help candidates find your job by keyword.

Preview & Submit

Review the job, go back to fix anything, then submit.

If you have Pro with AI features enabled, the description field has a Generate with AI button. Always edit the result. See the Pro docs page AI features.

Step 5 - Approval

Whether a new job publishes at once depends on the site's Auto-Publish Jobs setting.

  • If it is on, the job is published as soon as you submit.
  • If it is off, the job waits as Pending until the site owner or a moderator approves it. You get a Your job has been approved email, or Your job was not approved if it is rejected. A rejected job shows a Resubmit button in My Jobs.

Step 6 - Promote the listing

  • Share the job address on your social accounts and in your company channels.
  • The site publishes a job feed at /jobs/feed/. Each item carries the company, salary, location, job type, category, tags, experience level, deadline, remote flag and apply link or email. Aggregators that read RSS can use it.

Step 7 - Review applications

Open Employer Dashboard > Applications. Pick a job from the list, then pick an applicant. You see:

  • The applicant's name and submitted date.
  • The current status, which starts as Submitted.
  • The cover letter, and answers to any screening questions.
  • View Resume and Download Resume.
  • Your private notes and rating. Only your hiring team sees them.

You receive a New application for your job email for each application.

Use the List and Board buttons to switch layout. The Board groups applicants into status columns. Drag a card to change its status, or use the Move to menu on the card. Click Export CSV to download the applications for the selected job. The file has the application ID, job ID, job title, applicant name and email, status, submitted date, cover letter, resume URL and screening answers.

Step 8 - Triage

  1. Use the filter buttons at the top (All, Submitted, Reviewing, Shortlisted, Rejected, Hired) to focus on one group. Submitted hides everything you have already moved.
  2. Read each application.
  3. Set the status with the status menu: Reviewing if you might talk to them, Shortlisted for a clear yes, Rejected for a clear no.

The candidate gets an email for Reviewing, Shortlisted and Hired. Rejected sends a separate, gentler email titled with the job name. Candidates see Rejected as Not selected. The site owner can edit these emails under Career Board > Settings > Emails.

If Pro's AI ranking is on, you can sort by the fit score. Treat it as a guide and read the applications yourself. See the Pro docs page AI features.

Step 9 - Interview

Interviews happen outside the board. Use the five statuses (Submitted, Reviewing, Shortlisted, Rejected, Hired) to track where each candidate is. With Pro, the Application Pipeline adds custom stages. See the Pro docs page Application pipeline.

Step 10 - Decide

  1. Set the chosen candidate to Hired. They get the status email.
  2. Send your offer yourself. The status email tells the candidate the status only, not the terms.
  3. Set the remaining candidates to Rejected.

Step 11 - Close the role

  1. Go to Employer Dashboard > My Jobs and click Close on the job. The job leaves the listings and stops taking applications. Applicants you have not hired or rejected are told the position is closed.
  2. To reopen it later, click Reopen.
  3. Export the applications with Export CSV before you close the role if you want a spreadsheet.

Step 12 - Find candidates with Pro

With Pro, a public Find Candidates page lets employers search candidate resumes. See the Pro docs page Resume builder, and its Find candidates section, for how it works. Free does not include a candidate directory.

Common employer mistakes

  • Posting and not checking in. Review applications as they arrive.
  • Leaving out salary. A stated range helps candidates decide to apply.
  • Slow status updates. Move applications to Reviewing soon after you start reading, so candidates know you have seen them.
  • Rejecting without a message. The default Rejected email is better than silence.
  • Posting the same job twice. Edit the existing job instead. Use Edit in My Jobs.

Where to go next

Candidate end to end

You can find a job, apply, track your application and, if things change, withdraw it. This walkthrough covers each step from the candidate side.

Step 1 - Browse before you register

You do not need an account to look around.

  1. Open the Find Jobs page, usually at /find-jobs/.
  2. Search by keyword, and narrow the results with the filters: Category, Job Type, Location, Experience, Min salary, Max salary and Remote only. The salary filters match the salary numbers employers entered, so compare jobs that use the same pay period and currency.
  3. Open a few listings and a few company profiles to see what the board offers.

Step 2 - Create an account

Visitors can apply without an account. The apply form asks guests for a name and email. An account lets you track applications, save jobs and manage your details, so it is worth creating one.

  1. Open the Candidate Dashboard while logged out and click Sign In, or click Create an account if it is shown.
  2. On the sign-up page, choose Find a Job, then enter your details. If the page says registration is closed, the site owner has turned off sign-ups.
  3. If the site asks you to confirm your email, open the link in your inbox, then sign in.

On most boards any logged-in member can use the candidate features straight away. If the site owner requires the Candidate role, they assign it to your account first.

Step 3 - Complete your profile

Open Candidate Dashboard > Account > Profile and fill in:

  • Email
  • Phone
  • Location
  • Bio / About Me

Click Save Profile. To change your display name, email or password, open Account > Settings. Changing your email needs your current password.

With Pro, the dashboard also has resume, alerts and public profile features. See the Pro docs page Resume builder.

Step 4 - Prepare your resume

When you apply, you attach a resume file. Accepted formats are PDF, DOC and DOCX. The site owner sets the maximum file size, between 1 and 20 MB, and decides whether a resume is required. A resume is required by default.

With Pro, the My Resumes tab lets you build a resume on the dashboard and pick it when you apply. See the Pro docs page Resume builder.

Step 5 - Job alerts

Job alerts are a Pro feature. See the Pro docs page Job alerts for how to set one up. Without Pro, check the board yourself and save the jobs you like.

Step 6 - Search and save jobs

  1. Browse the board and open the listings that fit.
  2. Click Save this job on a job you want to come back to. It appears under Candidate Dashboard > Saved > Saved Jobs.
  3. Read the company profile. Remove a saved job from the Saved Jobs list if you change your mind.
  4. Apply to the jobs that fit your goals.

Report a bad listing

If a listing looks like a scam, spam or is misleading, report it to the site's moderators.

  1. Open the job page while signed in. You cannot report your own listing.
  2. Click Report this job.
  3. Choose a reason: scam or fraudulent, spam or advertisement, expired or already filled, inaccurate or misleading, or offensive or inappropriate.
  4. Click Submit report.

A moderator reviews reported jobs and either dismisses the report or unpublishes the job. You do not get a personal reply.

Step 7 - Apply

  1. Open the job and click Apply Now. If the employer set an external application link, the button reads Apply on Company Site and takes you to the employer's own page.
  2. If you are not signed in, enter your name and email.
  3. Upload your resume file. You can also write a cover letter, which is optional.
  4. Click Submit Application.

You receive an Application submitted successfully email. The button on the job page changes to Application Submitted, and the application appears under Candidate Dashboard > My Activity > My Applications.

A good cover letter names the role, gives one or two concrete examples of your background that match it, and mentions practical points such as notice period or location.

Step 8 - Track your applications

Open Candidate Dashboard > My Applications. Each application shows its job and current status. When an employer changes the status, you receive an email and the dashboard updates. The statuses are:

  • Submitted - the employer has your application and has not acted on it.
  • Reviewing - the employer is looking at it.
  • Shortlisted - you are under further consideration.
  • Hired - the employer chose you.
  • Not selected - the employer is not moving forward.
  • Withdrawn - you withdrew the application.
  • Job removed - the job was deleted. You can remove the row from your list.
  • Position closed - the employer closed the job before deciding.

Step 9 - Withdraw an application

You can withdraw an application until it has an outcome (Hired, Not selected or Position closed).

  1. Open My Applications.
  2. Click Withdraw on the application and confirm.

The application stays in your list as Withdrawn, and the employer is emailed. You can apply to the same job again later. If you do not see the Withdraw button, the site owner has turned withdrawals off.

Step 10 - Manage your email notifications

Open Account > Settings and find Email Notifications. The panel lists the emails you can turn off, such as the application deadline reminder. Emails about your account and applications are always sent. If no optional emails apply to you, the panel does not appear.

Step 11 - Export or delete your data

Open Candidate Dashboard > Account > Settings and scroll to Privacy & My Data.

  • Request data export - we email you to confirm the request, then send the file once the site has prepared it.
  • Delete my account - enter your password and type DELETE to confirm, then click Schedule deletion. Your account is signed out everywhere and scheduled for deletion, 14 days later by default. To stop it, sign back in before the date and choose Keep my account.

You receive emails when deletion is requested, cancelled and completed. Deletion cannot be undone once it completes.

Common candidate mistakes

  • Applying with a blank profile. Fill in your profile before you apply.
  • Sending the same cover letter everywhere. Tailor it to each role.
  • Ignoring status emails. They tell you where each application stands.

Where to go next

Monetizing your board

You can run your board with free job posts using Free alone, or charge employers credits to post and feature jobs with Pro. This page helps you choose and points to the setup guides.

Free and Pro

  • Free posts jobs without charge. There is nothing to configure for pricing.
  • Pro adds credits. You give a board a credit cost per job, employers buy credits, and posting a job uses them. Pro also supports a paid Featured upgrade.

Choose a model

Model What employers pay for Available in
Free postings Nothing Free
Credits per post Credits spent when a job goes live Pro
Credit packs Bundles of credits bought in advance Pro
Memberships or subscriptions Credits granted by a plan Pro

You can combine them. For example, keep some boards free and charge on others, and sell the Featured upgrade on top.

Free postings

Employers register and post without paying. You choose how much review each job gets.

  1. Go to Career Board > Settings > Jobs.
  2. Leave Auto-Publish Jobs off to review every new job. New jobs wait as Pending until you approve them under Career Board > Jobs. You are emailed when a job is waiting.
  3. Turn Auto-Publish Jobs on to publish jobs as soon as employers submit them.

Auto-publish is off by default. Keep it off on a free board unless you trust your posters.

Charging with credits (Pro)

With Pro you can charge credits to post and to feature jobs. Employers buy credits from the Credits tab of their dashboard. Credits are held when a job is submitted to a paid board and spent when the job goes live. If the job is rejected, trashed or deleted, the credits are returned.

You can sell credits through:

  • Stripe or PayPal, using credit packs you create
  • WooCommerce
  • WooCommerce Subscriptions
  • WooCommerce Memberships
  • Paid Memberships Pro
  • MemberPress

Every change to a balance is recorded in a credit ledger that is never edited.

For prices, packs, mappings, refunds and manual adjustments, use the Pro docs pages under Credit system:

  • Overview
  • Stripe setup
  • Credit packages
  • Featured upgrade
  • WooCommerce setup
  • PMPro setup
  • MemberPress setup
  • Manual adjustments and refunds
  • Native checkout
  • Checkout receipts and emails

Test before you launch

Run a full purchase and post as a real employer before you announce paid posting. Check that the credits arrive, the job posts, and the receipt email is sent.

Where to go next

Community job board with BuddyPress

You can run your job board inside a BuddyPress or BuddyBoss community. With Free, members are tagged as Employers or Candidates, and the activity stream announces new jobs. Pro adds group boards, profile tabs, notification-bell alerts and member directory filters.

If you do not run BuddyPress, you do not need it. Career Board works on its own.

What you need

  • WordPress 6.9 or newer on PHP 8.1 or newer.
  • BuddyPress, or BuddyBoss Platform.
  • WP Career Board. Pro is only needed for the extra community features listed below.

The integration switches on by itself when BuddyPress is active. There is no setting to turn it on.

What Free does

  • Member types. Career Board registers two BuddyPress member types, Employer and Candidate. A member gets the matching type when their role is set to Employer or Candidate, for example when a new account registers. Use the types in member directories and BuddyPress queries.
  • Activity entries for new jobs. When an employer submits a job and it publishes straight away, the site-wide activity stream gets an entry, "{name} posted a new job: {job title}". The Activity Streams component must be enabled under Settings > BuddyPress > Components.

Free does not post an activity entry when a job is approved later, and it does not post one for applications or hires. There is no setting to switch the job entry off.

Set it up

  1. Activate BuddyPress and Career Board.
  2. Under Settings > BuddyPress > Components, make sure Activity Streams is enabled if you want the job entries.
  3. Add the Career Board pages to your menu, as described in Your first day as a site owner.

Test the integration

  1. Register a test employer and a test candidate. See Your first day as a site owner.
  2. Open the Members directory and check that each account has the right member type.
  3. Turn on Auto-Publish Jobs under Career Board > Settings > Jobs, post a job as the employer, and check the activity stream for the new entry.

What Pro adds

Pro connects the board to more parts of your community. It can give each BuddyPress group its own job board, add My Jobs and My Career tabs to member profiles, alert members in the notification bell, add Open to work and Hiring filters to the members directory, let group admins moderate their own group's jobs, and price job posts by member type or membership. For setup, use the Pro docs pages under BuddyPress integration.

Where to go next

Migrating from another job board plugin

You can move jobs and applications from WP Job Manager into WP Career Board from the Import screen. For other plugins, Pro can import jobs from a CSV file. This page shows the steps.

Before you migrate

  1. Decide how to cut over. You can deactivate the old plugin as soon as Career Board is ready, or run both for a while and migrate in stages. Career Board needs the old plugin active while you import, so its data stays readable.
  2. Test on a staging copy first. Run the import on a copy of your site before you run it on the live site.
  3. Plan for new addresses. Career Board serves each job at /jobs/{slug}/, and the slug is made from the job's title. Addresses from your old plugin do not carry over, so plan redirects (see below).

Import from WP Job Manager

Free includes importers for WP Job Manager. You need WP Career Board and WP Job Manager both active.

  1. Go to Career Board > Settings > Import. Each importer is a card that shows whether the source plugin is active, how many records were found, how many are already imported and how many remain.
  2. On the WP Job Manager > Jobs card, review the preview, then click Import All Jobs. The importer carries over:
    • Title and description
    • Location
    • Salary, currency and pay period
    • Deadline or duration
    • Featured flag and remote flag
    • Application email or URL
    • Company pages: name, website, tagline, Twitter and logo. A job is matched to an existing company by website or name, and a new company page is created if there is no match.
    • Categories, job types and tags
    • Filled jobs are imported as Closed, and expired jobs as Expired.
  3. On the WP Job Manager Applications > Applications card, click Import All Applications. Import the jobs first. This moves applications onto the imported jobs with their status, message, candidate and attached file links. No emails are sent.
  4. With Pro active, the WP Job Manager Resumes > Resumes card imports resumes.

Each migration is safe to run more than once. Records that were already imported are skipped.

The same jobs import is available from WP-CLI:

wp wcb migrate wpjm --dry-run
wp wcb migrate wpjm

Use --dry-run first to see what would be imported. Add --limit and --offset to import in parts.

Import from other plugins

Free has no importer for other plugins. With Pro, the CSV > Jobs card on the same Import screen imports jobs from a spreadsheet. See the Pro docs page Migration and CSV import for the columns and steps.

Keep your old addresses working

Set up a permanent (301) redirect from your old job address pattern to /jobs/. Use a redirects plugin such as Redirection, or a rule in your web server. After the import, check that a sample of old addresses reach the right jobs. Because the new slug comes from the job title, jobs whose titles were edited in the old plugin can end up at a different slug than you expect.

Test the migration

  1. Open /find-jobs/ and confirm the imported jobs appear.
  2. Check a sample of jobs for the title, description formatting and company.
  3. Apply to a job as a candidate and check the employer receives it.
  4. Test some old addresses to confirm the redirects work.
  5. Tell your employers and candidates about the change before you switch over.

After migration

  • Deactivate the old plugin when you are satisfied.
  • Career Board has its own roles: Employer, Candidate and Job Moderator. Give the Employer role to the people who post jobs, so they can use the Employer Dashboard.
  • Career Board uses its own email templates. Review them under Career Board > Settings > Emails.
  • The importer carries over only the fields listed above. Recreate anything else, such as extra custom fields, by hand. Pro's field builder can add custom fields. See the Pro docs page Field builder.

Where to go next

Multi-language job board

You can run your board in several languages with WPML or Polylang. Career Board ships a configuration file that both plugins read, and a set of ready-made translations. This page shows what is translatable and how to set it up.

What is translatable

Item How it is handled
Jobs, companies and resumes Marked translatable. You create a translated copy of each in WPML or Polylang.
Applications and boards Marked not translatable.
Categories, job types, tags, locations, experience levels Marked translatable.
Company name and tagline Translated per copy of the company.
Salary, currency, pay period, deadline, remote flag, featured flag, apply URL, apply email and company links Copied unchanged from the original to each translation.
Sender name, sender email, admin notification email, and every email subject and body Registered as translatable strings.
Interface text Translatable through the wp-career-board text domain.

Applications are not duplicated across languages, and Career Board does not store a language on each application.

Ready-made translations

Career Board includes German, French, Spanish, Dutch and Korean translations. If your site language is one of these, the matching translation loads automatically. For other languages, use the template file at languages/wp-career-board.pot to create your own, or translate strings inline in WPML String Translation or Polylang Strings translations.

Emails and languages

Emails to a registered member are sent in that member's language. Guests receive the site language.

To translate the wording of an email, edit its subject and body under Career Board > Settings > Emails, then translate them in WPML String Translation or Polylang Strings translations.

Set up with WPML

  1. Install WPML Multilingual CMS and the WPML String Translation add-on, and add your languages.
  2. Go to WPML > Settings > Post Types Translation and Taxonomies Translation, and check the settings shown above. They come from Career Board's configuration file, so you usually do not need to change them.
  3. Go to WPML > String Translation and filter by the wp-career-board domain to translate interface text.
  4. Create a test job in your default language, then create its translation from the post editor and translate the title and description.
  5. Switch language on the front end and check the translated job appears.
  6. Apply as a candidate in the second language and check the form labels and the confirmation email.

Set up with Polylang

  1. Install Polylang and add your languages under Languages > Languages.
  2. Go to Languages > Settings > Custom post types and Taxonomies. Job, company and resume post types and the Career Board taxonomies are enabled by the configuration file. Leave applications and boards off.
  3. Go to Languages > Strings translations and filter by wp-career-board to translate interface text.
  4. Create a translation of a test job and check it on the front end.

Pro and languages

Pro adds boards, custom fields and AI features that have their own translation needs. See the Pro docs pages Multi-board, Field builder and AI features.

Currency and salary

A salary is stored as a number with a currency code. WPML and Polylang do not convert it, so a job shows the currency its employer chose.

Testing checklist

  • Switch the site language. The job list and job pages show the translated content.
  • Search in each language.
  • Apply to a translated job and check the confirmation email arrives in your language.
  • Open the Employer Dashboard in each language.

Where to go next

Privacy and GDPR

You can answer personal-data export and erase requests with WordPress's built-in privacy tools, and members can request their own export or delete their own account from their dashboard. This page shows what Career Board stores and how to handle each request. It is not legal advice.

What Career Board stores

Data Where What happens on erasure
User account WordPress users Removed when the account is deleted
Candidate profile: headline, location, open-to-work, profile visibility, profile resume data User meta Deleted
Saved jobs, companies and resumes User meta Deleted
Uploaded resumes and other private files Private uploads folder Deleted
Applications wcb_application posts Anonymised (see below)
Email history wcb_notifications_log table Deleted for the person, and pruned automatically after the retention period
Job view counts wcb_job_views table Stores a one-way hash of the visitor's IP address, not the address. Rows older than 90 days are pruned by default.
Privacy request log wcb_gdpr_log table Kept as a record that a request was handled

With Pro, resumes, job alerts, notification-bell alerts and app devices for members are also deleted on erasure. Pro's credit ledger is kept for accounting, but its rows lose their link to the person.

Applications are anonymised, not deleted

When a person is erased, their applications stay so employers' hiring records stay accurate. The job, status, status history and dates remain. The name becomes "Deleted candidate", and the email, cover letter, answers and every attached file are removed. The same happens to a guest's applications when the request is for the email address they applied with.

A ban on an account is kept as a safety record and is not lifted by an erasure.

Step 1 - Update your privacy policy

Career Board does not write your privacy policy. Add a paragraph that covers what you collect (names, emails, resumes, profile details, job postings and applications), why, and how a person can ask for an export or deletion. Tell members they can do this from Candidate Dashboard > Account > Settings > Privacy & My Data. If you use Pro AI features, name the AI provider you configured. If you take payments, name your payment provider.

The employer registration form shows a "By creating an account you agree to our Privacy Policy" line that links to the privacy page set under Settings > Privacy in WordPress.

Career Board does not add a consent checkbox to its forms. If your jurisdiction needs one, add it with a consent plugin, or add a required field through the form field filters wcb_candidate_form_fields and wcb_application_form_fields_groups.

Step 3 - Export requests

A member requests it. In the Candidate Dashboard, open Account > Settings > Privacy & My Data and click Request data export. WordPress emails the member to confirm. Once confirmed, the request appears in WordPress's privacy queue and you complete it from there.

You create it.

  1. Go to Tools > Export Personal Data.
  2. Enter the person's email address and send the request.
  3. WordPress emails the person a link to confirm.
  4. Once confirmed, click Send Export Link, or download the export yourself.

The export includes the person's applications, profile and saved items, and email history. Guests who applied with an email address are found by that address.

Step 4 - Erase requests

A member deletes their own account. Under Privacy & My Data, the member clicks Delete my account, enters their password, types DELETE and clicks Schedule deletion. The account is locked and signed out everywhere. It is deleted after a grace period of 14 days by default. Signing back in during that time and choosing Keep my account stops the deletion. A daily task deletes accounts whose date has passed. Administrator accounts cannot be deleted this way.

You can watch and manage these under Career Board > Settings > Privacy. The Pending account deletions card lists each member with the date and time left. Click Keep account to cancel a deletion for a member who contacts you.

You erase a person.

  1. Go to Tools > Erase Personal Data.
  2. Enter the person's email address and send the request.
  3. Once the person confirms, WordPress runs the erase, including the Career Board data described above.

Deleting a user under Users runs the same erase. Employers have no delete button in their dashboard, so use these tools for employers.

Job listings posted by an employer are not erased automatically by an erase request. Remove them yourself if needed. When a job is permanently deleted, its applications move to the Job removed status.

Step 5 - Retention

Under Career Board > Settings > Advanced, Keep Email History (days) sets how long the email log and notification history are kept. The default is 180 days and 0 keeps them forever. A daily task deletes older rows.

Applications are not deleted on a schedule, because they are the employer's hiring record. If your policy needs a limit, remove old applications yourself and describe the policy in your privacy notice.

Step 6 - Cookies and browser storage

Career Board does not set its own cookies. It uses WordPress's standard sign-in cookies. It also remembers a few display choices in the visitor's browser, such as the grid or list layout of the company directory and the open tab of the candidate dashboard. Cover these in your cookie notice as you would for any site.

Step 7 - Breach response

If you suspect a breach:

  1. Work out which accounts and files were exposed.
  2. Contain it. Reset admin and employer passwords and disable compromised accounts.
  3. Tell affected people and the regulator within the time your law requires. You can list accounts under Users, filtered by the Career Board roles.
  4. Fix the cause and keep a record of what happened and what you did.

Common mistakes

  • No consent step where your law needs one. Add your own.
  • Not naming your providers. Update the privacy policy when you add payment or AI providers.
  • Deleting rows by hand. Use the WordPress privacy tools so the Career Board data is erased consistently.
  • Forgetting the activity stream. With BuddyPress, Free posts an activity entry when a job is published straight away, and Pro can post more. Make sure your privacy notice covers it.

Where to go next

For Employers

How employers post jobs, review applications, and manage hiring.

Employer overview

You can post jobs, review applicants and run your public company page from one place, the Employer Dashboard.

What you can do

  • Post a job with a guided multi-step form or a single-page form.
  • Edit, close, reopen, resubmit and feature your jobs.
  • Review applications in a List or a Board (Kanban) view, rate applicants and keep private team notes.
  • Export a job's applicants to CSV.
  • Set up a public company profile with a live preview.
  • Bookmark jobs, companies and candidate resumes.
  • Change your display name, email and password, and turn off the optional emails you do not want.
  • Get emails for new applications, withdrawn applications and jobs that are about to end.

Get access

Register as an employer to get the Employer role. The role opens the Employer Dashboard, a single-page app with a left sidebar. Admins can also give the Employer role to any user from Users > Edit User in wp-admin.

Find your way around

At the top of the sidebar is your identity: your avatar (or company logo), your name, and "Employer · Company name". Click it to open your company profile. Below it:

  • Overview - stat tiles (Total Jobs, Live, Total Applications, New This Week), your recent applications and your active jobs.
  • Jobs
    • My Jobs - manage your job listings. The badge shows your total.
    • Post a Job - submit a new job.
  • Hiring
    • Applications - review applicants in List or Board view. The badge shows your total.
  • Company
    • Profile - set up your public employer page.
    • Public Page - opens your live company page in a new tab.
  • Credits - shown when the site charges credits. With WP Career Board Pro it is a tab for your balance, buying credits, receipts and history. Without Pro the sidebar shows only your balance.
  • Saved - Saved Jobs, Saved Companies and, when the site has resumes (Pro), Saved Resumes.
  • Account
    • Settings - display name, email, password and optional email preferences.
    • Notifications - shown when the site has the notification bell (Pro).

A + Post a Job button stays pinned at the bottom of the sidebar. On tablets and phones the sidebar collapses behind a menu button that shows the current section.

How applications reach you

When a candidate applies to one of your jobs, you see the application in the dashboard and get an email. Each application shows:

  • The applicant's name and email
  • The application status (Submitted, Reviewing, Shortlisted, Rejected, Hired, Withdrawn or Closed)
  • The date it was submitted
  • The job it belongs to

In this section

Post a Job

You can post a job in a few minutes from the Employer Dashboard. Click Post a Job in the sidebar (under Jobs), the + Post a Job button pinned at the bottom of the sidebar, or Post Your First Job on the Overview. The setup wizard also creates a standalone Post a Job page (/post-a-job/) with the same form.

Before you post

Log in as a user with the Employer role. If you are not logged in, the form asks you to sign in. If you are logged in without the Employer role, it links to the employer registration page. You need a company profile before you can post a new job.

Post a job step by step

The job form is a 4-step wizard.

Step 1 - Job Basics

  • Post to Board - shown only when the site has more than one board.
  • Job Title - the position name (required).
  • Job Description - the role, responsibilities and requirements (required). When the site has AI description tools, a Generate with AI button appears here.

Step 2 - Job Details

  • Salary Range - optional. Pick a currency, enter a minimum and maximum, and choose the period (Year, Month or Hour). Leave it blank to hide the salary from candidates.
  • Remote-friendly position - tick this for a remote job.
  • Application Deadline - filled in for you from the board's listing length. You cannot edit it in the form. Ask your site admin if you need a longer listing window.
  • Apply URL - optional. A full link starting with http:// or https:// where candidates apply on your own site. The public job page then shows an Apply on Company Site button in place of the on-site apply form.
  • Apply Email - optional. Shown as an Apply Email link on the public job page.

Step 3 - Classify Your Job

  • Category - the industry or function.
  • Job Type and Experience Level - pick from the lists your site offers.
  • Location - pick a location, or choose Other (enter manually). When the site requires a location (the default on new sites), a job needs a location or the Remote option before you can post it.
  • Skills / Tags - comma-separated. They help candidates find your job by keyword.

Step 4 - Preview & Submit

Review the details, then click Post Job. When you edit an existing job, the button reads Update Job.

When the site sells featured placement (Pro), this step also shows a checkbox such as "Feature this job: it lists first for 30 days (2 credits)". See Your Credit Balance.

After you submit

  • Moderation on (the default): you see "Job submitted for review. You'll be notified once it's approved." The job goes live when a moderator approves it.
  • Moderation off: the job is published straight away and you see "Job posted successfully!" with a link to the listing.

You get an email when a moderator approves or rejects a job. If the site charges credits and your balance is too short when the moderator approves, the job stays Pending and shows Awaiting payment in My Jobs until your balance covers it.

Edit a job

Open My Jobs and click Edit on the job. The form opens with the current details. Change what you need and click Update Job. A published job stays live while you edit it.

When a job ends

A job runs until its deadline. That is the site's listing length, 30 days by default, unless the board sets its own length.

On sites that end jobs at their deadline (the default on new sites), the job then leaves the job listings. Its page stays up and tells visitors it has expired, so links you shared keep working. Your dashboard shows it as Expired with a Reopen button, which starts a new listing period with a fresh deadline (the site may charge credits for it). You get a Job Ending Soon email 3 days before the deadline. On any site, a job stops taking applications once its deadline has passed. Applications you already received stay as they are, so you can keep reviewing them.

Close a job early

Use Close in My Jobs when the role is filled or cancelled. The job leaves the listings and stops taking applications. Every applicant you have not hired or rejected moves to Closed and gets one email saying the position is closed. You can reopen the job later, and the closed applications return to their earlier status.

Use a single-page form instead

If you want the whole form on one screen, use the Job Form (Single-Page) block or the [wcb_job_form_simple] shortcode. See Quick Job Form.

Manage your jobs

You can see every job you have posted in My Jobs and edit, close, reopen, resubmit or feature each one from there.

Open your jobs

  1. Open the Employer Dashboard page.
  2. Click My Jobs in the sidebar (under Jobs). The badge shows your total job count.
  3. Use the search box to find a job by title.

My Jobs and Applications work as soon as you have jobs on file, even without a company profile. You still need a company profile before you can post a new job.

Each row shows the job title, location, a status badge, a Featured badge when the job is featured, and an applicant count such as "3 applicants". Click the count to open that job's applications.

Filter by status

The pills at the top narrow the list: All, Live, Draft, Pending, Closed and Rejected. The Closed pill also includes expired jobs.

Job statuses

Status Meaning
Published (Live) The job is live on the board and visible to candidates
Draft Saved but not yet submitted
Pending Submitted and waiting for a moderator
Awaiting payment Approved, but your credit balance did not cover it. It goes live once you top up
Rejected A moderator declined the job. You can edit it and resubmit
Closed You closed it. It no longer takes applications and is hidden from the board
Expired It passed its deadline and no longer takes applications. Where the site ends jobs at their deadline, it also left the listings and its page says it has expired

Actions for each job

The buttons on each row change with the job's status:

  • View ↗ - opens the public job page in a new tab.
  • Edit - opens the job in the job form.
  • Pipeline - with Pro's Application Pipeline, opens that job's applicants in the pipeline. Hidden otherwise.
  • Feature - features a job so it lists first. It appears only when the site sells featured placement and the job is live and not already featured. You confirm the credit cost first. See Your Credit Balance.
  • Close - closes the job. You are asked to confirm.
  • Publish - sends a saved draft live, or to review when the site moderates jobs (drafts only).
  • Resubmit - sends a rejected job back for moderator approval (rejected jobs only). It returns to Pending. It does not publish directly.
  • Reopen - puts a closed or expired job back on the board with a fresh deadline. The site may charge credits for it.

Edit a job

  1. Click Edit on the job.
  2. The job form opens with the current details filled in.
  3. Make your changes and click Update Job.

A published job stays live while you edit it.

Close a job

Click Close when the role is filled or you want to pause. The job leaves the listings and stops taking applications. Every applicant you have not hired or rejected moves to Closed and gets one email saying the position is closed. Applicants you already decided on keep their status. When you reopen the job, the applicants that closing moved go back to their earlier status without another email.

When a job reaches its deadline

A job that passes its deadline stops taking applications. Applications you already received stay as they are.

On sites that end jobs at their deadline (the default on new sites), the job moves to Expired within the hour. Its page keeps working for people who saved or shared the link, and shows that the job has expired. You get a Job Ending Soon email 3 days before the deadline and a Job Expired email afterwards. Reopen the job to set a new deadline.

Review applications

You can review the applicants for each of your jobs in a List or a Board (Kanban) view, change each applicant's status, rate them and keep private notes for your team.

Open applications

  1. Open the Employer Dashboard.
  2. Click Applications in the sidebar (under Hiring). The badge shows your total applicant count.
  3. Pick a job in the job selector at the top. Until you pick one, the view asks you to select a job.

List view and board view

A List / Board toggle sits above the applicants.

  • List - applicants on the left, and the selected applicant's cover letter, application answers, resume and status on the right.
  • Board - a Kanban board with one column per status: Submitted, Reviewing, Shortlisted, Hired and Rejected. Drag a card to another column, or use the Move to menu on the card, to change the status. Press Enter or Space (or click) on a card to open the applicant's details. A note under the board counts applications that are not on it (closed, withdrawn or removed).

Both views are in the free plugin.

What you see for each applicant

  • The applicant's name, with initials
  • Their email address (in the detail panel)
  • The job they applied to
  • The date they applied
  • Their current status

Filter by status

The pills above the list narrow the applicants for the selected job: All, Submitted, Reviewing, Shortlisted, Rejected and Hired. Each pill shows a live count for the whole job, not just the applicants loaded so far.

The dashboard loads 50 applicants at a time. Click Load more applicants at the end of the list for the next 50.

Application statuses

Status When to use it
Submitted The application arrived and you have not reviewed it
Reviewing You are looking at this candidate
Shortlisted The candidate is worth moving forward
Rejected You are no longer considering this applicant
Hired The offer was accepted and the position is filled
Withdrawn The candidate withdrew. Read-only: you cannot change it
Closed You closed the job before deciding on this applicant. Read-only

Candidates see Rejected as "Not selected" and Closed as "Position closed". Withdrawn, Closed and removed-job applications are final. Only reopening the job gives Closed applicants back their earlier status.

Change an applicant's status

In List view, use the status control in the detail panel. In Board view, drag the card to another column or pick a status in its Move to menu. The change saves at once with no page reload, and the candidate is notified ("Status updated. The candidate has been notified."). Setting the status the applicant already has changes nothing and sends nothing ("No change. The candidate was not notified.").

Setting Rejected sends the candidate a "not selected" email in place of the generic status email. Guests who applied with an email address are notified too. If an applicant left no email address, you see "Status updated. This applicant left no email address, so they were not notified."

Rate applicants and keep notes

Open an applicant and find Your rating and notes. Click a star to rate from 1 to 5, and click the same star again to clear it. Add notes for your hiring team below the stars. You can delete your own notes. Only the job's employer and site staff see ratings and notes. Candidates never do, and they are removed if the application is later anonymised.

Export applicants to CSV

Click Export CSV above the applicants to download the selected job's applicants as a spreadsheet. See Applicant CSV Export.

Rank applicants by AI fit (Pro)

With WP Career Board Pro and an AI provider set up, a Rank by AI fit button appears above the applicant list. It scores applicants against the job and shows an AI fit score on each one. Read the full guide in the Pro documentation page "AI features".

Custom hiring stages (Pro)

With WP Career Board Pro you can define your own hiring stages, for example Screening, Interview and Offer. See Application Pipeline.

Read the resume

The detail panel shows the applicant's cover letter and their answers to your screening questions. When the applicant attached a resume, it shows View Resume and Download Resume links. Resume files are private: only the candidate, site staff and the employer the candidate applied to can open them.

Contact applicants

Use the applicant's email address to reach out from your own mail client. The free plugin has no built-in messaging.

When a candidate withdraws

You get an email, and the application stays in your list with a Withdrawn badge. You cannot change its status. The candidate can apply again later, which shows up as a new application.

Who cannot apply

Employers do not see an Apply button on jobs, and nobody can apply to their own job.

Company profile

You can give candidates a public page about your company, with your open jobs listed on it.

What the company page shows

  • Company name, logo and tagline
  • Website, LinkedIn and X / Twitter links
  • An About section with your description
  • Company Details: industry, company size, type, year founded and headquarters
  • Open Positions: your jobs that are still taking applications

Candidates can click through from the page to any of your jobs.

Set up your profile

  1. Open the Employer Dashboard.
  2. Click Profile in the sidebar (under Company).
  3. Fill in your company details. A Live Preview pane shows how the page will look as you type.
  4. Click Save Profile. You see "Profile saved successfully."

To see the published page, click Public Page in the sidebar. It opens your company page in a new tab.

Profile fields

Field Required Notes
Company Name Yes Shown as the page title
Company Logo No JPEG, PNG, GIF or WebP. You can upload it after the profile is saved once
Tagline No A one-line description shown on your company page
About the Company No Rich-text description
Industry No Your industry
Company Size No 1-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000 or 5,000+ employees
Company Type No Public Company, Privately Held, Self-Employed / Freelance, Non-profit, Government Agency, Educational Institution or Partnership
HQ Location No For example San Francisco, CA
Founded Year No A year, such as 2012
Website No Shown as a link
LinkedIn No Your company LinkedIn URL
X (Twitter) No Your company X / Twitter URL

Only Company Name is required. You can save with just the name and fill in the rest later.

Your company page address

The address is built from your company name: yourdomain.com/companies/your-company-name/.

Who can see it

Anyone can see your company page, with or without an account. The Company Archive block (the Find Companies page from the setup wizard) lets visitors browse all companies on the board.

Application pipeline

Pro feature - requires WP Career Board Pro.

You can move applicants through your own hiring stages, for example Screening, Interview, Offer, Hired and Rejected, on a Kanban board for each job.

Free and Pro

Free Pro
Stages Fixed: Submitted, Reviewing, Shortlisted, Hired, Rejected Stages you define for each board
Views List and Board (Kanban) in the employer dashboard The Application Kanban block, with one column per stage
Reach Applications view A Pipeline button on each job row in My Jobs

The List and Board views are in the free plugin. See Review Applications.

Open a job's pipeline

With Pro active, each job in My Jobs has a Pipeline button. It opens that job's board. Without Pro the button is not shown.

Set up stages

Stages belong to a job board. Go to Career Board > Settings > Boards and click Manage on a board to add, rename, recolor, reorder or delete its stages. Every change saves at once.

A stage can carry the outcome Hired or Rejected. When a card moves into one, the application's status becomes Hired or Rejected and the candidate gets the usual message.

For stage settings, permissions and the developer reference, read the Pro documentation: Application Pipeline, "Configuring pipeline stages".

Find resumes

Pro feature - requires WP Career Board Pro.

You can search the public resumes of candidates without waiting for them to apply.

What Pro adds

  • A Find Candidates page. The setup wizard creates it at /find-candidates/.
  • Search and filters for skills, experience, location and candidates who are open to work.
  • A candidate only appears when they have turned on the Public toggle on their resume.
  • The site owner chooses who can browse the directory: everyone, logged-in members only, or approved employers only.
  • A Resume Map block that pins public resumes on a map.

Save resumes

Resumes you save appear under Saved > Saved Resumes in your Employer Dashboard.

Read the full guide

The Pro documentation covers the page setup, filters and map in "Resume Builder", page "Find Candidates and the resume map".

Quick job form (single-page)

You can let employers post a job from one screen, with no wizard steps. Place the form on any page, in a sidebar or modal, or in a page builder.

It is a one-screen alternative to the 4-step form in Post a Job. Both forms use the same wcb_job_form_fields filter, so custom fields you add appear on both.

The person posting must be logged in as a user with the Employer role. Anyone else sees a sign-in or registration message in place of the form.

Add the form

With the block

In the WordPress editor, add the Job Form (Single-Page) block. It has these settings:

Setting Type Default What it does
boardId integer 0 Uses a specific board. 0 uses the default board
compact boolean false Narrows the form for sidebars and modals

With a shortcode

In a page builder or the classic editor, use the shortcode. The attribute names match the block settings.

[wcb_job_form_simple]
[wcb_job_form_simple boardId="42"]
[wcb_job_form_simple compact="true"]

For Elementor, Divi, Bricks and Beaver Builder, see Page-builder embeds.

Fields

Field Required Note
Post to Board No Shown only when the site has more than one board
Job Title Yes
Job Description Yes Rich text
Category No
Job Type No Pick from the lists your site offers
Location No A location, or Other (enter manually)
Experience No Pick from the lists your site offers
Skills / Tags No Comma-separated
Salary Range No Currency, minimum, maximum and period (Year, Month or Hour)
Remote-friendly position No Tick for a remote job
Application Deadline No Filled in for you from the board's listing length. You cannot edit it
Apply URL No External apply link. It must start with http:// or https://
Apply Email No An address candidates can email to apply
Custom fields Depends Whatever your wcb_job_form_fields filter adds. See Custom fields

When the site sells featured placement (Pro), a checkbox lets the employer feature the job.

What happens on submit

The form posts to POST /wcb/v1/jobs, the same route as the multi-step form.

  • When the site moderates jobs, the job goes to Pending. Otherwise it is published.
  • The form has no preview step. The employer can edit the job afterwards from My Jobs.
  • Editing always uses the 4-step form in the Employer Dashboard.
  • Company logos and banners are not part of this form. Employers set them in the company profile.

Applicant CSV export

You can download applications as a UTF-8 CSV spreadsheet, one row per applicant, ready for Google Sheets, Excel or your ATS. Employers export from their dashboard. Site admins can also export from wp-admin.

Employers: export from your dashboard

  1. Open Employer Dashboard > Applications and select a job.
  2. Click Export CSV above the applicants.

The browser downloads every applicant for that job, not just the 50 loaded on screen. Only the job's owner and site staff can export it.

Admins: export from wp-admin

Go to Career Board > Applications in wp-admin.

Export everything that matches:

  1. Narrow the list with a status tab, a search, or by clicking a job title in the Job column. A "Job: ..." chip appears. Click its x to clear it.
  2. Click Export all matching to CSV above the table. Every matching application is exported across all pages, not just the rows on screen.

Export only some rows:

  1. Tick the row checkboxes.
  2. Choose Export to CSV from Bulk actions and click Apply.

The browser downloads a file named wcb-applications-YYYY-MM-DD-HHMMSS.csv.

Columns

Employers and admins get the same columns, in this order.

Column What it holds
ID The application ID
Job ID The ID of the job, for matching back to your jobs
Job Title The job's title
Applicant Name The candidate's display name, or the guest name for a guest application
Applicant Email The candidate's email, or the guest email
Status The application status: Submitted, Reviewing, Shortlisted, Rejected, Hired, Withdrawn, Closed or Job removed
Submitted The date and time the application was submitted
Cover Letter The cover letter text. Line breaks are kept
Resume URL A link to the uploaded resume file, when one was attached. The link works only for people allowed to open the file
Screening Answers The applicant's answers to the job's screening questions, one Question: answer per line

Encoding

The file is UTF-8 with a byte-order mark, so Excel shows non-ASCII names correctly without the import wizard.

A cell that starts with =, +, - or @ is written with a leading apostrophe. A cover letter such as =HYPERLINK(...) therefore opens as text and does not run as a spreadsheet formula.

Permissions

The wp-admin export includes only applications the current user can edit. Admins can export all applications.

Your credit balance

Pro feature - the Credits tab, buying credits and receipts come with WP Career Board Pro.

If your site charges credits to post jobs, you can see your balance in the Employer Dashboard, buy more credits and feature a job. The site owner sets the prices. Setup is in the admin credit guide.

See your balance

When credits are on, the sidebar shows a Credits item with your balance as its badge. With Pro, click it to open the Credits tab. Without Pro the sidebar shows only the balance.

How credits are spent

  • Credits are held when you submit a job to a board that charges.
  • They are spent when the job goes live.
  • They come back if the job does not go live, for example when a moderator rejects it.

If your balance is too short, the job is not created. You see "Insufficient credits. This board requires N credits but your balance is M." and a Buy credits button that opens the Credits tab.

If a moderator approves your job while your balance is too short, the job stays Pending and shows Awaiting payment in My Jobs until your balance covers it.

If your site sells featured placement, you can spend credits to make a job list first. There are two ways:

  • When you post - on the last step of the job form, tick "Feature this job: it lists first for N days (X credits)". If the featuring charge fails, the job is still posted and you are told why it was not featured.
  • Later - click Feature on a live job in My Jobs. You confirm the cost ("Featured jobs list first. This uses N credits from your balance.") and the job gets a Featured badge.

The checkbox and the Feature button appear only when the site prices featuring. Featured status ends after the length of time the site owner set (30 days by default). The job stays live and only loses the boost. Click Feature again to renew it.

Read more

The Pro documentation covers the rest, under the page names "Credit system - overview", "Native Buy Credits checkout" and "Featured upgrade".

Page-builder embeds

You can place any WP Career Board block in Elementor, Divi, Bricks, Beaver Builder or the classic editor with a shortcode. Each shortcode takes the same attributes as its block, so you can scope it the same way you would in the block editor.

Shortcode reference

Every WP Career Board (Free) block has a shortcode.

Block Shortcode
Job Listings [wcb_job_listings]
Job Search Hero [wcb_job_search_hero]
Job Form [wcb_job_form]
Job Form (Single-Page) [wcb_job_form_simple]
Job Search [wcb_job_search]
Job Single [wcb_job_single]
Job Filters [wcb_job_filters]
Featured Jobs [wcb_featured_jobs]
Recent Jobs [wcb_recent_jobs]
Job Stats [wcb_job_stats]
Company Archive [wcb_company_archive]
Company Profile [wcb_company_profile]
Candidate Dashboard [wcb_candidate_dashboard]
Employer Dashboard [wcb_employer_dashboard]
Employer Registration [wcb_employer_registration]
Similar Companies [wcb_similar_companies]
Job Alerts CTA [wcb_job_alert_card]
Application widgets [wcb_widget id="..."]

[wcb_registration] also works as an older name for [wcb_employer_registration]. Use [wcb_employer_registration] on new pages.

Pass attributes

Use the block's attribute names. Shortcode attributes are lowercased by WordPress, and the plugin maps them back to the block's names. For example:

[wcb_job_listings perPage="6" boardId="42" layout="list"]

This gives the same result as the Job Listings block with perPage 6, boardId 42 and layout list.

Common patterns

Show one board's jobs

[wcb_job_listings boardId="42" perPage="10"]

This lists only jobs on board 42. Use it on a board-specific landing page.

Filter by custom meta

Register the meta key with the wcb_jobs_allowed_meta_filters filter first. Then scope a listing by it:

[wcb_job_listings metaFilter="industry:fintech" perPage="6"]

Embed a compact job form

[wcb_job_form_simple compact="true"]

See Quick Job Form for the settings.

Show one application widget

The widgets on the Application Editor also work as shortcodes. Widget IDs start with application/. For example, to show an applicant card:

[wcb_widget id="application/applicant-card" application_id="987"]

Where to paste the shortcode

  • Elementor - use the Shortcode widget.
  • Divi - use a Code module.
  • Bricks - use the Shortcode element.
  • Beaver Builder - use the HTML module.
  • Classic editor - paste it into the content.

Troubleshooting (employers)

Answers to common employer questions. If you run the site, see the admin troubleshooting page in the admin guide.

"I posted a job but it does not show up"

Check these in order:

  1. Is it pending approval? Open Employer Dashboard > My Jobs. If the job shows Pending, the site holds new jobs for a moderator. Wait for approval or ask the site admin. If it shows Awaiting payment, your credit balance did not cover it. Top up and it goes live.
  2. Is it past its deadline? A job that passes its deadline stops taking applications, and on most sites it leaves the listings. It shows as Expired. Click Reopen for a new listing period.
  3. Did the submit finish? Your dashboard lists every job you created. If the job is not there, the form did not save. Submit it again.

"Applicants are not coming in"

  • Find the job on the site. Open the job listings page (/find-jobs/ on a default install) in a private window. If you cannot find your job there, candidates cannot either.
  • Share the job link. Post it on LinkedIn, your company channels and your own site.
  • Check the deadline. A job past its deadline takes no applications.
  • Use common search terms. "Senior Frontend Engineer" is easier to find than a job filed under a vague category.

"I get 'Insufficient credits' when I post"

The site charges credits per posting. Your balance shows in the Credits item of the sidebar.

  • Buy more. Click Buy credits and complete the checkout. Your balance updates when the purchase clears.
  • Wait for a pending payment. If the payment is still pending (for example a bank transfer), credits are not added until it clears. If you paid and the credits do not appear, send the site admin your order or receipt number.
  • Try another board. Boards can have different prices. Post to a cheaper board if it suits the role.

"My company profile does not save"

  • Edit from the dashboard. Use Employer Dashboard > Profile, then Save Profile. The public company page is read-only.
  • Enter a company name. It is the only required field. If it is empty, the save stops with "Company name is required."
  • Save the profile before you upload a logo. The logo upload works only after the profile has been saved once.

"I do not get emails about new applications"

  • Check your spam folder.
  • Check the email on your account. Open Employer Dashboard > Settings and look at the Email field. Emails go to that address.
  • Check your email preferences. In Settings > Email Notifications you can turn off optional emails such as Job Ending Soon. Emails about your account, applications and payments are always sent.
  • Ask the site admin to check email sending. They can confirm that the site sends email and that the "Application Received (Employer)" email is enabled under Career Board > Settings > Emails.

"The 'Apply on Company Site' button is missing"

  • Use a full address. The Apply URL must start with http:// or https://.
  • Look at the live job page. The button appears on the public job page, not in the form preview.

"Candidates say the apply form is broken"

  • They may need to log in. If the site has Require login to apply on, the job page shows Sign in to apply in place of the form.
  • They may be an employer. Employers do not see an Apply button, and nobody can apply to their own job.
  • The site may use anti-spam. Ad blockers or strict browser settings can block a captcha script (Turnstile or reCAPTCHA). Ask the candidate to try another browser.
  • The resume may be too large. The site sets a maximum resume size, 5 MB by default. Ask the candidate to shrink or re-export the file.

"I cannot see the Pro features"

The site admin must install and activate WP Career Board Pro and activate its license under WP Career Board > Settings > License. You cannot turn Pro on from your dashboard.

What to send your site admin

Send them:

  1. The address of the page where the problem happens.
  2. A screenshot of what you see and what you expected.
  3. The date and time it happened.
  4. The email address of your account.
  5. If it applies, your order number, the job title or the candidate's email.

Do not send screenshots of payment details or sensitive HR data.

For Candidates

How candidates find jobs, apply, and manage their profile.

Candidate overview

You can search and filter jobs, apply with a resume and cover letter, and follow every application from your own dashboard.

What you can do

  • Search and filter job listings.
  • Save jobs and companies to review later. With Pro you can also save candidate resumes.
  • Apply with a cover letter, a resume file (PDF, DOC, or DOCX) and answers to the employer's screening questions.
  • Follow each application and its status from the dashboard.
  • Get emails when an application status changes.
  • Edit your profile and update your display name, email and password.
  • Choose which optional emails you receive, and delete your own account.

With WP Career Board Pro you can also:

  • See Recommended for you jobs on the dashboard Overview.
  • Build resumes in the resume builder.
  • Save a search as a job alert and get emailed about new matching jobs.
  • Read your notifications in the dashboard Notifications tab.

Register

  1. Open the site's registration page (its default title is Employer Registration, but it serves both roles).
  2. Choose Find a Job.
  3. Enter your first name, last name, email address and a password of at least 8 characters.

After you register you are signed in and taken to your Candidate Dashboard. If the site asks new accounts to confirm their email first, you stay signed out until you open the link in the confirmation email. If the form says registration is closed, the site owner has turned off Anyone can register in WordPress Settings > General.

Employers choose Hire Talent on the same page.

Who can apply

By default any signed-in member can apply to jobs, save jobs and use the candidate dashboard. You do not need a separate Candidate role. Accounts created through Find a Job get the Candidate role.

The site owner can restrict this to the Candidate role with Require Candidate Role under Career Board > Settings > Sign-ups. Then only users with the Candidate role can apply and use the candidate dashboard.

The candidate dashboard

The sidebar shows your name and Candidate. It contains:

  • Overview
  • My Applications
  • My Resumes and Job Alerts (Pro)
  • Saved Jobs, Saved Companies, and Saved Resumes (Pro)
  • Profile and Settings
  • Notifications (Pro)

Apply without an account

Unless the site turns on Require login to apply, you can apply as a guest with your name and email. You get a confirmation email and status emails, but no dashboard. If you register later with the same email, your earlier guest applications appear in your dashboard. See Apply as a guest.

In this section

Finding jobs

You can search, filter and sort the job board without reloading the page, then open any job to read it and apply.

Browse the job board

Open the Find Jobs page (/find-jobs/ on a default install). It lists published jobs as cards. Each card can show:

  • Job title
  • Company name and logo
  • Badges for Featured, Remote, job type, experience level and location
  • A short excerpt
  • Salary, if the employer entered one
  • The application deadline, or a closed label
  • How long ago the job was posted

Click a card or View Job to open the full job page. Use the layout buttons above the results to switch between list and grid view. The site owner sets how many jobs load at a time.

Search by keyword

Type in the Search jobs box. Jobs must contain every word you type in the title, the description or the company name. Words of one letter are ignored, and only the first six different words are used. Results update without a reload.

Filter jobs

The Filters panel sits beside the results. Depending on how the site owner set it up, it can include:

Filter What it does
Job type Shows jobs of the types you tick
Experience Shows jobs at the experience levels you tick
Category Shows jobs in the categories you tick
Tags Shows jobs with the tags you tick
Location Remote only shows only jobs marked remote
Job board Shows jobs from the boards you tick, when the site has more than one board
Salary Two sliders for a minimum and maximum. See Salary range filter

The options in each list are the ones your site has set up. If the site uses the separate Job Filters block instead, it shows drop-down lists for category, job type, location and experience, and two number fields for salary.

You can tick several values in one filter. A job matches if it has any value you ticked in a filter, and it must match every filter you use. Each active filter appears as a removable pill above the results. Click Clear all to remove them all. Links that carry filters in the address bar open with those filters already applied.

On small screens the filter panel collapses. Use its toggle to open it.

Sort

Use the Sort jobs menu above the results:

  • Recommended - best match while you are searching, otherwise the site's default order
  • Newest first
  • Closing soonest - jobs already past their deadline come last
  • Highest salary - each job's top salary figure converted to a yearly amount
  • Oldest first

Featured jobs come first with Newest first and when you are searching.

Load more

Click Load more jobs at the bottom to show the next set.

Browse by tag or category

Tags on a job page link to a page that lists only jobs with that tag. Categories, job types, locations and experience levels have the same kind of page.

Read a job

The job page shows:

  • The full description
  • Job details such as work mode, salary, and the Apply By date when the employer set a deadline
  • Company information
  • Apply Now, or Apply on Company Site when the employer applies through their own site

A job that has expired or was closed shows a notice, no apply button, and up to three open jobs you might like instead.

With WP Career Board Pro and AI matching set up, your Candidate Dashboard > Overview shows a Recommended for you list. Each card shows a match percentage, the job title, the company and the location.

Save a job

Sign in, then click the bookmark icon on a job card, or Save Job on the job page. Saved jobs appear under Candidate Dashboard > Saved Jobs. See Saved jobs.

Applying for jobs

You can apply from the job page in a short form that slides in from the right. You do not leave the page.

Before you apply

You can apply as a guest or as a signed-in member. Two site settings can change this:

  • Require login to apply - the job page shows Sign in to apply instead of the form.
  • Require Candidate Role - only accounts with the Candidate role can apply.

Members who post jobs (employers) cannot apply. Nobody can apply to their own job.

Some jobs send you to the employer's own site. Those show Apply on Company Site instead of Apply Now.

How to apply

  1. Open a job page.
  2. Click Apply Now. The Apply for this job panel opens.
  3. Fill in the form.
  4. Click Submit Application.

Form fields

Field Notes
Your Name and Your Email Shown to guests and required. Signed-in members do not see these fields
Select Resume Signed-in members with Pro can pick a saved resume. Choose Upload a different file instead to upload a file
Resume Upload a PDF, DOC or DOCX file. The default size limit is 5 MB, and the site owner can raise it up to 20 MB. A resume is required unless the site owner turns that off
Cover Letter Optional
Screening questions Shown when the employer added questions to the job. Answer the required ones to submit

If you pick a resume you built in the resume builder and it has no uploaded PDF, Pro creates a PDF and attaches it for you.

Write your cover letter with AI (Pro)

When Pro AI is set up, a Write with AI button appears next to the cover letter. Click it to have the assistant draft a letter, then edit the text before you submit.

After you apply

  1. You get a confirmation email.
  2. The employer gets an email about your application. If the site has turned on the AI notice, a short line above Submit Application says employers may use AI to help review applications.
  3. Signed-in members see the application under Candidate Dashboard > My Applications with the status Submitted.
  4. With Pro, signed-in members can click Get notified about similar jobs. It saves a daily job alert using that job's title as the keyword, plus its category, job type and remote setting.

Withdraw an application

  1. Go to Candidate Dashboard > My Applications.
  2. Find the application.
  3. Click Withdraw.

The application stays in your list marked Withdrawn, and the employer gets an email. You can withdraw until the application has an outcome: hired, not selected, or position closed. After you withdraw you can apply to the same job again.

The site owner can turn withdrawing off with Allow Withdraw under Career Board > Settings > Applications. When it is off, the Withdraw button does not appear.

Apply without an account

As a guest you enter your name and email in the form. You get a confirmation email and status emails, including a "not selected" email if the employer declines you. You cannot track or withdraw the application. A guest can send 10 applications an hour from one connection, and cannot apply to the same job again with the same email within 24 hours.

To track your applications, register as a candidate before you apply. See also Apply as a guest.

My applications

You can see every job you applied for, its current status, and withdraw an application you no longer want to pursue.

Open your applications

  1. Go to the Candidate Dashboard page.
  2. Click My Applications in the sidebar.

The list shows newest first, 50 at a time. Click Load more applications for older ones. The counts on the Overview cover all your applications.

Each row shows:

  • The job title, linked to the job page, and the company name
  • The application date
  • A status badge
  • A Withdraw button, when withdrawing is allowed for that application

Application statuses

Status What it means
Submitted The employer received your application and has not reviewed it yet
Reviewing The employer is looking at your application
Shortlisted The employer is interested
Not selected The employer is no longer considering your application
Hired You got the job
Withdrawn You withdrew this application
Position closed The employer closed the job before deciding
Job removed The job was deleted. Your application stays in your history, and a Remove button lets you delete the row

You get an email when the status changes to Reviewing, Shortlisted, Not selected, Hired or Position closed.

Withdraw an application

  1. Find the application in the list.
  2. Click Withdraw.

The application stays in your list marked Withdrawn, and the employer gets an email. You can withdraw until the application has an outcome: hired, not selected, or position closed. After you withdraw you can apply to the same job again.

The button only appears when the site allows withdrawing. The site owner can turn it off with Allow Withdraw under Career Board > Settings > Applications.

Overview tab

Overview is the first tab of the dashboard. It shows:

  • Cards with your number of applications, shortlisted applications and saved jobs, plus your resume count
  • With Pro, a Job Alerts card that opens the alerts tab
  • Your recent applications and recently saved jobs, each with a View all link
  • With Pro AI matching, a Recommended for you list

Saved jobs

You can save jobs, companies and (with Pro) candidate resumes to come back to later. Saving needs a signed-in account.

Save a job

  • On the job board, click the bookmark icon on a job card.
  • On a job page, click Save Job.

Click again to unsave. Any signed-in user can save jobs, and you do not need the Candidate role unless the site owner turned on Require Candidate Role.

See your saved jobs

  1. Open the Candidate Dashboard.
  2. Click Saved Jobs in the sidebar.

Each saved job shows the job title, company, location and job type, with a View Job button and a Remove button. A job that was deleted is no longer listed.

Remove a saved job

Click Remove on the job. Any application you already sent is not affected.

Deadline reminders

If a job you saved has an application deadline and you have not applied, you get a reminder email 3 days and 1 day before the deadline. You can turn this off under Candidate Dashboard > Settings > Email Notifications. See Profile, account and notifications.

Saved companies and saved resumes

The Saved section of the sidebar lists your bookmarks:

  • Saved Jobs - jobs you saved.
  • Saved Companies - companies you bookmarked from the company directory.
  • Saved Resumes - with WP Career Board Pro, resumes you bookmarked from a resume page. This tab appears only when Pro is active.

Each list has a Remove button for every item.

Resume builder

Pro feature - Requires WP Career Board Pro.

You can build one or more resumes on the site, make them public or private, and pick one when you apply for a job.

Manage your resumes

Open Candidate Dashboard > My Resumes.

From this tab you can:

  • Click + New Resume, enter a title and click Create.
  • Click Upload CV to add a PDF, DOC or DOCX file as a resume.
  • Click Edit to open a built resume in the resume builder.
  • Click View to see a built resume, or Open PDF to open an uploaded one.
  • Click Re-upload PDF to replace an uploaded PDF.
  • Click Delete, then Confirm, to remove a resume.

The number of resumes you can keep is limited. The site owner sets the limit in Max Resumes Per Candidate under Career Board > Settings > Resumes, and the default is 2. The tab shows the limit and disables + New Resume when you reach it.

Build a resume

The builder is a set of sections you open and close by clicking the section header. At the top you can:

  • Switch the Public checkbox. A public resume appears in the candidate directory and search. A private resume is visible only to you and to employers you apply to.
  • Click Save Resume to save your changes. A "Resume saved!" message confirms it.

Below that, fill in:

  • Professional Summary
  • Years of experience, which the candidate directory uses for its experience filter
  • Open to new opportunities, which puts you in the directory's "Open to work" filter

Then add entries in these sections:

Section Fields
School School name, certificate or qualification, field of study, start and end date, grade, description
College / University Institution, degree type, field of study, start and end date, GPA, description, achievements
Work Experience Company, job title, employment type, location, start and end date, Currently Working Here, description, skills used
Certifications Certificate name, issuing body, issue and expiry date, credential ID, credential URL
Skills Skill and proficiency level (Beginner, Intermediate, Advanced or Expert)
Languages Language and proficiency level (Basic, Conversational, Fluent or Native)
Portfolio / Links Label and URL

To add an entry, open a section, click Add Entry, fill in the fields and click Done. Use the edit and remove icons on an entry to change or delete it. Click Save Resume when you finish.

Use a resume when you apply

When you apply for a job, pick a saved resume in Select Resume, or choose Upload a different file instead. If the resume has no uploaded PDF, Pro creates one and attaches it.

To let employers find you, turn on Public in the builder. Public resumes appear on the site's Find Candidates page. The site owner chooses who can browse that page.

Job alerts

Pro feature - Requires WP Career Board Pro.

You can save a job search as an alert and get an email when new jobs match it. Signed-in members and, if the site allows it, visitors without an account can set up alerts.

Create an alert

From the Find Jobs page

  1. Search and filter the job board until the results show what you want.
  2. Click Alert me in the toolbar above the results.

The alert saves your keyword and the filters you have on, with a daily frequency. The button changes to Alert saved. You can change the frequency later from your dashboard.

Not signed in? When the site owner allows guest alerts, an email field appears next to the button. On phones, the field opens the first time you tap the button.

  1. Type your email address and click Alert me. The button reads Check your email to confirm.
  2. Open the email with the subject Confirm your job alert and click Confirm my job alert.

Nothing is sent until you confirm. If you did not ask for the alert, ignore the email.

After you apply

Signed-in members can click Get notified about similar jobs after applying. It saves a daily alert that uses the job's title as the keyword, plus its category, job type and remote setting.

Manage your alerts

Open Candidate Dashboard > Job Alerts. Each alert shows its keyword and filters. You can:

  • Change the frequency in the drop-down.
  • Click Delete to remove the alert.

The tab shows how many alerts you have, and your Overview has a Job Alerts card that opens the tab.

Each person can keep a limited number of alerts. The site owner sets the limit under Career Board > Settings > Job Alerts, and the default is 10.

Frequency

Frequency When you get an email
Instant When a matching job goes live
Daily A daily email listing matching jobs posted in the past day
Weekly A weekly email, sent on Mondays, listing matching jobs posted in the past week

You only get a daily or weekly email when at least one job matches.

What an alert matches

A new job matches when it fits every part of your alert:

  • Keyword - every word of your search appears in the job's title, description or company name.
  • Category, job type, location, experience level and tags - the job has one of the values you chose.
  • Job board - the job is on the board you searched.
  • Salary - the job's pay range overlaps your minimum and maximum. The alert compares the salary numbers as entered and does not convert between hourly, monthly and yearly pay or between currencies. Jobs with no salary still match.
  • Remote only - the job is marked remote.

The alert email

The email is titled New jobs matching your alert by default and lists the matching jobs with links. Every email has an Unsubscribe from this alert link, and mail apps that support it show an Unsubscribe button. Opening the link removes that alert.

Job alert emails are one of the optional emails. To stop all of them, untick Job Alert Digest under Candidate Dashboard > Settings > Email Notifications. See Profile, account and notifications.

The site owner sets the sender name and address for alert emails under Career Board > Settings > Emails in the Sender card.

For site owners

Under Career Board > Settings > Job Alerts you can:

  • Turn Guest alerts on or off. It lets visitors without an account save an alert with their email.
  • Set Alerts per person, from 1 to 100. It is the most alerts one member or one email address can have.
  • See every saved alert with its subscriber, search, frequency, last sent date, and whether it is active or waiting for email confirmation.

Salary range filter

You can narrow the job board to jobs whose pay falls inside a range you set.

Where it is

On the Find Jobs page, open the Filters panel and go to Salary. It has a Minimum slider, a Maximum slider and a Reset button.

If your site uses the separate Job Filters block, salary is two number fields instead: Minimum salary and Maximum salary.

Use it

  1. Move Minimum to the lowest pay you want. The sliders run from 0 to 500,000 in steps of 5,000.
  2. Move Maximum to the highest pay you want. The far right end reads Any, which means no upper limit.
  3. The listings update without a page reload.

Your range shows as a pill above the results, such as "$80k+" or "Up to $120k". Click the pill's close button, or Reset, to clear it.

The filter compares pay per year, the same way the Highest salary sort does: hourly pay counts as 2,080 hours a year and monthly pay as 12 months. A job paying 40 per hour (about 83,000 a year) matches a minimum of 80,000; a job paying 3,000 a month (36,000 a year) does not.

The slider labels use the site's default currency, set under Career Board → Settings → Jobs → Default Salary Currency. While a salary filter is on, only jobs paid in that currency match, because the plugin has no exchange rates to convert with. Each job card still shows the job's own currency.

Job alerts that include a salary range use the same rules, so an alert sends the same jobs the saved search showed.

Apply as a guest

You can apply to a job with just your name, email and a resume, without creating an account. This works unless the site turned on Require login to apply. In that case the job page shows Sign in to apply.

Apply as a guest

  1. Open a job page.
  2. Click Apply Now.
  3. Enter Your Name and Your Email.
  4. Click Click to upload resume and choose a PDF, DOC or DOCX file. The default size limit is 5 MB, and the site owner can raise it up to 20 MB.
  5. Optional: write a cover letter.
  6. Click Submit Application.

The employer sees your name, email, cover letter and resume file in their dashboard.

Is a resume required?

It depends on the site. By default a resume is required, and you cannot submit without a file. If the site owner turned the requirement off, the field is marked (optional) and you can submit without one.

Emails you get

  • A confirmation email when you apply.
  • An email when the employer changes your status, including a "not selected" email if you are not chosen.

Limits

  • You cannot apply to the same job again with the same email within 24 hours.
  • One connection can send 10 guest applications an hour.
  • You cannot withdraw a guest application, and you have no dashboard to track it.

Your application is stored against your email address. If you later create an account with the same email, your earlier guest applications are linked to the new account when it is created, and they appear in My Applications. There is nothing to request.

Linking happens only at account creation and only for the exact email you applied with. If you already had an account when you applied as a guest, or you register with a different email, those applications are not moved. Sign in before you apply to keep everything in one place.

To get a copy of your data or have it deleted, ask the site owner to run a personal-data request for your email address. Guest applications are found by email. The site owner can follow GDPR and privacy.

Accepted files

Format Accepted
PDF Yes
DOC Yes
DOCX Yes
ODT, RTF, TXT No. Save as PDF first
Images (JPG, PNG) No. Convert to PDF

Troubleshooting (candidates)

Fixes for common candidate problems. If you are an employer, see the employer troubleshooting guide.

I applied but heard nothing

Open Candidate Dashboard > My Applications and check the status:

  • Submitted - the employer has your application and has not acted yet.
  • Reviewing - the employer is looking at it.
  • Shortlisted - you are under consideration.
  • Hired - you got the job.
  • Not selected - the employer is no longer considering you.
  • Withdrawn - you withdrew it.
  • Position closed - the employer closed the job before deciding. You get an email when this happens.
  • Job removed - the job was deleted. Your application stays in your history.

If a signed-in application is not in the list, it did not submit. Apply again.

The Apply button is missing

  • The job has expired or was closed. The page shows a notice instead of the button.
  • The site requires an account. If the page shows Sign in to apply, sign in or register first.
  • The site requires the Candidate role. Register or sign in with a candidate account.
  • You are signed in as an employer. Members who post jobs cannot apply. Use a separate candidate account.
  • The job applies through the employer's own site. The page shows Apply on Company Site instead.

Most sites also allow guest applications. See Apply as a guest.

It says I have already applied

  • As a signed-in member, you can have one open application per job. Withdraw the existing one from My Applications to apply again.
  • As a guest, the same email cannot apply to the same job again within 24 hours.

My resume upload failed

  • File too large. The message reads "File must be under X MB". The default limit is 5 MB, and the site owner can raise it up to 20 MB. Save a smaller file and try again.
  • Wrong format. Only PDF, DOC and DOCX are accepted. Convert other formats and images to PDF.

I cannot find a job I saw earlier

  • It expired or was closed. A saved link still opens the job page, with a notice and similar open jobs.
  • It was deleted. A deleted job no longer opens.
  • You saved it. Check Candidate Dashboard > Saved Jobs. Deleted jobs are not listed there.

My saved jobs are missing

  • Sign in. Saving needs a signed-in account.
  • Check the bookmark. A saved job shows a highlighted bookmark. Click the bookmark again if it is not highlighted.

I did not get the confirmation email

  • Check your spam or promotions folder.
  • Check that your application is recorded. Signed-in members can see it in My Applications. If it is there, the site has a problem sending email, and the site owner needs to fix it.
  • Check the email address. If you applied as a guest with a typo, the email went to the wrong address. Apply again with the right address.

One of my applications shows "Job no longer available"

The employer or a site admin deleted the job after you applied. The application stays in your history and its status becomes Job removed. Click Remove on the row if you want to delete it from your list.

I get too many job alerts, or too few

  • Open Candidate Dashboard > Job Alerts. Change each alert's frequency or delete it.
  • Alerts with overlapping searches send separate emails. Delete the ones you do not need.
  • Every alert email has an Unsubscribe from this alert link.
  • To stop all alert emails, untick Job Alert Digest under Candidate Dashboard > Settings > Email Notifications.
  • A guest alert sends nothing until you click the link in the confirmation email.

Employers cannot find me

With Pro, public resumes appear on the site's Find Candidates page.

  1. Build a resume under Candidate Dashboard > My Resumes.
  2. Turn on Public in the resume builder and click Save Resume.
  3. Turn on Open to new opportunities to appear in the "Open to work" filter.

I forgot my password

Use the Lost password link on the login page. A reset email goes to the address you registered with.

If you are signed in and want a new password, use Candidate Dashboard > Settings > Change Password.

I want to delete my account

Go to Candidate Dashboard > Settings > Privacy & My Data and click Delete my account. Enter your password and type DELETE. Your account is locked at once and deleted after a grace period, 14 days by default. Sign back in before then and click Keep my account to cancel.

When the account is deleted, your profile, saved items, uploaded files and, with Pro, resumes and alerts are removed. Employers keep the applications you sent, with your name, email, cover letter, answers and files removed. They see "Deleted candidate". This cannot be undone. The same panel has Request data export if you only want a copy of your data.

I still need help

Contact the site owner. Include the page address, a screenshot, the time and date, and the email address on your account. Never send your password.

Profile, account and notifications

You can edit your profile, change your login details, choose which optional emails you get, and request your data or delete your account, all from the Candidate Dashboard.

The sidebar has an Account section with Profile, Settings (the page is titled Account Settings) and, with Pro, Notifications. The block with your name at the top of the sidebar also opens Profile.

Profile

Open Profile to edit what you share with employers:

Field Notes
Email Read-only here. Change it in Settings
Phone Optional contact number
Location For example "Bengaluru, India"
Bio / About Me A short introduction

Sites with extra candidate fields show them here too. Click Save Profile. A confirmation appears when it saves.

Account settings

Open Settings to manage login details.

Account details

  1. Change your Display Name or Email.
  2. If you change your email, enter your Current password.
  3. Click Save changes.

Change password

  1. Enter your Current Password.
  2. Enter and confirm a New Password.
  3. Click Update password.

If you are locked out, use the Lost password link on the login page.

Email notifications

This panel, below the password form, lists the optional emails you can turn off. Untick an email to stop it, tick it to get it again. Changes save as you click. It can include:

  • Application Deadline Reminder - a reminder before the deadline of a job you saved and did not apply to.
  • Job Alert Digest (Pro) - your job alert emails.

Emails about your account and applications are always sent. The panel does not appear when the site has no optional emails turned on.

Privacy and my data

  • Request data export - asks the site for a copy of your personal data. The site emails you to confirm the request, then sends the file once it has prepared it.
  • Delete my account - enter your password and type DELETE. Your account is locked at once and deleted after a grace period, 14 days by default. Sign back in before then and click Keep my account to cancel.

When the account is deleted, your profile, saved items and uploaded files are removed. With Pro, your resumes and job alerts are removed too. Employers keep the applications you sent, with your name, email, cover letter, answers and files removed. They see "Deleted candidate". You get an email when you request the deletion, when you cancel it, and when it runs.

Notifications (Pro)

With WP Career Board Pro, a Notifications tab with an unread badge appears in the sidebar. It lists your Career Board notifications, such as a confirmation that your application was submitted and status changes. Click a notification to open it. Use Mark all read to clear the unread badge, or Clear all to empty the list.

Without Pro you still get the emails, but there is no Notifications tab.

Admin Guide

Site-owner configuration: settings, moderation, email, GDPR, custom fields.

Settings

You can set how jobs are reviewed and listed, who can sign up, how emails look and which pages hold each feature. Open Career Board → Settings in wp-admin. The sidebar groups tabs by the job you came to do, and each tab saves on its own with its own Save Changes button. Saving keeps you on the same tab.

The defaults below are what a fresh install uses. A few defaults are safer on sites created from 1.8.0 on; those are marked "new sites". Sites that existed before 1.8.0 keep their settings and see one notice listing the safer defaults.

Jobs & applications

Tab What it controls
Jobs Review, listing length, order, salary currency, featured duration, Google for Jobs and sharing
Applications Resume rules and withdrawing
Industries The industries offered on company profiles, registration and the company directory filter
Import Migrate from WP Job Manager. See Import & Migration

WP Career Board Pro adds more tabs to this group (Boards, Field Builder and Job Feed). Read them in the Pro documentation.

Jobs

Setting Default Description
Auto-Publish Jobs Off On: submitted jobs go live at once. Off: new jobs wait as Pending until approved under Career Board → Jobs
Hide a job after this many reports 3 When this many members with standing report a job, it is taken off the site as Pending until you review it under Jobs → Flagged. 0 turns auto-hide off (0-50). See Moderation
Default listing length (days) 30 How long a job stays open when the employer sets no deadline. A board's own listing length, if set, wins
When a job ends - Not a switch. At its deadline a job stops taking applications and leaves listings, feeds and the sitemap within the hour. Its page stays up as an expired page (noindex, similar open jobs) so shared links keep working. Employers reopen it with a new deadline. On sites created before 1.8.0 that had this off, past-deadline jobs keep listing until you click End jobs at their deadline here. Only jobs that ended in the last 7 days email their employer, so switching on does not email a backlog
Jobs Per Page 10 Jobs per page in the job listings block (1-100)
Default order Featured, then newest How job lists are ordered before a visitor picks a sort: Featured then newest, Closing soonest, Highest salary, or Oldest first. A keyword search always shows the best matches first
Default Salary Currency USD Pre-selected on the job form; employers can pick another per job
Featured Duration (days) 30 How long a job stays featured before it reverts (1-365). See Featured Listing Expiry

The Search engines and sharing card on the same tab holds four more settings. They are covered in Google for Jobs and Social Sharing: Google for Jobs (on), Require a location (off; on for new sites), Default country (your site language's country) and Social sharing tags (on).

Applications

Setting Default Description
Resume Required On Applicants must attach a resume. Turn off where a cover letter is enough
Application Resume File Size (MB) 5 Largest resume file an applicant can upload (1-20). PDF, DOC and DOCX only
Allow Withdraw On Candidates can withdraw their own applications until an outcome. The application stays in the employer's list as Withdrawn

Candidates & employers

Tab What it controls
Sign-ups Open sign-up status, email confirmation, candidate role, login to apply
Privacy Pending account deletions and the personal-data request log

WP Career Board Pro adds Resumes and Credits tabs here. Read them in the Pro documentation.

Sign-ups

Setting Default Description
Open Sign-Up Read-only Shows whether visitors can create accounts. It mirrors WordPress's Anyone can register setting under Settings → General. When off, the sign-up forms show a "registration closed" notice
Email Verification Off; on for new sites New accounts stay signed out until they open the link in the "Confirm Your Email" email. If that email is switched off under Emails, sign-ups are not held
Require Candidate Role Off Off lets any signed-in member apply and keep a resume. On reserves the candidate experience for users with the Candidate role
Require login to apply Off On: only signed-in members can apply and the job page shows Sign in to apply. Off: visitors can apply with a name and email. Guest applications are limited to 10 an hour from one connection

Sign-ups from one connection are limited to 5 an hour. Developers can change that with the wcb_registration_rate_limit filter.

Privacy

The Privacy tab shows two lists:

  • Pending account deletions - members who asked to delete their account, with the date it runs and a Keep account button to cancel it for them. The grace period is 14 days by default.
  • Privacy request log - every personal-data export and erase request the plugin processed, kept as evidence. Visitor IP addresses are stored only as a one-way hash.

See GDPR & Privacy.

Emails & app

Tab What it controls
Brand One colour and one logo used by every Career Board email, the mobile app and the installable app (PWA). Your website itself follows your theme
Emails Sender, footer text, and each email's on/off switch, subject and body. See Email Notifications
Mobile App Sign-in background, dark mode, legal links and password sign-in for the companion app

Brand. Brand Colour (default #4F46E5) paints the email header, app buttons and the browser bar of the installable app. Pick a colour white text reads well on. Logo comes from the Media Library; a wide image around 400 x 120 px works best. On sites that existed before 1.8.0 the Brand starts as your old email header colour and logo, so emails look the same.

Emails. The Sender card at the top holds From Name (site name), From Email (site admin email) and Admin Notification Email (site admin email). Below it, the Email look card holds the footer text and the Email templates list holds one row per email.

Mobile App. Its colour and logo come from Brand. This tab sets:

Setting Default Description
Sign-in background URL Empty Image behind the app's sign-in screen
Dark mode Off Open the app in dark mode by default
Terms of service URL, EULA URL, Community guidelines URL Empty App stores require published terms. A blank link is sent as empty, not as a placeholder
Abuse contact email Empty Public. Members email it about abuse. Blank shows your privacy page instead
App Password Sign-In Off Lets members type their website password in the app. Leave off if you use two-factor authentication or do not run the app: the app's "Connect with WordPress" option already signs members in through your normal login page

Site

Tab What it controls
Pages Assigns the WordPress pages that hold each Career Board block
Anti-Spam Honeypot plus an optional CAPTCHA provider
Integrations Install and activate other Wbcom plugins that work with Career Board
Advanced Content width, email history retention, Remove Data on Delete

WP Career Board Pro adds AI Settings, Analytics, Job Alerts and License tabs here. Read them in the Pro documentation.

Pages

You can choose which WordPress page holds each feature. If the Setup Wizard ran, these are filled in for you. If a page is missing, a banner names it, and Create Missing Pages creates only what is missing: it keeps pages you already have and adopts a page that already contains the right block, so it never makes a duplicate.

Setting Slug Purpose
Jobs Archive Page /find-jobs/ The main job board browse page
Employer Dashboard Page /employer-dashboard/ The employer's management page
Candidate Dashboard Page /candidate-dashboard/ The candidate's tracking page
Company Directory Page /find-companies/ The public company directory
Post a Job Page /post-a-job/ The standalone job-submission page
Employer Registration Page /employer-registration/ The sign-up page for both employers and candidates
Find Candidates Page (Pro) /find-candidates/ The candidate directory. An older /find-resumes/ page still works
Job Map Page (Pro) /job-map/ Jobs plotted on a map with a radius filter

The browse pages use /find-jobs/ and /find-companies/ because /jobs/ and /companies/ belong to the job and company archives.

If a page is not assigned, links that depend on it, such as "View your dashboard" in emails, fall back to the home page. Always fill these in.

Anti-spam

A honeypot field protects every submission form automatically. For a stronger second layer, choose a CAPTCHA provider:

  • None - honeypot only (default).
  • Cloudflare Turnstile - enter the Turnstile Site Key and Secret Key.
  • Google reCAPTCHA v3 (invisible, score) - enter the Site Key, Secret Key and an optional score threshold (default 0.5).
  • Google reCAPTCHA v2 (invisible badge) - enter the Site Key and Secret Key. Create the keys in Google's console as reCAPTCHA v2, "Invisible reCAPTCHA badge". This is a different key type than v3.

A CAPTCHA runs only once the chosen provider has both a site key and a secret key saved. Switching providers keeps the keys you entered for the others, so you can switch back without retyping. The provider guards the sign-up, job-submission and job-application forms, and the mobile app is told whether a CAPTCHA is required.

Visitor IP address. Sign-ups, guest applications and app sign-ins are limited per visitor IP address. If your site runs behind Cloudflare, a load balancer or another proxy, every visitor reaches WordPress from the proxy's address, so choose your proxy here: Cloudflare (CF-Connecting-IP), a load balancer or proxy (X-Forwarded-For) or an Nginx proxy (X-Real-IP). Leave it on Direct connection otherwise, because anyone can send these headers.

Advanced

Setting Default Description
Content Width (px) 0 (follow your theme) How wide Career Board pages run. Leave at 0 to follow your theme. Set 720-1920 only if plugin pages need to differ from the rest of the site
Keep Email History (days) 180 How long the email log and notification history are kept before a daily task deletes them. 0 keeps them forever (0-3650)
Remove Data on Delete Off Off keeps your data when you delete the plugin, so a reinstall picks up where you left off. On: deleting Free (or Pro) erases jobs, applications, companies, resumes, uploaded resume files, credit balances, settings and roles. It cannot be undone. Deactivating never deletes anything. The WordPress pages the plugin created are not deleted either

Saving settings

Click Save Changes at the bottom of a tab. Each tab saves separately and saving one tab never changes another.

Email Notifications

You can control every email WP Career Board sends: switch each one on or off, change its subject and message, and send yourself a test.

Notification events

Free sends these emails. Each one can be switched off and edited under Career Board → Settings → Emails.

Email Sent to When
New Job Pending Review Admin An employer submits a job that needs approval
Report Received Admin A job or member is reported for the first time, and when reports hide a job
Job Approved Employer A moderator approves a pending job
Job Rejected Employer A moderator rejects a pending job
Job Ending Soon (Employer) Employer 3 days before a job's deadline, once per deadline, with a link to extend it
Job Expired Employer A job passes its deadline (only jobs that ended in the last 7 days, so turning expiry on for an old site does not email a backlog)
Application Received (Employer) Employer A candidate or guest applies
Application Withdrawn (Employer) Employer A candidate withdraws an application
Application Confirmation (Candidate) Candidate A registered candidate applies
Application Confirmation (Guest) Guest A guest applies
Application Status Changed Candidate or guest The employer sets Reviewing, Shortlisted or Hired, or a job closes (Position closed). Saving the same status again sends nothing.
Application Not Selected Candidate or guest The employer sets Rejected. A gentler message than the generic status email.
Application Deadline Reminder Candidate 3 days and 1 day before the deadline of a job they saved. See Deadline reminders.
Confirm Your Email New member Sign-up while Email Verification is on. Also sent again from the sign-in message or the expired-link page (one a minute).
Welcome New member After sign-up. Skipped when Email Verification is on, because the confirmation email comes first.
Account Deletion Requested Member They ask to delete their account. The email states the deletion date.
Account Deletion Cancelled Member They (or an admin) cancel the deletion
Account Deleted Member Just before the account is deleted, at the end of the grace period

Guests who applied with an email address get the guest confirmation, status and not-selected emails. A guest who left no email cannot be notified.

Every email is written in the recipient's own language: dates and status names follow the recipient's locale, not the locale of whoever triggered it.

Managing notifications

You can turn each email on or off, change its subject and rewrite its message. Go to Career Board → Settings → Emails. The Email templates list has one row per email, with Subject, Message (Edit opens the editor), Enabled and Test columns. Click Save Email Settings when you finish.

Edit the message

Every email ships with a ready-made body. Leave the Message body (HTML) field blank to send that default, or type your own text. Load default puts the shipped wording into the field so you can edit from there. The branded header and footer are added automatically, so enter only the message body.

Preview renders the subject and body you have typed, including unsaved edits, inside the branded email without sending anything. The message body comes from the body you save here, then from a theme file at {theme}/wp-career-board/emails/{email-id}.php, then from the shipped default.

Members can turn off optional emails

Members can switch off the optional emails they receive. In Free these are Application Deadline Reminder (candidates) and Job Ending Soon (employers). A member opens Settings in their dashboard and clears the box under Email Notifications. Emails about their account and applications always send. WP Career Board Pro adds more optional emails to the same list.

Send test email

Each row has a Send test button. It sends a copy of that email to your admin address with sample values, so you can see the rendered email before any real applicant does.

The button works for turned-off emails too. Test sends are recorded in the activity log as Sent (test) or Failed (test), so they stay separate from real delivery. The button shows Sent for a moment after a successful send.

If the button shows Failed, check:

  • An SMTP plugin is configured (a local development mail handler often fails silently).
  • Your admin user has a valid email address on their profile.
  • The Email activity log at the bottom of the tab shows the most recent attempt.

Email placeholders

Use placeholders in subjects and bodies. They are replaced when the email sends. The Insert tag buttons in the editor show exactly the tags each email supports.

Email Placeholders
Application Confirmation, Application Received, Application Withdrawn {candidate_name} {job_title} {dashboard_url}
Application Confirmation (Guest) {guest_name} {job_title} {job_url}
Application Status Changed {candidate_name} {job_title} {new_status} {dashboard_url}
Application Not Selected {candidate_name} {job_title} {jobs_url} {dashboard_url}
Application Deadline Reminder {job_title} {company_name} {days_left} {deadline_date} {job_url}
Job Approved {job_title} {job_url}
Job Rejected {job_title} {reason}
Job Ending Soon {job_title} {deadline_date} {days_left} {edit_url} {job_url}
Job Expired {job_title} {repost_url}
New Job Pending Review {job_title} {approve_url}
Report Received {item} {reason} {report_count} {hidden_note} {review_url}
Confirm Your Email {display_name} {verify_url}
Welcome, Account Deletion Cancelled, Account Deleted {user_name} {site_name} {login_url}
Account Deletion Requested {user_name} {delete_date} {login_url}

Email from name and address

In the Sender card at the top of Settings → Emails, you can set:

  • From Name - the sender name shown in inboxes (defaults to your site name).
  • From Email - the address all Career Board emails are sent from (defaults to the site admin email).
  • Admin Notification Email - where admin alerts such as a new job pending review are sent (defaults to the site admin email).

The header colour and logo come from Settings → Brand, shared with the mobile app. The Email look card on the Emails tab holds the Footer Text.

SMTP and deliverability

Use an SMTP plugin (WP Mail SMTP, FluentSMTP or similar) for reliable delivery. WordPress's built-in mail can land in spam without SMTP.

Email activity log

You can check whether emails are going out in the Email activity log card at the bottom of Settings → Emails. Each row shows when, the template, recipient, subject and status (Sent, Failed, Sent (test) or Failed (test)). Filter by template and status. Rows older than Settings → Advanced → Keep Email History (180 days by default, 0 keeps them forever) are deleted daily.

Emails added by Pro

WP Career Board Pro adds these emails to the same Emails tab, with the same subject, message, on/off and test controls: Job Alert Digest, Confirm Job Alert (guest), Credit Top-Up Confirmation, Credit Purchase Receipt, Credit Refund, Low Credit Balance Warning and Featured Listing Ended. Read the Pro documentation for when each one is sent.

Deadline reminders

Candidates who saved a job but have not applied get a reminder before its application deadline.

When Sent to
3 days before the deadline Candidates who saved the job
1 day before the deadline Candidates who saved the job

A candidate gets each reminder once per job. Candidates who already applied for the job are skipped. Employers get the separate Job Ending Soon email 3 days before the deadline.

Turn reminders off

Open Settings → Emails and switch off Application Deadline Reminder. Members can also switch it off for themselves, see Members can turn off optional emails.

Reminder wording

The default subject is "Application deadline approaching for {job_title}". Placeholders: {job_title}, {company_name}, {days_left}, {deadline_date}, {job_url}. Edit the wording under Settings → Emails. To replace the markup, add deadline-reminder.php to your theme's wp-career-board/emails/ folder. A body saved under Settings → Emails wins over the theme file.

Moderation

You can review jobs before they go live, act on reported jobs and members, and suspend or ban accounts that break your rules.

How moderation works

When Auto-Publish Jobs is turned off (the default), every job submitted by an employer goes to a Pending state and must be approved by an admin before it appears on the job board.

When Auto-Publish Jobs is turned on, submitted jobs go live immediately without review.

To toggle moderation: WP Career Board → Settings → Jobs → Auto-Publish Jobs

Reviewing pending jobs

  1. Go to WP Career Board → Jobs in wp-admin
  2. Click the Pending Review filter at the top of the list
  3. Click any job title to open the full edit screen and review the content

Approving a job

Quick approval (from the list):

  1. Hover over the job in the list
  2. Click Approve under the title and confirm

You can also tick several pending jobs and choose the Approve bulk action.

Full review (from the edit screen):

  1. Open the job in the wp-admin editor
  2. Review all details
  3. Change the status to Published in the Post Status panel
  4. Click Update

When a job is approved, the employer receives an email notification.

Rejecting a job

  1. Hover over the pending job in the list.
  2. Click Reject.
  3. Optionally type a reason and confirm.

The job moves to Draft and the employer gets the Job Rejected email, which includes your reason if you gave one.

Managing existing jobs

Admins have full control over all jobs from WP Career Board → Jobs:

  • Edit any job (correct errors, add missing info)
  • Trash or Delete Permanently spam or low-quality listings (administrators only). Deleting a job with many applicants finishes quickly: its open applications are marked Job removed in background batches of 200, and candidates are still told, using the job title saved with their application. The applications stay in the candidate's history

Reported jobs (flagged)

Any logged-in member who does not own the job can report a published job from its page ("Report this job", with a reason). Reports are stored on the job and deduplicated per user, so one person reporting the same job repeatedly counts once.

Moderators and admins review reports from WP Career Board → Jobs:

  1. Click the Flagged view at the top of the list (it appears, with a count, only when one or more jobs have open report flags).
  2. The Flags column shows how many open reports each job has.
  3. Resolve a flagged job with the row or bulk actions (the row action is Dismiss flag; the bulk action is Dismiss flags):
    • Dismiss flag(s) - clears the open reports and leaves the job published (the report was not actionable). A job that was hidden by reports goes back on the site.
    • Unpublish - takes the job down and clears its reports.

Auto-hide. When a set number of different members report the same job (3 by default), it is taken off the site as Pending until you review it. Only reports from members with standing count toward the number: an account at least a week old, or a member who has applied to a job or has a published job. Every report is still recorded so you can see it; the Jobs list shows it as Hidden: reported. Change the number, or set 0 to turn this off, under Settings → Jobs → Hide a job after this many reports. You are emailed on a job's first report and again when it is hidden, not on every report.

Resolving flags requires the Moderate Jobs capability (wcb_moderate_jobs), the same gate as approving and rejecting jobs.

Member moderation (reporting, blocking, suspending)

You can also act on members, not just listings. This is separate from reported jobs above.

Members reporting members

A logged-in member can report another member for spam or advertisement, a scam, a fake or impersonating profile, harassment, or offensive content. Reporting the same member twice counts once.

Open reports show as a warning badge with the report count on Career Board → Candidates and Career Board → Employers. Each list has a Reported view for members with open reports. Dismiss reports on the row clears them. You are emailed on a member's first report.

Members blocking members

A logged-in member can block another member through the REST API, which the companion app uses. Blocking is mutual: once either side blocks the other, neither one sees the other's job listings or single job pages. A member can list and undo their own blocks through the same API.

Suspending candidates

Administrators can suspend a candidate from Career Board → Candidates:

  1. Go to Career Board → Candidates.
  2. Hover a candidate's row and click Suspend, or select several rows and choose Suspend from the bulk actions.

A suspended candidate loses Career Board abilities such as applying and saving jobs. Click Restore (or the Restore bulk action) to lift the suspension.

The Delete bulk action opens WordPress's own Delete Users screen to confirm. Deleting a candidate removes their personal data and keeps their past applications for employers as "Deleted candidate".

Banning employers

Administrators can use Ban on Career Board → Employers to stop an employer posting and take their live and pending jobs and their company page off the site. Unban puts back exactly what was live or pending. A job you edited, approved or deleted while the ban was on is left as you set it. Suspending a candidate hides their public resume the same way. In the Jobs list a hidden job shows as Hidden: employer banned.

Admin notifications

Admins receive a New Job Pending Review email when an employer submits a job for approval, and a Report Received email when a job or member is first reported (and when a job is hidden by reports). Notification content can be customized in Settings → Emails.

GDPR & Privacy

You can answer personal-data export and erase requests with WordPress's built-in privacy tools. WP Career Board adds its own data to both.

What data WP Career Board stores

  • Applications - the job, status, submission date, cover letter and resume file. For guests, the name and email they applied with.
  • Candidate profile - headline, location, open-to-work and profile visibility, profile resume data, and saved jobs, companies and resumes.
  • Uploaded files - resumes and generated files, kept in a private folder.
  • Email history - kept for the period set under Settings → Advanced → Keep Email History (180 days by default).
  • Employer content - company pages and job listings.

Data export

The WordPress export includes a person's applications, profile and email history from WP Career Board.

To export a user's data:

  1. Go to Tools → Export Personal Data in wp-admin
  2. Enter the user's email address
  3. Click Send Request
  4. The user receives an email with a link to download their data export

Guests who applied with an email address are found by that address.

Data erasure

To erase a user's personal data:

  1. Go to Tools → Erase Personal Data in wp-admin
  2. Enter the user's email address
  3. Click Send Request
  4. The user confirms via email
  5. After confirmation, WordPress erases the personal data, including the WP Career Board records described below

Erasing a person's data removes their Career Board profile data, uploaded files and saved items, and anonymises their applications: employers keep the job, status and dates, shown as "Deleted candidate", with the name, email, cover letter, answers and files removed. Guests are found by the email they applied with. Deleting a user under Users does the same. A ban on the account and the record that the privacy request was handled are kept. Job listings posted by an employer are not deleted automatically; remove those yourself if needed.

Account deletion and the privacy tab

Members can delete their own account from their dashboard. It is locked at once and deleted after a 14 day grace period (the default). Under Career Board → Settings → Privacy you can see who is waiting, cancel a deletion on their behalf with Keep account, and read the request log of every export and erase the plugin processed. Visitor IP addresses in that log are stored only as a one-way hash.

Add-ons that store personal data register with the wcb_personal_data_providers filter once, and are covered by the WordPress export and erase tools and by account deletion. See the Developer Guide hooks reference.

Privacy policy page

Add the following to your privacy policy to tell people what data WP Career Board collects:

  • Account registration data (name, email)
  • Job applications, including cover letters and resume files
  • Email history for the period you keep it

Cookies and browser storage

WP Career Board does not set its own cookies in the free version. It remembers the open dashboard tab in sessionStorage, which clears when the browser tab closes, and the job list layout (grid or list) in localStorage.

Custom Field Builder (Pro)

Pro feature - Requires WP Career Board Pro.

You can add your own fields to jobs, company profiles, candidate profiles, resumes and job applications without code. For example, add "Remote policy" to every job, or a screening question every applicant must answer.

Open the Field Builder at Career Board → Settings → Field Builder. Fields you add appear on the matching form, and answered job fields show on the job page.

The full guide is in the Pro documentation:

  • Custom Field Builder - overview - what you can add, where answers show up and who can see them.
  • Creating custom fields - step-by-step setup.
  • Field Types Reference - every field type.

Credit System (Pro)

Pro feature - Requires WP Career Board Pro.

You can charge employers credits to post jobs and to feature them. Employers buy credits and track their balance from their dashboard.

Open the settings at Career Board → Settings → Credits. Set a job's credit cost per board under Career Board → Settings → Boards.

Credits can be sold through Stripe, PayPal, WooCommerce, Paid Memberships Pro or MemberPress. WP Career Board does not process payments itself.

The full guide is in the Pro documentation:

  • Credit system - overview - how credits are held, spent and refunded, and the setup checklist.
  • Credit packages and costs - prices and packs.
  • Direct payment gateways (Stripe and PayPal), Selling credits through WooCommerce, Granting credits with Paid Memberships Pro and Granting credits with MemberPress - one guide per way of selling credits.
  • Manual Credit Adjustments & Refunds - correct a balance by hand.

Employers can read how their balance works in Employer credit balance.

Troubleshooting & FAQ

You can use this page to find the cause of common problems and fix them.


Setup wizard

The setup wizard shows an error and won't advance

The wizard uses the WordPress REST API to create pages. This can fail when:

  • Pretty permalinks are off - go to Settings → Permalinks, select any option other than Plain, and save.
  • REST API is blocked - a security plugin, firewall, or hosting rule is blocking /wp-json/. Temporarily deactivate security plugins and try again.
  • Auth cookie not sent - if your site uses basic HTTP auth (common on staging), the REST request won't carry your session. Disable basic auth temporarily or add an exception for /wp-json/.

After fixing the underlying issue, go to Career Board → Settings and click Re-run Setup Wizard at the bottom of the page. Pages that already exist are kept.


Pages were created but they're blank or show a 404

If a page is blank, it may not hold the right block. Edit the page in the block editor and insert the matching block:

Page Block to insert
Find Jobs Job Search + Job Listings
Post a Job Job Form
Employer Registration Employer Registration
Employer Dashboard Employer Dashboard
Candidate Dashboard Candidate Dashboard
Find Companies Company Archive

Then go to Settings → Permalinks and click Save Changes to flush rewrite rules.


Jobs not appearing

The Job Listings block shows "No jobs found"

  1. Confirm you have published jobs - go to WP Career Board → Jobs and check the status column.
  2. If jobs are pending review, go to WP Career Board → Settings → Jobs and check whether Auto-Publish Jobs is enabled. If off, you need to approve each job manually from the Jobs list.
  3. Check the active filters on the page - a filter may be set to a value that returns no results.
  4. Go to Settings → Permalinks and click Save Changes to flush rewrite rules.

Jobs appear in wp-admin but not on the frontend

Check these in order:

  1. Status. Only Published jobs list. Pending, Draft, Closed and Expired jobs do not.
  2. Deadline. When End jobs at their deadline is in effect (see Settings), a job past its deadline is Expired within the hour and leaves the listings. Its page still opens and says it has expired.
  3. Hidden by moderation. The Jobs list shows Hidden: reported or Hidden: employer banned on such jobs. See Moderation.
  4. Permalinks. If the job page returns a 404, go to Settings → Permalinks and click Save Changes.

Application form

The "Apply" button does nothing / the application form doesn't open

  • Guest applications are supported by default - no setting needs to be enabled. If the form still doesn't open, check that the user's browser is not blocking JavaScript.
  • If using a page caching plugin (WP Rocket, W3 Total Cache), purge the cache after activating WP Career Board.
  • Check the browser console for JavaScript errors - a JavaScript conflict with another plugin can prevent the form from loading.

Candidates can't submit the application form

  • The job may have a deadline that has already passed. Applications for it are closed.
  • If Resume Required is on (Settings → Applications) and the candidate attached no resume, the form blocks submission.
  • If Require login to apply is on (Settings → Sign-ups), guests see Sign in to apply instead of the form.
  • Nobody can apply to their own job.
  • Make sure file upload limits in your hosting's php.ini (upload_max_filesize, post_max_size) are large enough for resume files (at least as large as Settings → Applications → Application Resume File Size).

Email notifications

Emails are not being sent

If emails aren't arriving:

  1. Check spam - the notification emails from a local WordPress install often land in spam.
  2. Install an SMTP plugin - the default wp_mail() uses PHP's mail() function, which most shared hosts reject. Install an SMTP plugin (e.g. WP Mail SMTP, FluentSMTP) and connect it to a transactional email service (Mailgun, SendGrid, Postmark).
  3. Verify the sender address - go to WP Career Board → Settings → Emails and confirm the From Email in the Sender card matches your domain. Some hosts reject mail from mismatched domains.
  4. Check notification toggles - each notification type can be enabled or disabled further down the Settings → Emails tab. Confirm the relevant notification is enabled.

The wrong email address is receiving notifications

Admin notification emails go to the address set in Settings → Emails → Admin Notification Email (in the Sender card). This defaults to the WordPress admin email but can be overridden.


Employer & candidate accounts

A user registered but isn't showing up as an employer or candidate

The role is assigned at registration based on which form the user used:

  • Employers register via the Employer Registration page (which contains the Employer Registration block) and get the Employer (wcb_employer) role.
  • Candidates register on the same Employer Registration page by choosing Find a Job, and get the Candidate (wcb_candidate) role.

If a user registered via the standard WordPress registration page, they won't have a job board role. Edit the user under Users and set their role to Employer or Candidate, or assign the relevant capabilities with a role manager (see Capabilities & Roles).

An employer can't post jobs

  1. Check the employer's account in WP Career Board → Employers - confirm they have the Employer role.
  2. If a board charges credits (Pro), confirm the employer has enough credits. The Pro documentation explains how credits are held and spent.
  3. Confirm the employer can access the Employer Dashboard, where job posting is done.

Credit system (Pro)

For missing credits after a purchase, a wrong balance or a payment gateway that does not grant credits, see the Pro documentation: Credit system - overview and Manual Credit Adjustments & Refunds.


Block issues

The block editor shows "Your block contains unexpected or invalid content"

This usually means the block's HTML was hand-edited or copied incorrectly. Click Attempt Block Recovery when prompted - this will restore the block from its saved attributes.


Performance

The jobs page is slow

  • If you use a page caching plugin, exclude the Candidate Dashboard and Employer Dashboard pages. They are specific to each member and must not be served from cache.
  • Use Query Monitor to find slow database queries.

Still stuck?

If none of the above resolves your issue:

  1. Enable WP_DEBUG and WP_DEBUG_LOG in wp-config.php and check wp-content/debug.log for PHP errors.
  2. Deactivate all plugins except WP Career Board to rule out conflicts, then reactivate one by one.
  3. Open a support ticket at wbcomdesigns.com/support with your WordPress version, PHP version, active theme, and a description of what you tried.

Jobs RSS Feed

You can give RSS readers, Zapier, IFTTT, email digest tools and your own scripts a feed of your published jobs, with each job's company, salary, location and deadline included.

Where to find it

https://your-site.com/jobs/feed/

The feed lists your most recent published jobs. WordPress decides how many, using Settings → Reading → Syndication feeds show the most recent.

Item fields

The feed is WordPress's standard feed for the Jobs post type. WP Career Board adds fields in its own wcb: namespace to each <item>. The plain-text <description> starts with a one-line summary of company, location and salary, so readers that ignore custom namespaces still show useful context.

Field Content
<wcb:reference> The job's ID
<wcb:posted> Date the job was posted
<wcb:company> Company name
<wcb:salary currency="..." period="..."> Salary, with <wcb:min> and <wcb:max> inside. Sent only when a minimum or maximum is set
<wcb:location> Job location, one element per location
<wcb:type> Job type, one element per type
<wcb:category> Job category, one element per category
<wcb:tag> Job tag, one element per tag
<wcb:experience> Experience level, one element per level
<wcb:deadline> Application deadline, if set
<wcb:apply_url> Apply URL, if the employer set an external one
<wcb:apply_email> Apply email, if set
<wcb:remote> true or false

The wcb: namespace is https://wbcomdesigns.com/xmlns/wcb/1.0/. It is declared on the <rss> root element.

Filter the feed

You can narrow the feed to one term by adding its slug to the URL:

/jobs/feed/?wcb_category=engineering
/jobs/feed/?wcb_job_type=full-time
/jobs/feed/?wcb_location=san-francisco-ca

Use the term's slug, which you can see on its taxonomy screen. The feed has no filters for salary, remote or board.

Get JSON instead

For richer filtering, or JSON, use the REST API:

GET /wp-json/wcb/v1/jobs?per_page=20

It returns the jobs with the total and the number of pages.

Multilingual: WPML and Polylang

You can translate jobs, companies, resumes, job taxonomies, email subjects and email bodies with WPML or Polylang. The plugin ships a wpml-config.xml file, so you do not need to register anything by hand.

What you can translate

Content Translatable
Jobs (wcb_job) Yes
Companies (wcb_company) Yes
Resumes (wcb_resume) Yes
Applications (wcb_application) No
Boards (wcb_board) No
Job categories, job types, tags, locations, experience levels Yes
Email sender name, sender email, subjects, bodies and footer text Yes, as admin texts
Plugin interface strings Yes, through .po / .mo files

The Pro plugin adds no post types or taxonomies of its own. It only adds its own settings and meta to the same config.

Set up WPML

  1. Activate WPML and WP Career Board. WPML reads wpml-config.xml from the plugin folder.
  2. Go to WPML > Settings and open the post type translation section.
  3. Confirm Jobs, Companies and Resumes are set as translatable.
  4. Open WPML > Taxonomy Translation to translate the five job taxonomies.

Set up Polylang

Polylang reads the same wpml-config.xml. Open the Polylang settings, go to the custom post types and taxonomies section, and confirm the job board post types and taxonomies are ticked. Save.

Translate plugin strings

The template file is languages/wp-career-board.pot. You can:

  • Put a translated .po / .mo pair in wp-content/languages/plugins/.
  • Use Loco Translate, WPML String Translation or Polylang string translation.

Email language

Each email is sent in the recipient's own language, taken from the language set on their user profile.

REST meta filters

You can filter the jobs list by any job meta value, in the REST API or in the Job Listings block. Keys that start with _wcb_ work with no setup. Any other key needs one line of PHP.

The endpoint is GET /wp-json/wcb/v1/jobs. Add meta_<key>=<value> to the query string.

GET /wp-json/wcb/v1/jobs?meta__wcb_department=engineering
GET /wp-json/wcb/v1/jobs?meta__wcb_visa_sponsorship=1

The key is the full meta key, so _wcb_department becomes meta__wcb_department.

Filter in the Job Listings block or shortcode

Set the block's metaFilter attribute to key:value, or use the shortcode:

[wcb_job_listings metaFilter="_wcb_department:engineering"]

If the key does not start with _wcb_ and is not allowed by the filter below, the block shows all jobs and ignores the filter. With WP_DEBUG on, WordPress logs a _doing_it_wrong notice that names the fix.

Allow a custom meta key

Keys that do not start with _wcb_ are blocked by default, so nobody can query private meta from other plugins. Allow a key with the wcb_jobs_allowed_meta_filters filter:

add_filter( 'wcb_jobs_allowed_meta_filters', function ( $keys ) {
    $keys[] = 'partner_company_id';
    return $keys;
} );

Then this request works:

GET /wp-json/wcb/v1/jobs?meta_partner_company_id=42

How matching works

Each filter is an exact match on the stored value. There is no range or comma-list syntax. For salary ranges, use the separate salary_min and salary_max query parameters.

Speed

  • Filters run as a normal meta_query. On a large board, add a database index on the meta key and value columns of wp_postmeta.
  • The jobs endpoint caches each result for 5 minutes. Saving any job clears the cache.

See also

Custom fields

You can add your own fields to the job form, company profile, candidate profile and apply form with one add_filter call. The plugin renders the field, checks required fields, and saves the value.

The four filters

Filter Form Arguments
wcb_job_form_fields Post a Job $groups, $board_id
wcb_company_form_fields Company profile editor $groups, $company_id
wcb_candidate_form_fields Candidate profile editor $groups, $user_id
wcb_application_form_fields_groups Apply form $groups, $job_id

Each callback receives the current list of groups and returns it with your group added. All four use the same group shape.

Group shape

array(
    'id'     => 'partner',
    'label'  => 'Partner association',
    'fields' => array(
        array(
            'key'         => 'partner_id',
            'label'       => 'Partner',
            'type'        => 'text',
            'required'    => true,
            'placeholder' => 'Optional',
            'description' => 'Optional hint shown under the field',
            'options'     => array( 'value' => 'Label' ),
        ),
    ),
)

The group label shows as a heading above its fields. options applies to select, radio and multiselect.

Field types

Type Shows
text, email, tel, url, number, date Matching single-line input
textarea Multi-line text box
select Dropdown
radio Radio buttons
multiselect Checkboxes, saved as a comma-separated list
checkbox One on/off checkbox
repeater Text box with one entry per line
add_filter( 'wcb_candidate_form_fields', function ( $groups ) {
    $groups[] = array(
        'id'     => 'links',
        'label'  => __( 'Online presence', 'wp-career-board' ),
        'fields' => array(
            array(
                'key'      => 'portfolio_url',
                'label'    => __( 'Portfolio URL', 'wp-career-board' ),
                'type'     => 'url',
                'required' => false,
            ),
        ),
    );
    return $groups;
} );

Example: add a question to the apply form

add_filter( 'wcb_application_form_fields_groups', function ( $groups, $job_id ) {
    $groups[] = array(
        'id'     => 'screening',
        'label'  => __( 'Quick screen', 'wp-career-board' ),
        'fields' => array(
            array(
                'key'      => 'years_relevant',
                'label'    => __( 'Years of relevant experience', 'wp-career-board' ),
                'type'     => 'number',
                'required' => true,
            ),
        ),
    );
    return $groups;
}, 10, 2 );

This adds the group to every job's apply form. To limit it to some jobs, check $job_id in the callback.

Where values are saved

Filter Saved as Meta key
wcb_job_form_fields Job post meta The field key
wcb_company_form_fields Company post meta The field key
wcb_candidate_form_fields User meta The field key
wcb_application_form_fields_groups Application post meta _wcb_application_field_ plus the field key

To change or reject a value before it is saved, use the wcb_save_custom_field filter. It receives the sanitized value, the field key and the owner ID. Return null to skip saving.

Where answers show

  • The employer dashboard shows an applicant's answers under "Application answers".
  • The applications CSV export has a "Screening Answers" column.
  • The job page fires the wcb_job_single_after_description action after the description, with the job ID. Use it to print your own job fields.
  • The application REST response includes a custom_fields entry.

Pro

WP Career Board Pro adds a field builder that lets you create these fields without code. See the Pro documentation for the field builder guide.

Application editor

You can review one applicant in a single admin screen: their details, cover letter, resume, answers, status and status history. You can change the status from the same screen.

Open an application

Go to Career Board > Applications and click an application. Click a job title in the list to show only that job's applicants.

What the screen shows

Section What it shows
Applicant card Avatar, name, email, applied date, the job, and a link to the candidate profile for members
Cover letter The cover letter text
Application answers Answers to any custom application questions
Resume The attached resume, with Open and Download links
Status and history The current status and every change with date, from and to status, and who made it
Change status A status list and a Save button
Quick actions Shortlist, Mark Hired, Reject and Message

Change the status

Pick a status and click Save. You can choose Submitted, Reviewing, Shortlisted, Rejected or Hired. The picker is not shown for withdrawn applications or applications whose job was closed or removed.

Each change is written to the status history once, and setting a status the application already has does nothing.

Quick actions

Shortlist, Mark Hired and Reject set the status in one click, the same as the picker.

Message opens your mail program with a message to the applicant. It is hidden when the applicant left no email.

Emails sent on a status change

  • Reviewing, Shortlisted and Hired send the candidate the "Application Status Changed" email.
  • Rejected sends the candidate the "Application Not Selected" email.
  • Withdrawn sends nothing to the candidate.

Edit these under Email notifications.

Bulk actions

On the Applications list, select rows and choose:

  • Mark as Reviewing, Shortlisted, Rejected or Hired
  • Export to CSV - see CSV export
  • Move to Trash

In the Trash view, the bulk actions are Restore and Delete Permanently.

Embed the parts elsewhere

Each section is also a widget you can place with the [wcb_widget] shortcode:

[wcb_widget id="application/applicant-card" application_id="987"]
[wcb_widget id="application/cover-letter" application_id="987"]
[wcb_widget id="application/custom-answers" application_id="987"]
[wcb_widget id="application/resume-preview" application_id="987"]
[wcb_widget id="application/status-timeline" application_id="987"]
[wcb_widget id="application/status-changer" application_id="987"]
[wcb_widget id="application/quick-actions" application_id="987"]

The status changer and quick actions only render for users who have the wcb_view_applications capability. Everyone else sees nothing.

Who can use it

The Employer role has wcb_view_applications. See Capabilities and roles.

See also

Capabilities and roles

You can decide who posts jobs, applies, moderates and manages settings by choosing a role or granting capabilities. Administrators have every Career Board capability. The custom roles get a focused set.

Roles

Role Slug What it is for
Employer wcb_employer Posts jobs, manages a company profile, reviews applications
Candidate wcb_candidate Applies to jobs, manages a resume
Job Moderator wcb_board_moderator Reviews pending jobs and approves or rejects them

Banning is not a role. It is a flag on the user. See Ban an employer.

Capabilities

Capability What it lets the user do
wcb_post_jobs Post a job and edit their own jobs
wcb_apply_jobs Apply to jobs
wcb_manage_company Edit their company profile
wcb_view_applications See applications for their jobs
wcb_manage_resume Create and edit a resume
wcb_bookmark_jobs Save jobs
wcb_withdraw_application Withdraw an application
wcb_moderate_jobs Approve or reject pending jobs
wcb_access_admin_jobs Reach the admin Jobs queue
wcb_manage_settings Granted to administrators
wcb_view_analytics Granted to administrators
wcb_access_employer_dashboard Open the Employer Dashboard
wcb_access_candidate_dashboard Open the Candidate Dashboard

What each role gets

Role Capabilities
Administrator All of the above
Employer read, wcb_post_jobs, wcb_manage_company, wcb_view_applications, wcb_access_employer_dashboard
Candidate read, wcb_apply_jobs, wcb_manage_resume, wcb_bookmark_jobs, wcb_access_candidate_dashboard, wcb_withdraw_application
Job Moderator read, wcb_moderate_jobs, wcb_access_admin_jobs

Other roles get none of these. The plugin re-adds missing capabilities to its own roles on load, so a plugin update reaches existing sites without reactivation.

Give a capability to another role

Use a role manager plugin such as User Role Editor or Members. Edit the role, tick the Career Board capabilities, and save.

To let Editors act as employers, grant wcb_post_jobs, wcb_view_applications, wcb_manage_company and wcb_access_employer_dashboard.

Registration

  • On the Employer Registration page, a visitor picks Find a Job or the hiring option. Find a Job creates a Candidate account. The hiring option creates an Employer account.
  • If the person is already logged in with only the default role, the new role replaces it. If they hold another role, the new role is added.

Who can apply

By default any logged-in member can apply to jobs and manage a resume, even without the Candidate role. A member who can post jobs but does not hold the apply capability cannot apply.

To reserve applying for members with the candidate capability, go to Career Board > Settings > Sign-ups and turn on Require Candidate Role. The wcb_candidate_requires_role filter does the same in code.

Ban an employer

  1. Go to Career Board > Employers.
  2. Use the Ban row action, or tick several rows and choose Ban in the bulk actions.

A banned user:

  • Loses every Career Board permission, including posting, applying, managing a resume and opening the dashboards.
  • Has their jobs, company page and resume hidden from the site.
  • Can still log in.

Use Unban on the same screen to reverse it. You cannot ban yourself. See Moderation.

Permission checks in code

Career Board checks permissions with the WordPress Abilities API. Each ability is backed by a capability:

Ability Backing capability
wcb/post-jobs wcb_post_jobs
wcb/apply-jobs wcb_apply_jobs
wcb/manage-resume wcb_manage_resume
wcb/bookmark-jobs wcb_bookmark_jobs
wcb/withdraw-application wcb_withdraw_application
wcb/manage-company wcb_manage_company
wcb/view-applications wcb_view_applications
wcb/moderate-jobs wcb_moderate_jobs
wcb/access-employer-dashboard wcb_access_employer_dashboard
wcb/access-candidate-dashboard wcb_access_candidate_dashboard
wcb/manage-settings manage_options
wcb/view-analytics manage_options

Users with manage_options pass every check. A banned user fails every check.

Add your own role

add_action( 'init', function () {
    add_role( 'wcb_premium_employer', __( 'Premium Employer', 'my-addon' ), array(
        'read'                          => true,
        'wcb_post_jobs'                 => true,
        'wcb_view_applications'         => true,
        'wcb_manage_company'            => true,
        'wcb_access_employer_dashboard' => true,
    ) );
} );

Troubleshooting permissions

An employer cannot post a job. Check that their role has wcb_post_jobs:

wp user get <login> --field=roles
wp user list-caps <login> | grep wcb_

Someone cannot change settings. Settings need manage_options, which Administrators have. Editors do not.

A candidate cannot apply. Another plugin may have given them a different role. Check their roles with the command above, then change the role or grant wcb_apply_jobs.

Company profile sidebar

You can show extra cards next to a company's profile, and change or remove the default ones with a filter. Every company page at /companies/<slug>/ has a sidebar on the right.

Default cards

The sidebar shows two cards with no setup:

Card What it shows
Similar Companies (wp-career-board/similar-companies-card) Companies in the same industry as the company being viewed
Job Alerts (wp-career-board/job-alert-card) A card that links candidates to job alerts

On screens wider than 1024px the sidebar sits in a 320px column to the right of the About, Company Details and Open Positions sections. On smaller screens it stacks below them.

Change the cards

Use the wcb_company_sidebar_blocks filter. Each entry is a block comment string. The filter receives the list and the company ID.

add_filter(
    'wcb_company_sidebar_blocks',
    function ( array $blocks, int $company_id ): array {
        $blocks[] = '<!-- wp:wp-career-board/job-stats /-->';
        return $blocks;
    },
    10,
    2
);

Return an empty array to show no cards.

To add your own markup, use these actions. Both receive the company ID and run inside the sidebar element:

add_action( 'wcb_company_sidebar_before', function ( int $company_id ) { /* echo markup */ } );
add_action( 'wcb_company_sidebar_after',  function ( int $company_id ) { /* echo markup */ } );

Blocks that fit the sidebar

Block Shortcode
Similar Companies (wp-career-board/similar-companies-card) [wcb_similar_companies count="5"]
Recent Jobs (wp-career-board/recent-jobs) [wcb_recent_jobs count="5"]
Featured Jobs (wp-career-board/featured-jobs) [wcb_featured_jobs perPage="3"]
Job Alerts (wp-career-board/job-alert-card) [wcb_job_alert_card]
Job Stats (wp-career-board/job-stats) [wcb_job_stats]

Recent Jobs lists the newest jobs across the whole board, not only this company's jobs.

Use the cards on other pages

  • Similar Companies has a Company ID setting. Set it to show similar companies for a specific company on any page. Leave it empty inside the company sidebar.
  • Job Alerts lets you edit the title, text, button text and URL. Use it on landing pages or in a footer.

Your theme's sidebar

On company pages, Career Board hides the theme's own sidebar so the company sidebar takes its place.

Content filtering for blocked members

When a member blocks another member, neither of them sees the other's job listings. You do not need to set anything up.

What is hidden

If either member has blocked the other, the signed-in member does not see the other's jobs in:

  • The job listings on the Find Jobs page and in the Job Listings block.
  • The single job page. It shows a 404 page instead.
  • The jobs REST API (GET /wcb/v1/jobs and a single job), which the mobile app also uses.

It works both ways. It does not matter which member did the blocking.

Visitors who are not signed in are not affected, because they have no block list.

Settings

There is no setting for this. To remove the effect, the member unblocks the other member from their account. See Moderation for how blocking works.

Google for Jobs and social sharing

You can get your open jobs into Google for Jobs and control how jobs and companies look when shared on social networks. The settings are under Career Board > Settings > Jobs > Search engines and sharing.

What is added

  • Job pages get JobPosting markup: title, description, date posted, closing date, employment type, company (name, website, logo), job location with country, salary with its unit (per hour, month or year), and whether candidates apply on your site. Remote jobs are marked as remote, with the country applicants may live in.
  • Company pages get Organization markup: name, website, logo, tagline and headquarters.
  • A job that has ended (past its deadline or closed) keeps its page but is no longer offered to Google as an open job.
  • Social sharing tags (Open Graph and Twitter card) use the job's image, or the company logo when the job has none.

Settings

Setting Default What it does
Google for Jobs On Adds the job and company markup. It stays on with Yoast SEO or Rank Math, which do not add job markup. Turn off only if another plugin already adds JobPosting.
Require a location On for new installs, off for existing sites The job form asks for a location unless the job is marked Remote. Google for Jobs leaves out jobs with no location unless they are remote.
Default country The country of your site language (for example US for English (United States)) Used in job addresses and as the country remote applicants may live in. A country name or 2-letter code both work.
Social sharing tags On Adds sharing tags. Skipped automatically when Yoast SEO or Rank Math is active, since they add their own.

Boards with jobs in several countries

Open Career Board > Job Locations, edit a location, and fill in Country. Jobs in that location use it; jobs in locations without a country use the default country.

Getting the most from Google for Jobs

  • Give each company a logo and website on its company profile.
  • Add a salary where you can; Google shows it on the listing.
  • Check a job with Google's Rich Results Test (search.google.com/test/rich-results) after changing these settings.

For developers

Filter wcb_job_posting_schema( $schema, $job, $data ) changes the JobPosting for a job, or returns an empty array to leave it out. The Country on a location is term meta _wcb_country, readable and writable over the REST API.

Import from WP Job Manager

You can move your jobs, applications and resumes from WP Job Manager into WP Career Board. Go to Career Board > Settings > Import.

The importer copies data. It does not change or delete anything in WP Job Manager. It runs in batches with a progress bar, so large imports do not time out.

Safe to run again

Each imported record remembers which WP Job Manager post it came from. If you run an import again, records that are already imported are skipped, not duplicated or overwritten.

Import jobs

  1. Go to Career Board > Settings > Import.
  2. Check the WP Job Manager Jobs card. It shows how many jobs were found and how many are already imported. It also previews how many filled jobs will be closed, how many company pages will be created, and how many applications are waiting.
  3. Click Import All Jobs.
  4. Wait for the progress bar to finish.

What comes across:

  • Title, description, categories, job types and tags.
  • Location, salary, currency and pay period (hourly, monthly or yearly). Other pay periods are not carried over.
  • Deadline (from the expiry date, or the job duration), featured flag and remote flag.
  • The application email or URL.
  • A company page built from the company name, website, tagline, Twitter and logo. A company with the same website or name is reused, so a company's jobs share one page. An employer with no company is linked to it.
  • Filled jobs are imported as Closed. Expired jobs are imported as Expired. Jobs that are neither live nor expired are imported as Pending.

WP Job Manager can be turned off after the import.

From the command line, wp wcb migrate wpjm --dry-run prints the preview without writing anything, and wp wcb migrate wpjm runs the import.

Import applications

If the WP Job Manager Applications add-on is active, a second card moves its applications onto the imported jobs. Import the jobs first.

WP Job Manager status WP Career Board status
New Submitted
Interviewed Shortlisted
Offer Shortlisted
Hired Hired
Rejected Rejected
Archived Rejected
  • The application goes to the candidate's account when the email matches a member. Otherwise it becomes a guest application.
  • The message becomes the cover letter.
  • Attached files are listed as links in the cover letter. The files stay where WP Job Manager stored them.
  • No emails are sent during the import.

Command line: wp wcb migrate wpjm-applications [--dry-run].

Import resumes

The WP Job Manager Resumes card is available when WP Career Board Pro is active. It imports candidate name and bio, professional title, contact email, location, photo, video URL, resume file, featured flag, expiry date, education, work experience, links and resume categories.

Command line: wp wcb migrate wpjm-resumes [--dry-run].

After importing

  1. Open Career Board > Jobs and check the statuses and key fields.
  2. Open Career Board > Settings > Pages and confirm the page assignments.
  3. Go to Settings > Permalinks in WordPress and click Save Changes.
  4. Review categories and job types under Career Board > Job Categories and Job Types.

Limits

  • Custom fields added by WP Job Manager extensions are not mapped. Re-enter them by hand.
  • The importer does not delete WP Job Manager data. Remove WP Job Manager yourself once you are happy with the result.

Integrations

BuddyPress, Reign Theme, BuddyX Pro, and other plugin integrations.

BuddyX and BuddyX Pro

You can run WP Career Board on the BuddyX or BuddyX Pro theme with no setup. The job board picks up the theme's colors, dark mode and job page templates. The integration turns on when the active theme is buddyx or buddyx-pro, including a child theme of either.

What you get

  • A BuddyX single job template and jobs archive template.
  • Colors that follow the theme. The plugin's primary color reads BuddyX's own color variables, and the components switch with the theme's dark mode.
  • A compatibility stylesheet, buddyx-compat.css, loaded wherever Career Board content shows: on job, company, resume and application pages, on the job archive and job taxonomy archives, and wherever a Career Board block renders.
  • An #OpenToWork badge on BuddyX Pro member profiles (see below).

Set up

Activate BuddyX or BuddyX Pro and WP Career Board. There is nothing to configure.

Change the colors

The plugin's primary color is the CSS variable --wcb-primary. To use a different color, override it in Appearance > Customize > Additional CSS or in your child theme. All Career Board styles use the .wcb-* class prefix and --wcb-* variables, so changing one variable restyles every block.

#OpenToWork badge

On BuddyX Pro member profiles, an "#OpenToWork" badge appears next to the member name when the member's _wcb_open_to_work user meta is set. WP Career Board Pro sets it when a candidate ticks open to work on their profile. The badge uses the buddyx_pro_after_member_name hook, so it is a BuddyX Pro feature.

Use your own template

If your theme has its own single-wcb_job.php or archive-wcb_job.php, it is used instead of the bundled BuddyX template. A generic single.php or archive.php does not count. See Template overrides.

Page width

Career Board pages follow the theme's content width. To set a fixed width, use Content Width (px) under Career Board > Settings > Advanced. Leave it at 0 to follow the theme.

BuddyPress

If BuddyPress is active with BuddyX, the plugin's BuddyPress integration also applies. See BuddyPress integration.

Reign theme

You can run WP Career Board on the Reign theme with no setup. The job board picks up Reign's colors and dark mode, uses Reign job page templates, and adds job links to Reign's navigation. The integration turns on when Reign is the active theme, including a child theme of Reign.

What you get

  • A Reign single job template and jobs archive template.
  • Colors that follow Reign. The plugin's primary color reads Reign's own color variable, so it follows the color palette you choose in Reign. The components switch with Reign's dark mode.
  • A compatibility stylesheet, reign-compat.css, loaded after Reign's main stylesheet wherever Career Board content shows: on job, company, resume and application pages, on the job archive and job taxonomy archives, and wherever a Career Board block renders.
  • Career Board links in Reign's navigation.

Set up

Activate Reign and WP Career Board. There is nothing to configure.

The integration adds these links through Reign's reign_nav_items filter:

  • Browse Jobs for everyone. It links to your Find Jobs page.
  • Employer Dashboard for users who can post jobs. It links to your Employer Dashboard page.
  • My Applications for users who can apply to jobs. It links to your Candidate Dashboard page.

Change the colors

The plugin's primary color is the CSS variable --wcb-primary. To use a different color, override it in Appearance > Customize > Additional CSS or in your child theme. All Career Board styles use the .wcb-* class prefix and --wcb-* variables, so changing one variable restyles every block.

Use your own template

If your theme has its own single-wcb_job.php or archive-wcb_job.php, it is used instead of the bundled Reign template. A generic single.php or archive.php does not count. See Template overrides.

Page width

Career Board pages follow the theme's content width. To set a fixed width, use Content Width (px) under Career Board > Settings > Advanced. Leave it at 0 to follow the theme.

BuddyPress

If BuddyPress is active with Reign, the plugin's BuddyPress integration also applies. See BuddyPress integration.

BuddyPress integration

You can bring your job board into your BuddyPress community. With BuddyPress active, employers and candidates get their own member types, and new jobs appear in the site-wide activity stream. There is nothing to configure. WP Career Board turns the integration on when it finds BuddyPress.

Member types

The integration registers two member types, Employer and Candidate. A user gets the matching type when their role is set to the WP Career Board Employer (wcb_employer) or Candidate (wcb_candidate) role. Users who only have another role added alongside their existing one do not get a member type.

You can use the member types anywhere BuddyPress supports them, for example member type directories or bp_get_member_type() in your templates.

Job activity

When a job is created already published, a BuddyPress activity item is posted to the site-wide stream. It reads "{name} posted a new job: {job title}", is posted under the job author, and links to the job. Members can comment on it like any other activity.

  • The activity component is wp-career-board and the type is wcb_job_posted.
  • The item is added on the wcb_job_created action. The activity item_id is the job ID.
  • A job that is created as Pending and published later does not post an item.
  • Submitting an application does not post an item.

There is no setting to turn the job activity off. To hide it, use BuddyPress's own tools for the wcb_job_posted type, or delete single items from the activity stream.

BuddyBoss Platform

The integration checks for the buddypress() function and uses standard BuddyPress member type and activity functions. It has no BuddyBoss-specific code.

Pro

WP Career Board Pro adds more BuddyPress features. See the Pro documentation.

AI Features

AI-assisted job description writing, candidate screening, and applicant matching.

AI features overview

With WP Career Board Pro and an AI provider key, you can offer candidates plain-language job search and cover letter drafts, and give employers a job description writer and applicant ranking. The plugin works fully without AI.

What Pro adds

  • AI Chat Search - candidates search jobs in plain language with the AI Chat Search block.
  • Recommended jobs - job matches for each candidate on their dashboard.
  • Applicant ranking - employers rank applicants by fit from the employer dashboard.
  • Cover letter writer - candidates draft a letter from the apply panel.
  • Description writer - employers use Generate with AI on the post-a-job form.

How to turn it on

  1. Install and activate WP Career Board Pro.
  2. Go to Career Board > Settings > AI Settings.
  3. Choose a provider and add its key.

Without a provider, the AI controls stay hidden. The AI Chat Search block shows a notice to site owners that asks them to finish AI Settings.

Where to read the full guide

The step-by-step guides live in the WP Career Board Pro docs, on the page named AI features. Provider details are on the Pro page AI providers and endpoints.

Set up AI providers

You can connect an AI provider to switch on the AI features. Setup is done in Pro.

Steps

  1. Go to Career Board > Settings > AI Settings.
  2. Choose a provider and enter its key.
  3. Save.

Pro supports OpenAI, Anthropic Claude and Ollama (self-hosted).

Where to read the full guide

Provider fields, models, matching setup and indexing existing jobs are covered in the WP Career Board Pro docs, on the page named AI features. Developers who want to add a provider can read the Pro page AI providers and endpoints.

AI features for candidates

You can search jobs in plain language, see recommended jobs and draft a cover letter, when the site owner has set up AI.

What you can do

  • Search in plain language. Use the AI Chat Search block on the page where the site owner placed it.
  • See recommended jobs. Your candidate dashboard shows job matches when AI matching is available.
  • Draft a cover letter. Use the generate control in the apply panel of a job.

If you do not see these controls, the site owner has not turned on AI.

Where to read the full guide

See the WP Career Board Pro docs, page named AI features.

AI features for employers

You can draft a job description and rank applicants by fit, when the site owner has set up AI.

What you can do

  • Draft a description. On the post-a-job form, click Generate with AI.
  • Rank applicants. Use the ranking button on your employer dashboard.

If you do not see these controls, the site owner has not turned on AI.

Where to read the full guide

See the WP Career Board Pro docs, page named AI features.

AI block and developer surface

You can place AI Chat Search on any page, and developers can read the filters the Free plugin uses to show or hide AI controls.

AI Chat Search block

Add the AI Chat Search block (wcb/ai-chat-search) from the block inserter. Pro provides it. Pro also provides the [wcbp_ai_chat_search] shortcode.

Gate filters in Free

Free shows an AI control only when the matching filter returns true. Each defaults to false.

Filter Controls
wcb_ai_description_enabled The Generate with AI button on the post-a-job forms
wcb_ai_ranking_available The applicant ranking button on the employer dashboard
wcb_ai_matching_available Recommended jobs on the candidate dashboard
wcb_ai_completion_available The cover letter writer in the apply panel

Where to read the full guide

REST routes, provider hooks and limits are in the WP Career Board Pro docs, on the pages named AI features, AI providers and endpoints and Hooks reference.

AI troubleshooting

You can use this page to find out why an AI control is missing.

The AI controls do not appear

  • Check that WP Career Board Pro is active.
  • Go to Career Board > Settings > AI Settings and confirm a provider and key are saved.
  • The AI Chat Search block shows site owners a notice until a provider and valid key are set.

Something else is wrong

See the WP Career Board Pro docs, page named AI features, for limits and provider behaviour.

Pro Features

Pro-only capabilities included with the Pro plugin.

Job map

You can show your job locations on a map, with a place search and a radius filter, using the Job Map block. This needs WP Career Board Pro.

What you can do

  • Add the Job Map block (wcb/job-map) to any page.
  • Let visitors click a pin to open the job.
  • Pick a map provider under Career Board > Settings > Integrations. Leaflet with OpenStreetMap is the default and needs no key. Google Maps and Mapbox need their own key.

Where to read the full guide

See the WP Career Board Pro docs, page named Job Map.

Multiple job boards

You can run several separate job boards from one WordPress site, for example "Tech Jobs" and "Marketing Jobs". This needs WP Career Board Pro.

What you can do

  • Create boards under Career Board > Settings > Boards.
  • Set options per board, such as credit cost, moderation, listing length and currency.

Where to read the full guide

See the WP Career Board Pro docs, page named Multi-Board Engine.

Analytics

You can see a snapshot of board activity and credit flow at Career Board > Settings > Analytics. This needs WP Career Board Pro.

Where to read the full guide

See the WP Career Board Pro docs, page named Analytics.

Job feed

You can publish your live jobs as an XML feed at /wcb-jobs.xml and submit it to job aggregators. This needs WP Career Board Pro.

What you can do

  • Turn the feed on under Career Board > Settings > Job Feed. It is off until you do.
  • Submit your feed URL to Indeed, or to another aggregator that accepts the same format.

Where to read the full guide

See the WP Career Board Pro docs, page named Job Feed.

Progressive web app

Your visitors can install your job board on a phone or desktop like an app. This needs WP Career Board Pro, and there is nothing to switch on.

What you can do

  • Change the app colour under Career Board > Settings > Brand.
  • Set a square site icon under Settings > General > Site Icon.

Where to read the full guide

See the WP Career Board Pro docs, page named PWA.

CSV import

You can import jobs in bulk from a CSV file. This needs WP Career Board Pro.

What you can do

  • Go to Career Board > Import and use the CSV → Jobs card.
  • Download a sample CSV to see the columns.

Where to read the full guide

See the WP Career Board Pro docs, page named Migration & CSV Import.

FAQ

Quick answers for site owners, employers and candidates.

FAQ for site owners

Why does settings say some pages are missing?

The banner at the top of Career Board > Settings lists, by name, each page that is not assigned or not published. Click Create Missing Pages. It keeps pages you already have, reuses a page that already holds the right block, and creates only what is missing. See Pages.

What is the registration URL?

/employer-registration/, the page titled Employer Registration. One form serves both roles: visitors choose Hire Talent to become employers or Find a Job to become candidates. If you moved it, the page assigned under Settings > Pages > Employer Registration Page is the one the plugin links to.

Should I use the setup wizard or settings?

Either. The wizard saves the same settings as the Settings tabs. Use the wizard for a first pass: pages, sign-ups, jobs, emails, spam protection and sample data. Use Settings for everything else and for later changes. You can run the wizard again at any time with Re-run Setup Wizard at the bottom of Settings. Pages you already have are kept.

Why are new jobs not published straight away?

Auto-Publish Jobs is off by default, so every job waits as Pending for your approval under Career Board > Jobs. Turn it on under Settings > Jobs to publish at once. See Moderation.

How do I remove all data when I delete the plugin?

Turn on Remove Data on Delete under Settings > Advanced, then delete the plugin. It erases jobs, applications, companies, resumes, uploaded resume files, settings and the Career Board roles, and cannot be undone. With the setting off (the default), deleting keeps everything so a reinstall picks up where you left off. Deactivating never deletes data. The WordPress pages the plugin created are not deleted either; remove them yourself.

Do candidates need a candidate role?

No. By default any signed-in member can apply, save jobs and keep a resume, which suits a community site. Turn on Require Candidate Role under Settings > Sign-ups to reserve the candidate experience for users with that role.

Can visitors apply without an account?

Yes, unless you turn on Require login to apply under Settings > Sign-ups. Guests give a name and email and get a confirmation and status emails. The site limits how many guest applications one connection can send per hour. If a guest later registers with the same email, their earlier applications move to the new account. See Apply as a Guest.

How do I change the sender of Career Board emails?

Set From Name, From Email and Admin Notification Email in the Sender card under Settings > Emails. Use an address on your own domain and an SMTP plugin for reliable delivery. See Email Notifications.

How do I turn off Google for Jobs markup?

Untick Google for Jobs under Settings > Jobs > Search engines and sharing. Leave it on unless another plugin already adds job markup. See Google for Jobs and social sharing.

How do I make the plugin's pages match my theme?

Pages and dashboards follow your theme. To change how a single job or company page is built, copy the plugin's template into your theme. Site Health then tells you when the plugin's version moves ahead of your copy. See Template Overrides.

FAQ for employers

Why is my job not showing on the job board?

Check these in order:

  1. Pending: the site holds new jobs for approval. The status shows in your dashboard job list.
  2. Awaiting payment: the job is approved and waiting for credits on sites that charge for postings.
  3. Expired: the deadline passed. Click Reopen for a new listing period.
  4. Rejected: edit the job and click Resubmit.

If none of these apply, ask your site admin whether the job was hidden by reports or a ban. See Job missing from Find Jobs.

Why did my job expire?

A job runs until its deadline. That is the date you set, or the site's default listing length, which is 30 days unless the site owner changed it. After the deadline the job stops taking applications and leaves the listings at the next hourly check. On older sites this only happens once the site owner has clicked End jobs at their deadline under Settings > Jobs. Its page stays up and says it has expired, so shared links keep working. Applications you already received stay in your dashboard.

You get an email 3 days before the deadline and another when the job expires. Click Reopen to start a new listing period. See Manage your jobs.

How do credits work?

Credits are part of WP Career Board Pro, on sites that charge for postings. See Your credit balance and the Pro documentation.

How do I export my applicants?

Open Employer Dashboard > Applications, select a job and click Export CSV. The file has every applicant for that job, not only the ones loaded on screen. See Applicant CSV export.

Can candidates see my notes and ratings?

No. Notes and star ratings (1 to 5) are visible only to the job's employer and site staff.

What happens to applicants when I close a job?

Applicants you have not hired or rejected move to Closed, and each gets a status email. Applicants you already decided on keep their status. Reopening the job puts the closed applicants back to their earlier status without emailing them again.

Why can't I apply to a job as an employer?

Nobody can apply to their own job. A member who can post jobs but does not have the apply capability also cannot apply. Use a separate candidate account to test the apply flow.

FAQ for candidates

Do I need an account to apply?

Usually not. Most sites let you apply with your name and email. If the site turns on Require login to apply, the job page shows Sign in to apply. To register, use the site's Employer Registration page and choose Find a Job.

What do "Not selected" and "Position closed" mean?

Not selected means the employer chose not to move forward. Employers see this status as "Rejected". Position closed means the employer closed the job before deciding, for example because the role was filled. You get an email in both cases. See My applications.

Why can't I apply again to the same job?

You can apply to a job once. If you withdraw, you can apply again. As a guest, you also cannot apply to the same job with the same email within 24 hours.

Can I withdraw an application?

Yes, from Candidate Dashboard > My Applications. You can withdraw until the application has an outcome (hired, not selected, position closed or job removed), unless the site turned withdrawing off. The application stays in your list as Withdrawn and the employer is emailed.

I applied as a guest. How do I see my application?

Register with the same email you applied with. Your earlier guest applications move to the new account when it is created and appear in My Applications. If you already had an account when you applied as a guest, they stay under the guest email.

Who can see my resume file?

Only you, site staff, and the employer of a job you applied to with that file can open it. See Profile, account and notifications.

How do I stop deadline reminder emails?

Untick them under Candidate Dashboard > Settings > Email Notifications. Emails about your account, applications and payments are always sent.

How do I delete my account?

Go to Candidate Dashboard > Settings > Privacy & My Data and click Delete my account. Your account is locked at once and deleted after a waiting period, 14 days by default. To cancel, sign in again before then and choose Keep my account. Employers keep your applications with your details removed. They show as "Deleted candidate".

Troubleshooting

Fixes for the problems people hit most often.

Troubleshooting: pages and themes

Find your symptom below. Each entry gives the cause and the fix.

Site Health says your theme has outdated template copies

Symptom. Under Tools > Site Health > Status, the item "Your theme has outdated WP Career Board template copies" is listed as a recommended improvement. It names your file and the plugin file to compare it with.

Cause. Your theme (or child theme) contains its own copy of single-wcb_job.php or single-wcb_company.php. With WP Career Board Pro, single-wcb_resume.php is checked too. A plugin update changed the plugin's version of that template, and your copy is older or has no Template version line. Your copy still works, but it does not get the plugin's changes.

Fix. Open the plugin file named in the item, carry your customisations over to a fresh copy of it (or merge the plugin's changes into yours), and set the Template version line in your copy to the plugin's. The item clears on the next check. If you do not need the customisation, delete your copy. See Template overrides.

A block theme shows a blog-style loop on job, company or category archives

Symptom. The jobs archive, the company archive or a job category page shows a list of full posts under a heading such as "Archives: Jobs" instead of the job cards.

Cause. On a block theme, WordPress renders the theme's own archive template. The plugin registers archive templates that hold the Job Listings and Company Archive blocks, but a template file with the same slug in your theme (archive-wcb_job, archive-wcb_company, taxonomy-wcb_category, taxonomy-wcb_job_type, taxonomy-wcb_tag, taxonomy-wcb_location, taxonomy-wcb_experience) takes priority over the plugin's. A customised template that lacks the block prints the generic loop.

Fix. Open Appearance > Editor > Templates. If a customised template with one of those slugs exists, add the Job Listings (or Company Archive) block to it, or remove the customisation so the plugin's template is used. If the file lives in the theme folder, edit or delete it there. See Block themes.

Job, company and resume pages are narrower or wider than the rest of the site

Cause. Career Board pages follow your theme's content width by default. If someone set Content Width (px) under Settings > Advanced, that value wins. Values are limited to 720 to 1920 px.

Fix. Set Content Width (px) back to 0 to follow the theme, or to the width you want.

Pages return 404 after the setup wizard

Fix. Go to Settings > Permalinks and click Save Changes to flush rewrite rules. If a page is blank, edit it and insert the matching block. See Troubleshooting.

The missing pages banner will not go away

Cause. A page is unassigned or not published. The banner names each one.

Fix. Click Create Missing Pages, or assign a published page under Settings > Pages. A page that exists but is a draft or in the trash counts as missing.

Troubleshooting: jobs and applications

Find your symptom below. Each entry gives the cause and the fix.

A job is missing from Find Jobs

Symptom. A job exists in wp-admin or in the employer's dashboard, but it is not in the listings.

Check in this order:

  1. Status. Only Published jobs list. In Career Board > Jobs, Pending, Draft, Closed, Expired and Rejected jobs do not. A job marked Awaiting payment was approved and is waiting for the employer's credits (Pro credits).
  2. Deadline. A job past its deadline leaves the listings, feeds and sitemap at the next hourly check. Its page still opens and says it has expired. The employer can reopen it from the dashboard for a new deadline.
  3. End jobs at their deadline. On sites that were set up before this option existed, jobs past their deadline stay listed until you click End jobs at their deadline under Career Board > Settings > Jobs > When a job ends. The button only shows while the option is off.
  4. Hidden by moderation. In the Jobs list, a hidden job shows Hidden: reported or Hidden: employer banned. A job is hidden after enough members with standing report it (3 by default). Use Dismiss flag on a reported job, or unban the employer, and the job returns.
  5. Filters. The visitor's active filters, shown as pills above the results, or a filter in the address bar can hide it. Click Clear all.
  6. Cache. A full-page cache can serve an old listing. Purge it.

If WP-Cron does not run on your site, run wp wcb job run-expiry or set up a real cron job for wp-cron.php. The command does nothing while End jobs at their deadline is off.

An expired job needs to go live again

The employer clicks Reopen on the job in their dashboard. The job gets a new deadline, using the same default length as a new job.

There is no apply button

  • The job's deadline passed or it was closed. An expired job page offers no way to apply.
  • Require login to apply is on and the visitor is signed out. The page shows Sign in to apply.
  • The visitor is an employer. A member who posts jobs cannot apply, and nobody can apply to their own job.
  • Require Candidate Role is on and the visitor does not hold the Candidate role.
  • The employer set an Apply URL. The page shows Apply on Company Site instead of the on-site form.

Symptom. A candidate applied as a guest, then created an account, but My Applications is empty.

Cause. Guest applications are linked to an account when the account is created, and only when the account's email is exactly the email used on the application. Up to 200 matching applications are moved. They are not moved if the account already existed when the person applied, or if they registered with a different email.

Fix. Nothing is lost. The employer still sees the application under the guest email. Ask the candidate to sign in before applying next time, and to register with the same email.

An employer cannot change an application's status

Cause. Withdrawn, Closed (position closed) and removed-job applications are final. The status control is replaced by a badge, and a change through the API answers 409. Reopening the job restores Closed applicants to their earlier status.

"Too many sign-ups from your network"

Symptom. New members get a 429 error "Too many sign-ups from your network. Please try again in an hour." even though few people are signing up.

Cause. Sign-ups are limited to 5 an hour per IP address. Behind a proxy or CDN every visitor arrives from the proxy's address, so they all share one count.

Fix. Go to Settings > Anti-Spam > Visitor IP address and choose your proxy (for example Cloudflare). You can also change the limit in code with the wcb_registration_rate_limit filter (0 turns it off). Guest applications have a similar limit of 10 an hour. See Abuse prevention.

A candidate cannot open a resume file

Symptom. A resume link returns "File not found".

Cause. Resume and CV files are private. Only the candidate, site staff and the employer the candidate applied to can open them. Anyone else, including a signed-out visitor, gets the same "File not found" as for a missing file.

Fix. Sign in as the employer who received the application, or as staff.

If Site Health under Tools > Site Health says some candidate files could not be moved out of the public uploads folder, fix the folder permissions, then run wp wcb migrate files.

If Site Health says candidate files can be fetched directly, your server ignores .htaccess (common on nginx). Add the rule Site Health prints.

Jobs in a Google for Jobs test are missing fields

Cause. Google leaves out a job with no location unless it is remote, and a job that has ended gets no markup.

Fix. Turn on Require a location under Settings > Jobs, give the job a location or mark it Remote, and check that the job has not passed its deadline. See Google for Jobs and social sharing.

Troubleshooting: emails and accounts

Find your symptom below. Each entry gives the cause and the fix.

Career Board emails are not arriving

Work down this list:

  1. Is the email switched on? Each email has an Enabled switch under Career Board > Settings > Emails.
  2. Is it in the log? The Email activity log on the Emails tab lists each send with its template, recipient and status (Sent, Failed, Sent (test), Failed (test)). A Sent row means WordPress handed the message to your mail system, so the problem is delivery. A Failed row means wp_mail() refused it. Use Send test on a template to check.
  3. Is delivery set up? Install an SMTP plugin and connect a sending service. WordPress's default mail function is often rejected or filed as spam.
  4. Is the sender right? Check From Name and From Email in the Sender card. Use an address on your own domain.
  5. Did the member opt out? Two emails are optional: the application deadline reminder for candidates and the job ending soon email for employers. Members turn them off under Settings > Email Notifications in their dashboard. Emails about accounts, applications and payments always send.
  6. Was the row removed? Log rows older than Keep Email History (days) under Settings > Advanced are deleted automatically. The default is 180 days.

A new member did not get a welcome email

Cause. The Welcome email is not sent while Email Verification is on, because the confirmation email goes first and serves as the welcome.

Fix. Nothing is wrong. To send the welcome email, turn Email Verification off under Settings > Sign-ups.

A new member cannot sign in

Symptom. Sign-in says "Please confirm your email address first."

Cause. Email Verification is on and the member has not opened the link in the confirmation email. The email may be in spam, or the link expired.

Fix. The sign-in message and the expired-link page both offer Send me a new link. A new link can be requested about once a minute. If the confirmation email never arrives, work through "Career Board emails are not arriving" above.

A guest did not get status emails

Cause. Guests are emailed only if they gave an email address when applying. The employer dashboard says so when this is the case: "This applicant left no email address, so they were not notified."

The mobile app cannot sign in with a password

Cause. App Password Sign-In is off by default. It also needs a secure (HTTPS) connection, and you should leave it off if you use two-factor authentication.

Fix. Turn it on under Settings > Mobile App, or have members use the app's Connect with WordPress option. That option sends them to your normal login page and needs no setting.

A member asked to delete their account by mistake

Fix. The account is locked, not yet deleted, for a waiting period of 14 days by default. The member can sign in again and choose Keep my account. You can also cancel it for them with Keep account under Settings > Privacy > Pending account deletions. Both send an "Account Deletion Cancelled" email.

A member cannot change their email

Cause. Changing the email needs the member's Current password. Without it the save is refused.

The sign-up form says registration is closed

Cause. WordPress's Anyone can register setting under Settings > General is off, so the sign-up forms show a "registration closed" notice. Open Sign-Up under Career Board > Settings > Sign-ups shows the current state of that setting.

Developer Guide

Hooks reference, REST API, WP-CLI commands, and extension cookbook.

Developer Guide - Overview

You can extend WP Career Board without editing its source. Use actions and filters to change behavior, the wcb/v1 REST API to read and write data, WP-CLI to automate tasks, and theme template overrides to change the markup of job and company pages.

Use this guide when:

  • You are building a custom job-board theme or feature.
  • You are writing a companion plugin that integrates with Career Board, such as a Slack notifier, a CRM sync or a custom apply flow.

If you run a job board and do not write code, use the for-employers, for-candidates and admin-guide sections instead.

How the plugin is organized

Layer Where Purpose
Blocks blocks/<name>/render.php and view.js Customer-facing UI, rendered on the server and hydrated by the Interactivity API
Shortcodes core/class-plugin.php Shortcode wrappers around the frontend blocks
REST API api/endpoints/class-*-endpoint.php Routes under wcb/v1, all extending WCB\Api\RestController
Modules modules/<area>/ Feature areas: account, antispam, applications, boards, candidates, employers, gdpr, jobs, moderation, notifications, search, seo
Core services core/class-*.php Shared services such as settings, abilities, locations and the theme accent bridge
CLI cli/class-*.php The wp wcb commands

Conventions:

  • Functions, hooks, options and meta keys are prefixed wcb_.
  • Abilities use the wcb/<slug> format, for example wcb/post-jobs.
  • REST routes register through WCB\Api\RestController.

Contents

Doc What's inside
02-hooks-reference.md The actions and filters the plugin fires, grouped by area
03-rest-api.md The REST routes with permissions, parameters and response fields
04-wp-cli.md WP-CLI commands and options
05-extension-cookbook.md Short recipes for common extension tasks
06-template-overrides.md Copying a plugin template into a theme, and the Site Health check that keeps it current

Companion plugin development

If you are building a companion plugin like Pro, read the Pro developer guide page "Extending Free - The Canonical Pro Contract". It shows how an add-on extends Free's hooks, blocks and credit flow without forking it.

Hooks Reference - Actions and Filters

Use these actions and filters to change how WP Career Board behaves, react to events such as a new job or application, and add your own fields, tabs and emails. Every hook below is fired by the Free plugin, except where a row says Pro fires it. Pro adds its own hooks; see the Pro developer guide.

How to use this list: each hook is fired with do_action() or apply_filters() in the plugin source. To see the exact arguments at the call site, run grep -rn "'wcb_job_created'" wp-content/plugins/wp-career-board/ and open the match. Hooks whose name ends in <slug> are dynamic. The Pro-side hooks are listed in the Pro developer guide, page "Hooks Reference".

Jobs

Hook Type Fires when
wcb_pre_job_submit Filter Before a job is created. Args: $error (null), $request. Return a WP_Error to stop the request.
wcb_before_create_job Filter Change the wp_insert_post arguments before a job is created. Args: $post_data, $request.
wcb_job_created Action After a job is created. Args: $job_id, $request.
wcb_before_update_job Filter Change the update arguments before a job is saved. Return a WP_Error to stop the update. Args: $data, $post, $request.
wcb_job_updated Action After a job is updated. Args: $job_id, $request.
wcb_before_delete_job Filter Before a job is moved to the trash by DELETE /jobs/{id}. Return a WP_Error to stop it. Args: $can (true), $post, $request.
wcb_job_deleted Action After a job is moved to the trash by DELETE /jobs/{id}. Args: $job_id.
wcb_job_republished Action After an expired or closed job is set back to published. Args: $job_id, $previous_status.
wcb_job_approved Action When a pending job changes to published. Args: $job_id.
wcb_job_rejected Action When a moderator rejects a job (REST or WP-CLI). Args: $job_id, $reason.
wcb_job_expired Action When a job is set to expired. The hourly sweep fires it only for jobs whose deadline passed in the last 7 days; wp wcb job expire always fires it. Args: $job_id.
wcb_check_job_expiry Action The WP-Cron event that runs the job-expiry sweep, scheduled hourly. wp wcb job run-expiry fires it too.
wcb_job_expiring_soon Action Once per deadline, 3 days before a job ends, for its employer. Args: $job_id, $days_left.
wcb_deadline_reminder Action Once per candidate who saved a job but has not applied, 3 days and 1 day before the deadline. Args: $user_id, $job_id, $days_left. The cron event that drives it is wcb_send_deadline_reminders.
wcb_job_featured_expired Action A job's featured period ended. Args: $job_id.
wcb_featured_expired Action Fires right after wcb_job_featured_expired, for the same event. Args: $job_id. The daily cron event behind both is wcb_expire_featured_jobs.
wcb_job_default_status Filter The status a new job gets. Return publish, pending or draft; anything else is ignored. Args: $status, $request.
wcb_job_default_expiry_days Filter The listing length in days when the request has no deadline. Args: $days, $request.
wcb_job_deadline_passed Filter Keep applications open past the stored deadline, or close them early. Args: $passed, $job_id, $deadline.
wcb_job_board_id Filter Resolve which board a job belongs to. Args: $board_id, $job_id.
wcb_job_allow_new_terms Filter Whether a submission may create new category, type, location or experience terms. Default: moderators only. Tags are always free-form. Args: $allow, $request.
wcb_job_payment Filter Return true when the job is paid or free, or a WP_Error (402) when it is not. $event is create, resubmit, republish, board_change or feature. Pro's credits answer it. Args: $paid, $job_id, $event.
wcb_job_imported Action After a job is imported from WP Job Manager, once its meta and terms are written. Args: $new_id.

Job search and listings

Hook Type Use it to
wcb_job_search_args Filter Change the WP_Query arguments of every job search (REST, the listing's first paint, alerts). Put every value that changes the result in $args, because the REST cache key is built from them. Args: $args, $params.
wcb_jobs_post_filter Filter Change the list of prepared job rows that GET /jobs returns, before it is cached. Args: $jobs, $query, $request.
wcb_jobs_collection_params Filter Change the query parameters GET /jobs accepts.
wcb_jobs_allowed_meta_filters Filter The meta keys the metaFilter block attribute may query.
wcb_job_listings_query_args Filter Change the WP_Query arguments of the listings block's first paint.
wcb_job_listings_board_options Filter The boards offered in the listings board filter.
wcb_job_listings_api_base Filter The REST base URL the listings block fetches from.
wcb_job_listing_data Filter Change the data of one listing card. Args: $card, $post.
wcb_default_filter_order Filter Reorder or extend the listings filter groups. Default ['type', 'experience', 'category', 'tags', 'location', 'board', 'salary']. A block's saved filterOrder is intersected with this list, so a group missing here is never shown.
wcb_job_listings_filters_top Action Top of the listings filter panel. No arguments.
wcb_job_listings_filters_bottom Action Bottom of the listings filter panel. No arguments.
wcb_before_card_footer Action Inside each job card, before the footer row. Args: $job_card, $job_post.
wcb_after_card_footer Action Inside each job card, after the footer row. Args: $job_card, $job_post.
wcb_job_single_after_description Action Right after the description on the job page. Args: $job_id. Pro prints its custom-field details here.
wcb_job_posting_schema Filter Change a job's Google for Jobs JobPosting data, or return [] to leave the job out. Args: $schema, $job, $data.

Listing filter chips for custom fields toggle meta_<key> in the listing's activeFilters (actions.toggleMetaChip with context { metaKey, metaValue }). A meta_<key> URL parameter is applied on the first paint.

Job form

Hook Type Use it to
wcb_job_form_fields Filter Add field groups to the job form. Fields you define here are saved with the job. Args: $groups, $board_id.
wcb_job_form_step1_fields Action Print markup in step 1 of the 4-step job form. Args: $attributes. The same applies to wcb_job_form_step2_fields, wcb_job_form_step3_fields and wcb_job_form_step4_preview.
wcb_job_form_simple_extra_fields Action Print markup in the single-page job form. Args: $attributes.
wcb_job_form_initial_state Filter Add keys to the 4-step form's Interactivity API initial state. Args: $state, $attributes.
wcb_job_form_simple_initial_state Filter The same for the single-page form. Args: $state, $attributes.

Markup printed by the step and extra-field actions is not collected when the form is submitted. Use wcb_job_form_fields for fields that must be saved.

Moderation and reporting

Hook Type Fires when
wcb_job_reported Action A logged-in user reports a job. A second report from the same user is ignored. Args: $job_id, $reason, $user_id.
wcb_job_flag_resolved Action A moderator dismisses or unpublishes a reported job. Args: $job_id, $action (dismiss or unpublish).
wcb_moderate_jobs_ability_check Filter Grant moderation for one job to a user who lacks the ability. Return true to allow. Args: $allowed (false), $job_id.
wcb_reporter_has_standing Filter Whether a reporter's report counts toward the auto-hide. Default: the account is at least a week old, or the member has an application or a published job. Args: $standing, $user_id.
wcb_member_reported Action A member reports another member. A second report from the same reporter is ignored. Args: $target_user_id, $reason, $reporter_user_id.
wcb_member_blocked Action A member blocks another member. Args: $blocker_user_id, $blocked_user_id.
wcb_member_unblocked Action A member unblocks another member. Args: $blocker_user_id, $unblocked_user_id.
wcb_member_flags_resolved Action Reports on a member were dismissed from the Candidates or Employers list. Args: $user_id.
wcb_member_suspended Action An admin suspends a member with the Candidates list bulk action. Args: $user_id.
wcb_member_unsuspended Action An admin lifts a suspension from the Candidates list. Args: $user_id.
wcb_employer_banned Action An admin bans an employer from the Employers list. Args: $user_id.
wcb_employer_unbanned Action An admin lifts an employer ban. Args: $user_id.

A ban (the _wcb_employer_banned user meta, from any writer) hides the member's public jobs, company page and resumes, and removing it restores them. Hidden posts carry _wcb_hidden_by (ban or reports) and _wcb_hidden_status.

Account deletion

Hook Type Fires when
wcb_account_deletion_requested Action A member schedules deletion of their own account. Args: $user_id, $scheduled_timestamp.
wcb_account_deletion_cancelled Action A member cancels a pending deletion. Args: $user_id.
wcb_account_deletion_executing Action Immediately before wp_delete_user() runs, from the daily wcb_process_account_deletions cron or at once when the grace period is 0. Args: $user_id.
wcb_account_deletion_grace_days Filter Days between a deletion request and the deletion. Default 14; 0 deletes at once.
wcb_account_deletion_password_required Filter Return false to skip the password check, for example for SSO accounts. Args: $required, $user_id.

Applications

Hook Type Fires when
wcb_pre_application_submit Filter Before an application is created. Args: $error (null), $request. Return a WP_Error to stop it.
wcb_before_create_application Filter Change the wp_insert_post arguments for a new application. Args: $data, $job_id, $candidate_id, $request. $candidate_id is 0 for a guest.
wcb_application_submitted Action After an application is created. Args: $app_id, $job_id, $candidate_id (0 for a guest).
wcb_application_status_changed Action Once per real status change that should notify the applicant. Silent changes (a job closing or reopening, migrations) skip it. Args: $app_id, $old_status, $new_status, $reason, $actor (0 for the system).
wcb_application_status_updated Action Every status change, including the silent ones. Use it to keep data in step with the status; do not send messages from it. Args: $app_id, $old_status, $new_status, $reason.
wcb_application_status_label Filter The words shown for a status. Args: $label, $status, $audience (candidate, employer or admin). Candidates see "Not selected" where employers see "Rejected".
wcb_employer_actionable_statuses Filter The statuses an employer may set. Default: submitted, reviewing, shortlisted, rejected, hired.
wcb_application_withdrawn Action A candidate withdrew. The application stays with status withdrawn and the employer is emailed. Args: $app_id, $job_id, $candidate_id.
wcb_application_deleted Action Before an application post is permanently deleted. Args: $app_id, $job_id.
wcb_close_job_applications Action A background batch that moves a closing job's undecided applications to job_removed or position_closed. Scheduled by the plugin; listen, do not fire. Args: $job_id, $status.
wcb_application_form_fields Action Inside the apply panel on the job page. Print extra markup here. It is not validated or saved for you. Args: $job_id.
wcb_application_form_fields_groups Filter Add field groups to the apply form. The plugin renders, validates and saves them as _wcb_application_field_<key>. Args: $groups, $job_id.
wcb_guest_applications_claimed Action An account took over the guest applications sent from its email address. This happens once the address is proven (email confirmed, or a password set from an emailed link), or at once for an account an admin or WP-CLI created. Args: $user_id, $claimed_application_ids.
wcb_resume_pdf_attachment_id Filter The attachment ID used as a candidate's resume PDF. Args: $id (0), $resume_id, $candidate_id.

Application statuses are submitted, reviewing, shortlisted, rejected, hired, withdrawn, job_removed and position_closed.

Sign-up and accounts

Hook Type Fires when
wcb_pre_registration Filter Before a candidate or employer account is created. Return a WP_Error to refuse the sign-up. Args: $error (null), $request.
wcb_registration_rate_limit Filter Sign-ups one IP may make per hour. Default 5; 0 turns the limit off.
wcb_candidate_registered Action After a candidate signs up. Args: $user_id.
wcb_employer_registered Action After an employer signs up. Args: $user_id, $company_id.
wcb_email_verification_requested Action A new account needs to confirm its email. The confirmation email listens here. Args: $user_id, $verify_url.
wcb_email_verified Action A member confirmed their email address from the link. Guest applications from that address are claimed here. Args: $user_id.
wcb_employer_login_redirect_enabled Filter Return false to stop the redirect to the employer dashboard after login. Args: $enabled, $user, $redirect_to, $requested_redirect_to.
wcb_candidate_requires_role Filter Return true to require the wcb_candidate capability (or manage_options) for candidate actions instead of allowing any logged-in member. Default follows the candidate_requires_role setting, which is off.
wcb_candidate_form_fields Filter Add fields to the candidate profile form. Args: $fields, $user_id.
wcb_company_form_fields Filter Add fields to the company profile form. Args: $groups, $company_id.
wcb_save_custom_field Filter Change or reject a custom field value before it is saved. Return null to skip saving. Args: $value, $key, $owner_id.
wcb_can_view_public_resume Filter Whether a viewer may open a public resume. Pro applies the owner's access setting. Args: $allowed, $post_id, $viewer_id.
wcb_private_file_can_download Filter Grant a private resume file to another audience. Args: $allowed, $attachment_id, $user_id.
wcb_resume_rest_query_args Filter Change the resume REST query. Args: $args, $request.
wcb_resume_sitemap_query_args Filter Change the resume sitemap query. Args: $args.

Personal data

Hook Type Args Purpose
wcb_personal_data_providers Filter $providers Register personal data once for the WordPress exporter, the eraser and user deletion. Add 'key' => array( 'label' => string, 'export' => callable, 'erase' => callable ). Both callables receive array( 'user_id' => int, 'email' => string ); user_id is 0 for a guest, and closing is true only when the account itself is being deleted. export returns WordPress exporter items. erase returns array( 'removed' => int, 'retained' => int, 'messages' => string[] ).
wcb_logs_pruned Action $cutoff After the daily prune of email history older than Keep Email History. $cutoff is UTC Y-m-d H:i:s.

Credits and pricing

Hook Type Fires when
wcb_credits_enabled Filter Return true when credits are active (Pro).
wcb_employer_credit_balance Filter The employer's credit balance. Args: $balance (0), $user_id.
wcb_employer_credit_has_history Filter Whether the employer has held credits before, so a zero balance shows the low-balance warning. Args: $has_history, $employer_id.
wcb_credit_purchase_url Filter The URL the Buy Credits button points at.
wcb_credit_low_threshold Filter A balance below this shows the low-credits banner. Default 0 (no banner).
wcb_board_credit_cost Filter Credits needed to post to a board. Args: $cost, $board_id.
wcb_featured_upgrade_cost Filter What featuring a job costs. 0 hides the job-form checkbox and the My Jobs Feature action. Args: $cost.
wcb_board_currency Filter Override the currency of one board. Args: $currency, $board_id.
wcb_board_options_for_employer Filter Change the boards offered to an employer in the job form. Each entry is array( 'id' => int, 'title' => string ). Args: $options, $user_id.

Free fires these filters so blocks and the employer dashboard share one surface, but they return meaningful values only when Pro is active. In Free they default to credits off, an empty URL and a zero balance. Pro also fires wcb_job_republish_credit_cost (args: $cost, $post, $previous_status).

Active job limit

Hook Type Fires when
wcb_employer_active_job_limit Filter Maximum concurrently active jobs per employer; 0 means unlimited (default). Args: $limit, $user_id, $request.
wcb_employer_active_job_statuses Filter Post statuses that occupy a slot. Default array( 'publish' ). Args: $statuses, $user_id.
wcb_employer_active_job_limit_message Filter The message shown when the cap blocks a post. Args: $message, $limit, $count.

Cap the number of live listings one employer may hold:

add_filter( 'wcb_employer_active_job_limit', static fn(): int => 5 );

add_filter(
    'wcb_employer_active_job_limit_message',
    static function ( string $message, int $limit ): string {
        return sprintf( 'Free plan allows %d live jobs. Close one or use credits.', $limit );
    },
    10,
    2
);

The limit is checked in POST /wcb/v1/jobs, and again in PUT /wcb/v1/jobs/{id} when a listing goes back to publish. The job being republished is not counted against itself. A blocked request returns HTTP 403 with code wcb_active_job_limit; data.limit and data.count carry the numbers.

REST response shaping

The wcb_rest_prepare_* filters run after the controller builds a row and before it is returned.

Hook Adjusts Filter args
wcb_rest_prepare_job A job (single and list items) $data, $post, null
wcb_rest_prepare_application An application $data, $post, $request, $viewer_role
wcb_rest_prepare_candidate A candidate profile $data, $user, null
wcb_rest_prepare_company A company profile $data, $post, null
wcb_job_response A job, fired just before wcb_rest_prepare_job $data, $post
  • For wcb_rest_prepare_candidate the second argument is a WP_User.
  • The third argument is null on the job, candidate and company filters; do not rely on it.
  • The fourth argument of wcb_rest_prepare_application is candidate or employer, so you can redact fields per audience.

Pro adds wcb_rest_prepare_board, wcb_rest_prepare_board_stage, wcb_rest_prepare_notification and wcb_rest_prepare_resume.

Two more filters shape API output: wcb_admin_email_log_response ($response, $request) for the email-log route, and wcb_rest_app_config ($data) for GET /settings/app-config; see 03-rest-api.md.

Blocks, pages and assets

Hook Type Use it to
wcb_module_renders Filter Let an add-on supply dashboard modules. Args: $renders (empty array, keyed by module name, values are markup) and $context (candidate-dashboard, employer-dashboard or archive-toolbar). Pro supplies its notification bell this way.
wcb_candidate_resumes_state Filter Add resume-limit keys (such as maxResumes and resumeCount) to the candidate dashboard's Interactivity state. Args: $state, $candidate_user_id.
wcb_company_sidebar_before Action Company profile, before the sidebar cards. Args: $company_id.
wcb_company_sidebar_after Action Company profile, after the sidebar cards. Args: $company_id.
wcb_company_sidebar_blocks Filter Change the sidebar block list. Default: Similar Companies and Job Alerts. Each entry is a block comment string. Args: $blocks, $company_id.
wcb_shortcode_attr_aliases Filter Add to the lowercase to camelCase attribute map, so [wcb_job_listings boardId="1"] works.
wcb_search_active_shortcodes Filter Shortcode prefixes (default wcb_, wcbp_) that mark a page as a Career Board page.
wcb_page_needs_frontend_assets Filter Return true to load the Career Board frontend styles on a request the plugin does not detect (for example blocks rendered outside the post content).
wcb_app_page_ids Filter Add page IDs that get the wcb-page body class and page template.
wcb_apply_page_class Filter Return false to keep a page from getting the wcb-page body class and the plugin page template. Args: $is_wcb_page, $page_id.
wcb_fullwidth_block_names Filter Add a block name (namespace/slug) that triggers the full-width page template.
wcb_container_max_width Filter The content column width in pixels. The value is kept between 720 and 1920.
wcb_theme_accent_primary Filter The primary accent colour blocks use. Args: $accent, $template.
wcb_industries Filter Add or rename the industries offered on the company profile.
wcb_currency_catalog Filter Add a currency to the salary-currency dropdown.
wcb_bot_ua_pattern Filter The PCRE pattern (no delimiters) that detects bot User-Agents. Job views from bots are not counted.
wcb_job_views_retention_days Filter Days of wcb_job_views analytics rows kept before the daily prune. Default 90, never below 30.

Settings, setup and email

Hook Type Use it to
wcb_settings_schema Filter Add setting keys: $fields['my_key'] = array( 'default' => false, 'sanitize' => 'rest_sanitize_boolean' ). A key outside the schema is never written by a settings form.
wcb_settings_sanitize Filter Change the cleaned settings before they are saved. Args: $output, $input.
wcb_install_default_settings Filter Change the default settings seeded on install.
wcb_settings_tabs Filter Add a tab to the Settings screen (slug => label).
wcb_settings_tab_groups Filter Change the Settings sidebar groups: group key => label and tabs (slugs, in order). A tab not listed lands in "Site".
wcb_settings_tab_<slug> Action Render the content of a tab you added. Args: $settings. The form around your content is yours to print.
wcb_page_definitions Filter Add a page the setup wizard and Pages tab create: title, slug, content (block markup), label, desc, optional aliases. Register the page's setting key in wcb_settings_schema too.
wcb_page_settings, wcb_wizard_required_pages Filter Deprecated. Still applied; use wcb_page_definitions.
wcb_safer_defaults_notice Filter The list shown once to owners of sites created before the current defaults.
wcb_import_extra_cards Action Print extra cards after the last built-in card on the Import page.
wcb_wizard_steps Filter Add a step to the setup wizard. Each entry, keyed by a unique slug, has title, template (absolute path) and button_text.
wcb_wizard_completed Action After the wizard's last step.
wcb_wizard_force_render Filter Show the wizard even when setup is complete.
wcb_wizard_complete_redirect Filter The URL the wizard redirects to when it finishes.
wcb_sample_data_installed Action After the wizard installs sample content. Args: $created_ids.
wcb_sample_data_removed Action After the wizard removes sample content.
wcb_registered_emails Filter Add an email object to the email registry. See the cookbook.
wcb_email_template_dirs Filter Add a folder searched for {slug}.php email templates. A theme file at {theme}/wp-career-board/emails/{slug}.php still wins first.
wcb_apply_ai_notice Filter The notice above Submit Application when applications may be screened with AI. An empty string shows nothing. Args: $text, $job_id.
wcb_template_override_docs_url Filter The "Learn how template overrides work" link in Site Health.
wcb_overridable_templates Filter Add a theme-overridable template to the Site Health version check. See Template Overrides.
wcb_companions Filter Add an entry to the companion-plugin catalog.

wcb_settings_tab_emails and wcb_settings_tab_antispam are the built-in renderers for those two tabs. Do not use them to add settings; add your own tab instead.

Notifications

Hook Type Args Purpose
wcb_notification_created Action $notification, $contract Fires once per notification-worthy event so a notification center (such as BuddyNext) can mirror it. Free fires it once per real email send; admin test sends are skipped. $notification is array( user_id, event_type, message, link, id ); message is the email subject and id is 0 on Free. When Pro's bell records the same event, the bell fires the hook and the email does not.
wcb_email_announces_notification Filter $announce, $email_id, $user_id Return false when your own channel records the event and fires the signal itself, so listeners get it once.
wcb_community_notification_types Filter $types Free adds the types its emails can fire here: slug => array( label, description, default_on ). A notification center applies this filter to list them.
wcb_community_notification_visible Filter $visible, $viewer_id, $targets Free answers this for job and application rows. A row is hidden once the object is trashed, for the employer once the candidate withdraws, and for a job that is not yet public when the viewer is not its employer.
wcb_community_notification_removed Action $object_type, $object_id A job or application was permanently deleted. Not fired on trash.

The second argument of wcb_notification_created is the contract payload, so a notification center can show one row per event with the plugin's own words and link:

add_action( 'wcb_notification_created', function ( array $legacy, ?array $contract ) {
    if ( null === $contract ) {
        return; // A transactional or admin-only email: no community object.
    }
    // $contract: recipient_id, type, actor_id, object_type ('job'|'application'),
    // object_id, message, url, group_key, notification_id.
}, 10, 2 );

Listeners registered with one accepted argument are unaffected. An email whose send call names no object_type (email verification, admin alerts) gets null.

Mobile app

Hook Type Args Purpose
wcb_min_app_version Filter $version The minimum app version settings/app-config reports, so the app can force an upgrade. Default "1.0.0".
wcb_app_enabled Filter $enabled Whether settings/app-config reports the app as enabled. Default: whether Pro is active.
wcb_app_password_login_enabled Filter $on Whether password sign-in is available. Backs the App Password Sign-In setting, off by default.
wcb_app_password_max_failures Filter $max Failed sign-ins per bucket before lockout. Default 5.
wcb_app_password_max_attempts_per_ip Filter $max Attempts per IP per hour. Default 20.
wcb_client_ip_header Filter $header The $_SERVER key that carries the real client IP behind a proxy, for every per-IP limit and count. Defaults to the Visitor IP address setting (empty means REMOTE_ADDR).
wcb_app_password_client_ip_header Filter $header Older name, still applied after wcb_client_ip_header. Use wcb_client_ip_header in new code.
wcb_app_credential_issued Action $user_id, $app_id, $app_name A member traded their password for a credential. The credential itself is never passed.
wcb_app_credential_revoked Action $user_id, $uuid A member signed out of the app and revoked their credential.
wcb_app_connect_schemes Filter $schemes URL schemes the app-connect flow may hand a credential to. Add only schemes for an app you ship.
wcb_app_connect_bridge Filter $info The resolved app-connect bridge for this site: owner, connect_url, connect_schemes.
wcb_app_scheme Filter $scheme The mobile app's deep-link scheme.

Pro coordination

Free checks these filters to see whether Pro is active. Pro returns the real value; in Free they default to false or empty.

Hook Returns
wcb_pro_active bool - Pro is running.
wcb_pro_licensed bool - the Pro license is valid.
wcb_pro_version string - the Pro version.
wcb_pro_ai_enabled bool - the Pro AI bundle is enabled.
wcb_pro_upsell_url string - where the "Upgrade to Pro" link points.
wcb_pro_settings_saved_notice string - message for the notice after a Pro settings save.
wcb_ai_description_enabled bool - show the AI description helper in the job forms.
wcb_ai_matching_available bool - the candidate dashboard shows AI job matching.
wcb_ai_ranking_available bool - the employer dashboard shows AI applicant ranking.
wcb_ai_completion_available bool - the job page offers the AI cover-letter helper.
wcb_pro_alerts_enabled bool - the job alerts feature is active.
wcb_pro_resumes_enabled bool - the resume directory is active.

WP-CLI

Hook Type Args Purpose
wcb_cli_abilities Filter $abilities Add entries to the slug => label list that wp wcb abilities reports.
wcb_scale_budgets Filter $budgets Per-query time budgets (ms) for wp wcb scale benchmark.
wcb_scale_ops Filter $ops, $per_page Add a named callable (name => callable) for the benchmark to time. Add a matching entry in wcb_scale_budgets; an operation without a budget is timed but never fails the run.

Browser events

Two blocks coordinate through document-level CustomEvents, so listeners (including Pro's job-map block) can react without a shared Interactivity store.

Event Dispatched by Detail Fires when
wcb:search job-search and job-filters blocks { query, filters } The visitor changes the search query or a filter, after the URL is updated with history.pushState.
wcb:results job-listings block { jobIds: number[], total: number } After a listings fetch resolves, so a listener can follow the jobs actually shown.
document.addEventListener( 'wcb:results', ( event ) => {
    console.log( 'Visible job IDs:', event.detail.jobIds );
} );

Listening pattern

add_action( 'wcb_job_created', function ( $job_id, $request ) {
    // Notify a Slack channel when a featured job lands.
    if ( $request->get_param( 'featured' ) ) {
        my_slack_post( 'Featured job posted: ' . get_the_title( $job_id ) );
    }
}, 10, 2 );
add_filter( 'wcb_rest_prepare_job', function ( $row, $post ) {
    // Add an `is_remote_friendly` flag based on a meta value.
    $row['is_remote_friendly'] = (bool) get_post_meta( $post->ID, '_remote_friendly', true );
    return $row;
}, 10, 2 );

REST API Reference

Use the wcb/v1 REST namespace to read and manage jobs, applications, candidates, employers and companies from your own code or app. Every endpoint class extends WCB\Api\RestController, which owns the shared response envelope and the abilities-aware permission helper. All routes below are relative to /wp-json/wcb/v1.

Authentication

Most endpoints require a logged-in WordPress user and a valid nonce. Use the standard WP REST nonce in headers:

fetch( '/wp-json/wcb/v1/jobs', {
    headers: { 'X-WP-Nonce': wpApiSettings.nonce },
    credentials: 'same-origin'
})

For server-to-server calls, generate an application password (Users -> Profile -> Application Passwords) and use HTTP Basic auth.

A small set of endpoints permit guest access: the read-only jobs, companies, candidates, employers and search endpoints, the candidate and employer registration endpoints, and the apply endpoint. A guest can apply unless Require login to apply is on under Settings > Applications; then a logged-out request gets 401 wcb_login_required. A logged-in user must hold the wcb/apply-jobs ability.

Abuse prevention on submission endpoints comes from the anti-spam module: an always-on honeypot field plus an optional CAPTCHA provider (Cloudflare Turnstile, Google reCAPTCHA v3 or v2). Some public routes also have hourly per-IP limits. See Abuse prevention.

Response envelope

Every endpoint returns either a WP_REST_Response (success) or a WP_Error (failure). Success shape varies by endpoint; failure shape is consistent:

{
    "code": "wcb_invalid_status",
    "message": "Invalid status.",
    "data": { "status": 400 }
}

The wcb_* prefix on error codes is the plugin's namespace - addons should mirror this convention with their own prefix.

Routes by area

Jobs

Method Route Auth Purpose
GET /jobs guest OK List jobs with filters: search (alias s), category, location, type, experience, tag (each takes one slug or a comma list, any of), remote, salary_min, salary_max, board (alias board_id), company, author, open (only jobs taking applications), sort (relevance, newest, oldest, salary, closing), per_page (1-100; unset uses Jobs Per Page), page
GET /jobs/{id} guest OK Single job (full detail)
POST /jobs wcb/post-jobs Create a job. Send featured: true to ask for featured placement: the job is still created if that charge fails, and the response carries feature_error. A 402 wcb_insufficient_credits carries cost, balance and purchase_url
PUT PATCH /jobs/{id} author or company member with wcb/post-jobs, or wcb/manage-settings Update a job. Moderators can set featured here
DELETE /jobs/{id} same as update Move a job to the trash
POST /jobs/{id}/approve moderator Approve a pending job
POST /jobs/{id}/reject moderator Reject a pending job (requires reason)
POST /jobs/{id}/bookmark wcb/bookmark-jobs (any logged-in member by default) Toggle a saved job
POST /jobs/{id}/feature job owner Pay to feature a job. Added by WP Career Board Pro
POST /jobs/{id}/report logged-in Report a published job for moderation. A second report from the same user is ignored
POST /jobs/{id}/resolve-flag moderator Dismiss or unpublish a flagged job
GET /jobs/{id}/applications wcb/view-applications and the job's author, or wcb/manage-settings or wcb/moderate-jobs List applications for a job. page, per_page (max 100), optional status. Returns counts (total, by_status) for the whole job, not just the page.
GET /jobs/{id}/applications/export the job's author or wcb/manage-settings Stream the job's applicants as a CSV file. Send the REST nonce as _wpnonce when calling from a link.

Reopening or republishing an expired or closed job is a status update, not a dedicated route: PATCH /jobs/{id} with { "status": "publish" }, which is what the employer dashboard's Reopen button sends. It gives the job a fresh deadline, charges a paid board through the wcb_job_payment filter, and fires wcb_job_republished.

Every job card returned by GET /jobs and GET /jobs/{id} carries viewer-relative fields: is_bookmarked, has_applied, application_status and viewer_can_apply. They are computed per request, so they stay correct for each requester. A guest gets is_bookmarked: false, has_applied: false, application_status: null and viewer_can_apply: true, or viewer_can_apply: false when Settings > Applications requires login to apply.

Applications

Method Route Auth Purpose
POST /jobs/{id}/apply guest or wcb/apply-jobs Submit an application. Guests are allowed unless Require login to apply is on. You cannot apply to your own job
GET /applications/{id} the candidate, the job's author, or wcb/manage-settings Single application detail
DELETE /applications/{id} candidate owner or wcb/manage-settings; needs wcb/withdraw-application and Allow Withdraw on (Settings > Applications) Withdraw: keeps the application as withdrawn (409 once it has an outcome)
PUT /applications/{id}/status wcb/view-applications and the job's author, or wcb/manage-settings Change status (submitted, reviewing, shortlisted, rejected, hired). Returns changed (false for a same-status save) and notified; 409 on an application that already has an outcome
GET /candidates/{id}/applications that candidate or wcb/manage-settings Candidate's application history, paginated, with counts for all of them.
PUT /applications/{id}/rating same as status Set a 1-5 rating (0 clears it). Never shown to candidates
GET POST /applications/{id}/notes same as status List or add private hiring notes
DELETE /applications/{id}/notes/{note} same as status Delete a note
GET /files/{id} file owner, staff, or either side of an application Download a private resume file. The website uses ?wcb_file=<id>; the app uses this route
POST /candidates/resume-upload wcb/manage-resume Upload a resume file

Candidates

Method Route Auth Purpose
POST /candidates/register guest Register a new candidate
GET /candidates/{id} guest OK Candidate profile
PUT /candidates/{id} self or admin Update profile
GET /candidates/{id}/bookmarks self or admin List saved jobs (read-only - toggle via POST /jobs/{id}/bookmark)
GET /candidates/{id}/saved-companies self or admin List saved companies (read-only - toggle via POST /companies/{id}/bookmark)
GET /candidates/{id}/saved-resumes self or admin List saved resumes (read-only)
POST /candidates/me/privacy/{action} logged-in Personal data self-service: export or erase

Account sign-in and verification

Method Route Auth Purpose
POST /auth/app-password guest Trade a website login for a WordPress Application Password. Off unless App Password Sign-In is on; requires HTTPS.
DELETE /auth/app-password logged-in Revoke the credential making the request (app sign-out)
POST /auth/verify-email/resend guest Send a new confirmation link to an unconfirmed account (5 an hour per IP)

Account

Method Route Auth Purpose
GET /account logged-in Read display_name, email and email_optout (the optional emails the member turned off)
PUT /account logged-in Update display_name, email, new_password and email_optout. Changing the email or the password needs current_password

Account deletion

Members can delete their own account from the app. Deletion is scheduled with a grace period (wcb_account_deletion_grace_days filter, default 14 days) rather than run at once. For the window the account is suspended and its Application Passwords are revoked. The daily wcb_process_account_deletions cron then deletes anything past its date with wp_delete_user(). A member can cancel during the window.

Method Route Auth Purpose
DELETE /me logged-in Request deletion of the caller's own account (password + confirm: "DELETE"); returns 202 when scheduled, 200 when deleted immediately (0-day grace)
GET /me/deletion logged-in Pending-deletion status (active or scheduled + scheduled_for)
DELETE /me/deletion logged-in Cancel a pending deletion

Administrator accounts (manage_options) cannot be deleted through this route.

Member safety - Report and block

Members can report and block other members.

Method Route Auth Purpose
POST /users/{id}/report logged-in Report a member (reason enum: spam, scam, fake_profile, harassment, offensive; details optional) - a second report from the same reporter is ignored
POST /users/{id}/block logged-in Block a member
DELETE /users/{id}/block logged-in Unblock a member
GET /me/blocked logged-in The caller's blocked-members list (batch-loaded, no N+1)

A member cannot report or block themself (wcb_cannot_report_self / wcb_cannot_block_self, 400). A site owner suspends a member from the admin Candidates screen bulk action, which fires wcb_member_suspended / wcb_member_unsuspended - see the hooks reference.

Employers and companies

Method Route Auth Purpose
POST /employers/register guest Register a new employer
POST /employers wcb/manage-company Create a company directly (not self-registration)
GET /employers/{id} guest OK Employer detail. {id} is the company ID
PUT /employers/{id} the company's author with wcb/manage-company, or wcb/manage-settings Update an employer profile
GET /employers/{id}/jobs guest OK Employer's job postings
GET /employers/{id}/applications the company's author with wcb/view-applications, or wcb/manage-settings Applications across the employer's jobs
POST /employers/{id}/logo same as update Upload the company logo (file field logo)
GET /employers/me/jobs wcb/access-employer-dashboard The current employer's own jobs
GET /employers/me/applications wcb/access-employer-dashboard Applications across the current employer's jobs
GET /companies guest OK List companies. Filters: search, industry, size, page, per_page (max 100)
POST /companies/{id}/bookmark wcb/bookmark-jobs Toggle a saved company
POST /companies/{id}/trust wcb/manage-settings Set a company's trust_level (verified, trusted, premium, or empty to clear)

There is no GET /employers list route. An employer's profile is the same wcb_company post type companies use, so a public employer directory is served by GET /companies.

Search and settings

Method Route Auth Purpose
GET /search guest OK Unified search across jobs and companies
GET /settings/app-config guest OK Frontend boot config consumed by the Interactivity blocks and the mobile/companion app

Plugin settings are saved through the admin Settings page (the WordPress Settings API), not a REST write route.

GET /settings/app-config returns the boot config for the blocks and the mobile app, including feature_toggles (such as reporting, blocking, account_deletion and the Pro-gated flags), a legal object (privacy_policy_url, terms_url, eula_url, community_guidelines_url, abuse_contact_email), branding fields (accent_color, logo_url, login_bg_url, dark_mode_default), min_app_version (filter wcb_min_app_version), contract_version and app_enabled (filter wcb_app_enabled, defaults to whether Pro is active). The whole payload passes through wcb_rest_app_config before it is returned; see the hooks reference.

Admin

Method Route Auth Purpose
GET /admin/emails/log admin Paginated transactional-email send log
POST /admin/emails/test admin Fire a test send for a named email template
POST /admin/dismiss-banner admin Mark an admin banner dismissed for the current user
GET POST /admin/industries admin Read or save the industries list (Settings > Industries)

Import and setup wizard

Method Route Auth Purpose
GET /import/status admin Poll a running import's progress
POST /import/run admin Start or step a content import
POST /wizard/create-pages admin Create the Career Board pages
POST /wizard/settings admin Save any settings-schema key (and WordPress's users_can_register) through the same cleaning rules as the Settings screen
POST /wizard/sample-data admin Install demo content
POST /wizard/remove-sample-data admin Remove the demo content
POST /wizard/complete admin Mark the setup wizard finished

Modifying responses

Career Board responses pass through a wcb_rest_prepare_* filter (see 02-hooks-reference.md) before they are returned. Check the filter-argument table in the hooks reference - the signature is not the same for every entity. To add a custom field to the jobs response:

add_filter( 'wcb_rest_prepare_job', function ( $row, $post ) {
    $row['custom_score'] = my_score_function( $post->ID );
    return $row;
}, 10, 2 );

Adding new routes

The cleanest way is to extend WCB\Api\RestController:

namespace MyAddon;

class My_Endpoint extends \WCB\Api\RestController {

    public function register_routes(): void {
        register_rest_route(
            $this->namespace,  // wcb/v1
            '/my-thing/(?P<id>\d+)',
            array(
                'methods'             => \WP_REST_Server::READABLE,
                'callback'            => array( $this, 'get_item' ),
                'permission_callback' => function (): bool {
                    return $this->check_ability( 'wcb/post-jobs' );
                },
                'args'                => array(
                    'id' => array(
                        'validate_callback' => static fn( $v ) => is_numeric( $v ),
                        'sanitize_callback' => 'absint',
                    ),
                ),
            )
        );
    }

    public function get_item( \WP_REST_Request $request ): \WP_REST_Response {
        // ... your handler
    }
}

add_action( 'rest_api_init', static function () {
    ( new My_Endpoint() )->register_routes();
});

You inherit the response envelope, current_user_id(), permission_error() (401 or 403) and the abilities-aware check_ability( $ability ) helper. Pass the ability slug you want to gate on.

Abuse prevention

Job, application and sign-up submissions are checked by the anti-spam module: an always-on honeypot field plus an optional CAPTCHA provider (Cloudflare Turnstile, Google reCAPTCHA v3 or v2), configured under Settings > Anti-Spam. It hooks wcb_pre_job_submit, wcb_pre_application_submit and wcb_pre_registration, and rejects a spam request before the record is created.

Public routes that cost something also have hourly per-IP limits, answered with 429 wcb_rate_limited:

Route Limit per hour Change with
POST /candidates/register, POST /employers/register 5 wcb_registration_rate_limit (0 turns it off)
POST /jobs/{id}/apply as a guest 10 -
POST /auth/verify-email/resend 5 -
POST /auth/app-password 20 attempts, 5 failures per bucket wcb_app_password_max_attempts_per_ip, wcb_app_password_max_failures

Every limit counts per visitor IP address. By default that is REMOTE_ADDR, which behind a proxy or CDN is the proxy's address. Choose the proxy in Settings > Anti-Spam > Visitor IP address, or set the $_SERVER key in code with wcb_client_ip_header. The leftmost address in the header is used, and an invalid one falls back to REMOTE_ADDR.

Both sign-up routes also run wcb_pre_registration and core's registration_errors filter before an account is created.

Job lifecycle fields

Every job payload carries accepting_applications (true only while the job is published and its deadline has not passed) and closes_at (the Y-m-d deadline, or empty). Use these instead of comparing status and dates in the client. An expired or closed job still answers GET /jobs/{id} and keeps its /jobs/{slug}/ page; it is simply not accepting applications.

Application status fields

Every application payload carries status (slug), status_label (worded for the viewer: candidates see "Not selected" where employers and admins see "Rejected") and status_tone (info, warning, accent, success, danger or neutral) so clients show the same words and colours as the site.

WP-CLI Reference

Use wp wcb to list and moderate jobs, change application statuses, import from WP Job Manager and benchmark a large site from the command line.

wp wcb <command> <subcommand> [options]

wp wcb job

Operate on wcb_job posts.

Subcommand Purpose
wp wcb job list [--status=<status>] [--company=<slug>] [--format=<format>] List jobs. --status is publish, pending, draft, wcb_expired or any (default). --format is table, csv, json or ids
wp wcb job approve <id> Approve a pending job
wp wcb job reject <id> [--reason="..."] Reject a job with an optional reason
wp wcb job expire <id> Expire one job now, whatever its deadline, and fire wcb_job_expired
wp wcb job run-expiry Run the expiry sweep now, the same one the hourly cron runs

run-expiry only expires jobs on sites where jobs end at their deadline. If that is off, it prints a warning and expires nothing. Turn it on with the End jobs at their deadline button under Settings > Jobs, which appears only while the setting is off.

Example - bulk reject:

wp wcb job list --status=pending --format=ids \
  | xargs -n1 -I{} wp wcb job reject {} --reason="Duplicate posting"

wp wcb application

Operate on applications.

Subcommand Purpose
wp wcb application list [--job=<id>] [--status=<status>] [--per-page=<n>] [--page=<n>] [--format=<format>] List applications, newest first. --per-page is 1-500 (default 100). --format is table, csv, json, ids or count (a count needs no paging)
wp wcb application update <id> --status=<status> Set an application's status: submitted, reviewing, shortlisted, hired or rejected. The change is logged and wcb_application_status_changed fires once. Setting the same status, or changing an application that already has an outcome, prints a warning and changes nothing

wp wcb migrate

Import legacy job-board content into Career Board, and move files.

Subcommand Purpose
wp wcb migrate wpjm [--dry-run] [--limit=<n>] [--offset=<n>] [--status=<status>] Import jobs from WP Job Manager, with company pages. --status is publish, pending, expired or any. Safe to re-run
wp wcb migrate wpjm-applications [--dry-run] Import WP Job Manager Applications onto the imported jobs. No emails are sent. Run the jobs import first
wp wcb migrate wpjm-resumes [--dry-run] [--limit=<n>] [--offset=<n>] [--status=<status>] Import resumes from WP Job Manager Resume Manager. That plugin must be active. --status is publish, pending or any (default publish)
wp wcb migrate files Move existing candidate files (resumes, generated CVs) into private storage now. The plugin also does this in the background, 50 files per cron pass

wp wcb scale

Create a large synthetic dataset and time the main queries against a budget, to check how the plugin performs on a big site.

Subcommand Purpose
wp wcb scale seed [--candidates=<n>] [--employers=<n>] [--companies=<n>] [--jobs=<n>] [--applications=<n>] Generate a synthetic dataset. Defaults: 10,000 candidates, 1,000 employers, 500 companies, 5,000 jobs, 50,000 applications. Running it again only creates what is missing
wp wcb scale benchmark [--per-page=<n>] [--format=<format>] Time the main queries with a cold cache; exit 1 if any exceeds its budget. --per-page defaults to 50; --format is table (default), json or csv
wp wcb scale teardown Delete the synthetic rows. Safe to run again

Default budgets: single-job read 5 ms, applications for a job 50 ms, companies list and candidates list (50 rows) 50 ms each, jobs list (50 rows) 100 ms, location filter 150 ms, keyword search 200 ms. Change them with the wcb_scale_budgets filter.

Example - full benchmark cycle:

wp wcb scale seed && wp wcb scale benchmark && wp wcb scale teardown

Run it on a staging copy, not on a live site.

wp wcb (top-level)

Utility subcommands on the root wcb command:

Command Purpose
wp wcb status Print content counts by status for jobs, companies and applications (and resumes when Pro is active), plus employer and candidate totals
wp wcb abilities [--user-id=<id>] [--format=<format>] List the Career Board abilities and whether a user is granted each. Without a user, the grant column shows n/a

Ability gating

WP-CLI runs without a current user unless you pass the global --user=<id>. Several subcommands check an ability and stop with "Permission denied" if the current user lacks it, so run them with --user=<admin>. The wp wcb abilities command reports what a user can do. The wcb_cli_abilities filter extends the list it reports on; it does not gate other subcommands:

add_filter( 'wcb_cli_abilities', function ( $map ) {
    // Add your add-on's custom capability to the abilities list.
    $map['my_addon_manage_things'] = 'Manage My Addon Things';
    return $map;
});

If your own subcommand needs to enforce an ability, call the base class helper inside the method:

$this->require_ability( 'wcb/moderate-jobs' );

Adding your own command

Use the same base class the plugin uses, WCB\Cli\AbstractCliCommand. Each public method becomes a subcommand (the standard WP-CLI convention):

namespace MyAddon;

use WCB\Cli\AbstractCliCommand;

class My_Command extends AbstractCliCommand {

    /**
     * ## EXAMPLES
     *
     *   wp wcb my-thing greet
     *
     * @param array<int,string>    $args       Positional args.
     * @param array<string,string> $assoc_args Flags.
     */
    public function greet( array $args, array $assoc_args ): void {
        // Stops the command with an error if the current user lacks the ability.
        $this->require_ability( 'wcb/post-jobs' );

        \WP_CLI::success( 'Hello from my command' );
    }
}

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    \WP_CLI::add_command( 'wcb my-thing', My_Command::class );
}

The base class extends \WP_CLI_Command and adds two abilities-aware helpers: check_ability( $ability ) (returns a bool) and require_ability( $ability ) (halts the command if the ability is not granted).

Extension Cookbook

Short recipes for common extension tasks. Every recipe uses public hooks, so you never need to edit the plugin source.

Add a field to the apply form

You want candidates to answer (say) a "LinkedIn URL" question when applying. Return a field group from wcb_application_form_fields_groups. The plugin renders the control, validates it (required questions are checked on the server too), saves it, and includes the answer in the REST API and the CSV export. See Custom Fields for the schema and field types.

add_filter( 'wcb_application_form_fields_groups', function ( $groups, $job_id ) {
    $groups[] = array(
        'id'     => 'my_addon',
        'label'  => __( 'Extra questions', 'my-addon' ),
        'fields' => array(
            array(
                'key'      => 'linkedin',
                'label'    => __( 'LinkedIn URL', 'my-addon' ),
                'type'     => 'url',
                'required' => false,
            ),
        ),
    );
    return $groups;
}, 10, 2 );

// Read the saved answer later. It is stored as `_wcb_application_field_linkedin`.
$url = get_post_meta( $app_id, '_wcb_application_field_linkedin', true );

Use the wcb_application_form_fields action only for markup a field group cannot express; anything you print there is not validated or saved for you.

Notify Slack when a job is posted

add_action( 'wcb_job_created', function ( $job_id, $request ) {
    $title = get_the_title( $job_id );
    wp_remote_post( SLACK_WEBHOOK_URL, array(
        'body' => wp_json_encode( array(
            'text' => sprintf( 'New job posted: *%s*', $title ),
        ) ),
        'headers' => array( 'Content-Type' => 'application/json' ),
        'blocking' => false,
    ));
}, 10, 2 );

Add a tab to the settings page

The tab content is printed outside the plugin's own settings form, so print your own <form> and handle the save yourself, here with an admin_post_my_addon_save action.

add_filter( 'wcb_settings_tabs', function ( $tabs ) {
    $tabs['my_addon'] = __( 'My Addon', 'my-addon' );
    return $tabs;
});

add_action( 'wcb_settings_tab_my_addon', function ( array $settings ) {
    ?>
    <form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
        <input type="hidden" name="action" value="my_addon_save">
        <?php wp_nonce_field( 'my_addon_save' ); ?>
        <!-- your fields -->
        <?php submit_button(); ?>
    </form>
    <?php
});

Override the credit cost for a specific board

add_filter( 'wcb_board_credit_cost', function ( $cost, $board_id ) {
    if ( (int) get_option( 'my_addon_premium_board' ) === (int) $board_id ) {
        return 5; // Charge 5 credits instead of the normal cost.
    }
    return $cost;
}, 10, 2 );

Add a field to the job form

Return a field group from wcb_job_form_fields. The plugin renders the field in the job form and saves the value as post meta under the field key (passed through sanitize_key()).

add_filter( 'wcb_job_form_fields', function ( $groups, $board_id ) {
    $groups[] = array(
        'id'     => 'my_addon',
        'label'  => __( 'Extra details', 'my-addon' ),
        'fields' => array(
            array(
                'key'   => 'my_addon_level',
                'label' => __( 'Seniority note', 'my-addon' ),
                'type'  => 'text',
            ),
        ),
    );
    return $groups;
}, 10, 2 );

$board_id is 0 for the fields that apply to every board. The wcb_job_form_step*_fields actions print markup only; what they print is not collected when the form is submitted.

Add a column to the REST jobs response

add_filter( 'wcb_rest_prepare_job', function ( $row, $post ) {
    $row['my_remote_friendly'] = (bool) get_post_meta( $post->ID, '_remote_friendly', true );
    return $row;
}, 10, 2 );

This propagates everywhere the jobs API is consumed - the listings block, the single-job page, third-party integrations.

Disable a built-in feature

Free checks wcb_pro_resumes_enabled and wcb_pro_alerts_enabled before it shows the Pro resume and job-alert tabs in the candidate dashboard. Use a later priority than Pro's own callback to hide a tab for a group of users:

add_filter( 'wcb_pro_resumes_enabled', function ( $enabled ) {
    if ( current_user_can( 'wcb_employer' ) ) {
        return false; // Hide the saved-resumes tab from employers.
    }
    return $enabled;
}, 20 );

Send a group of users to a different checkout page:

add_filter( 'wcb_credit_purchase_url', function ( $url ) {
    if ( current_user_can( 'my_addon_premium' ) ) {
        return '/premium-credits/';
    }
    return $url;
});

Restrict the boards dropdown by user role

add_filter( 'wcb_board_options_for_employer', function ( $options, $user_id ) {
    if ( ! user_can( $user_id, 'my_addon_premium_boards' ) ) {
        // Drop any board whose id is in the "premium" list.
        $premium_ids = (array) get_option( 'my_premium_board_ids', array() );
        $options = array_filter( $options, fn( $o ) => ! in_array( (int) $o['id'], $premium_ids, true ) );
    }
    return $options;
}, 10, 2 );

Add a custom transactional email

The email registry holds email objects, not config arrays. Each one extends WCB\Modules\Notifications\AbstractEmail, declares its identity, and wires its own trigger hook in boot(). Register the object through the wcb_registered_emails filter and it appears automatically in Settings > Emails (subject override, enable/disable toggle, and the send log all come for free).

use WCB\Modules\Notifications\AbstractEmail;

class My_Welcome_Email extends AbstractEmail {

    public function get_id(): string {
        return 'my_addon_welcome';
    }

    public function get_title(): string {
        return __( 'Welcome to the board', 'my-addon' );
    }

    public function get_recipient(): string {
        return 'candidate'; // 'employer', 'candidate', 'admin' or 'guest'.
    }

    public function get_default_subject(): string {
        return __( 'Welcome to our job board', 'my-addon' );
    }

    public function boot(): void {
        // Trigger off any Career Board action hook. wcb_candidate_registered passes one argument.
        add_action( 'wcb_candidate_registered', array( $this, 'handle' ), 10, 1 );
    }

    public function handle( int $user_id ): void {
        $user = get_userdata( $user_id );
        if ( ! $user ) {
            return;
        }
        // send() respects the per-template enable toggle and writes the log row.
        $this->send( $user->user_email, array( 'name' => $user->display_name ), $user_id );
    }
}

add_filter( 'wcb_registered_emails', function ( array $emails ): array {
    $emails[] = new My_Welcome_Email();
    return $emails;
});

The base class gives you is_enabled(), get_subject() (with the admin override), and the protected send( $to, $vars, $user_id, $context ) helper that dispatches and logs. get_id(), get_title(), get_recipient(), get_default_subject() and boot() are the only abstract methods. Override get_default_body() (merge tags in {braces}) and get_merge_tags() to ship a default message and the tag chips in the editor, and is_optional() to let members turn the email off. Pass a $context with object_type, object_id and actor_id when the email is about a job or application, so notification centers get a row (see the community notification contract in the hooks reference). See modules/notifications/emails/class-email-job-approved.php for a working example.

Change which jobs a search returns

wcb_job_search_args runs for every job search: the REST list, the listing block's first paint, the archive and alert matching. Put every value that changes the result in the query args, because the REST cache key is built from them.

add_filter( 'wcb_job_search_args', function ( array $args, array $params ): array {
    // Show only remote jobs everywhere.
    $args['meta_query'][] = array(
        'key'   => '_wcb_remote',
        'value' => '1',
    );
    return $args;
}, 10, 2 );

React to an application status change

wcb_application_status_changed fires once per real change that should notify the applicant. A save that keeps the same status fires nothing, and silent changes such as a job closing skip it.

add_action( 'wcb_application_status_changed', function ( $app_id, $old, $new, $reason, $actor ) {
    if ( 'hired' === $new ) {
        my_crm_mark_hired( (int) get_post_meta( $app_id, '_wcb_candidate_id', true ) );
    }
}, 10, 5 );

Use wcb_application_status_updated to keep data in step with the status, including those silent changes. Do not send a message from it.

Add a step to the setup wizard

Add an entry with a title, a template path and a button_text. A step template that renders inputs named after settings-schema keys, plus the shared footer, saves those settings. Register the key in wcb_settings_schema so it has a default and a cleaning rule.

add_filter( 'wcb_settings_schema', function ( array $fields ): array {
    $fields['my_addon_flag'] = array(
        'default'  => false,
        'sanitize' => 'rest_sanitize_boolean',
    );
    return $fields;
} );

add_filter( 'wcb_wizard_steps', function ( array $steps ): array {
    $steps['my-addon'] = array(
        'title'       => __( 'My add-on', 'my-addon' ),
        'template'    => MY_ADDON_DIR . 'wizard-step.php',
        'button_text' => __( 'Save & Continue', 'my-addon' ),
    );
    return $steps;
} );

In wizard-step.php, print <input type="checkbox" name="my_addon_flag"> and then require WCB_DIR . 'admin/views/wizard-steps/_footer.php';.

Show extra details on the job page

wcb_job_single_after_description fires right after the description:

add_action( 'wcb_job_single_after_description', function ( int $job_id ) {
    $note = get_post_meta( $job_id, '_my_addon_note', true );
    if ( $note ) {
        printf( '<p>%s</p>', esc_html( $note ) );
    }
} );

Include your data in privacy exports and erasure

Register a provider once. It is used by Tools > Export Personal Data and Erase Personal Data, and whenever a user is deleted.

add_filter( 'wcb_personal_data_providers', function ( array $providers ): array {
    $providers['my_addon'] = array(
        'label'  => __( 'My add-on', 'my-addon' ),
        'export' => function ( array $who ): array {
            // $who: array( 'user_id' => int, 'email' => string, 'closing' => bool ); user_id is 0 for a guest.
            return array(); // WordPress export items.
        },
        'erase'  => function ( array $who ): array {
            return array( 'removed' => 0, 'retained' => 0, 'messages' => array() );
        },
    );
    return $providers;
} );

Replace an email's message

Edit the body under Settings > Emails, or ship a file at {theme}/wp-career-board/emails/{email-id}.php. A body saved in Settings wins over a theme file, and a theme file wins over the shipped default. Add another template folder with the wcb_email_template_dirs filter.

Where to find the rest

Read 02-hooks-reference.md for the hooks. To add your own REST routes or WP-CLI commands, see 03-rest-api.md for the REST controller base class and 04-wp-cli.md for the CLI base class.

Template Overrides

A theme can replace the page template WP Career Board uses for a single job, company or resume. Copy the plugin's template into your theme, edit the copy, and WordPress uses yours instead.

Which templates can be overridden

Page Copy this plugin file To this path in your theme
Single job wp-career-board/modules/jobs/templates/single-wcb_job.php single-wcb_job.php
Single company wp-career-board/modules/employers/templates/single-wcb_company.php single-wcb_company.php
Single resume (Pro) wp-career-board-pro/modules/resume/templates/single-wcb_resume.php single-wcb_resume.php

A child theme's copy wins over its parent theme's copy, and either wins over the plugin's.

Block themes

A block theme does not use PHP page templates. WordPress renders the theme's own block templates, so edit the job and company pages in Appearance > Editor > Templates. The PHP copies described here apply to classic themes.

For the archives, the plugin registers these block templates so a block theme shows the plugin's listing instead of its generic blog loop. A file with the same slug in your theme takes priority.

Template Slug Shows
Job Archive archive-wcb_job The job listings
Company Archive archive-wcb_company The company directory
Job Category, Job Type, Job Tag, Job Location, Experience Level Archive taxonomy-wcb_category, taxonomy-wcb_job_type, taxonomy-wcb_tag, taxonomy-wcb_location, taxonomy-wcb_experience The job listings for the term, titled with the term name

On classic themes the taxonomy archives use the plugin's own template and show the same term-scoped listing.

Keep your copy up to date

Each template carries a version line in its header:

 * Template version: 1.0

When a plugin update changes a template's markup, that number goes up. WP Career Board compares your copy with the plugin's and reports any copy that is older, or has no version line, under Tools > Site Health > Recommended improvements. The item names your file and the plugin file to compare it with.

To bring a copy up to date:

  1. Open the plugin file listed in Site Health next to your copy.
  2. Carry your customisations over to a fresh copy of the plugin file (or merge the plugin's changes into your copy).
  3. Set the Template version line in your copy to the version in the plugin file's header.

The check runs each time Site Health runs its tests, so the item clears as soon as the versions match.

Registering another template

An add-on that ships its own overridable template can add it to the check:

add_filter( 'wcb_overridable_templates', function ( array $templates ) {
    $templates['single-my_type.php'] = MY_ADDON_DIR . 'templates/single-my_type.php';
    return $templates;
} );

The key is the file name WordPress looks for in the theme; the value is the full path of the add-on's own copy, which must carry a Template version line.

Filters

Filter Purpose
wcb_overridable_templates Add or remove templates from the version check.
wcb_template_override_docs_url Change the "Learn how template overrides work" link in Site Health.

Something unclear? Open a support ticket → · Refund policy

Buy WP Career Board