Skip to content

Migration & CSV Import - Overview

WP Career Board Pro adds a CSV importer that bulk-imports jobs from a spreadsheet. It appears as an extra card on the Free plugin’s Import screen, next to the built-in WP Job Manager migration cards.

By default, imported jobs land as Pending for editorial review, but the CSV status column lets you publish or draft rows directly.

Go to Career Board → Import and look for the CSV → Jobs card (marked Pro). The CSV importer requires the wcb_manage_settings capability.

Click Download Sample CSV to get a correctly structured template with two example rows. Use it as a starting point for your data.

Column Description
title Job title - the only required column
Column Description
description Full job description (HTML allowed)
status pending (default), publish, or draft
deadline Application deadline - any parseable date format, stored as YYYY-MM-DD
Column Accepted values
salary_min Integer (e.g. 80000)
salary_max Integer (e.g. 120000)
salary_currency Any currency code in the plugin’s currency catalog (e.g. USD, EUR, GBP, CAD, AUD, INR, SGD). Codes are matched case-insensitively.
salary_type yearly, monthly, or hourly

If salary_min is greater than salary_max, the importer swaps them automatically and records a warning.

Column Accepted values
remote yes, no, 1, or 0
featured yes, no, 1, or 0
Column Description
company Company name text
company_id WordPress post ID of an existing company post
Column Description
apply_url External application URL
apply_email Application contact email

Separate multiple values with commas or pipes. Terms are created automatically if they do not exist.

Column Taxonomy
categories Job category
job_types Job type (e.g. `Full-time
locations Location
experience Experience level
tags Job tags
Column Description
lat Latitude (decimal)
lng Longitude (decimal)
board_id WordPress post ID of the target job board (Multi-Board)

Add any field key from the Field Builder as a column header. Values are mapped to the corresponding custom field on each imported job.

  1. Select your CSV file using the file picker
  2. Click Import
  3. A results summary shows counts for Imported, Skipped, and Warnings. Per-row errors are listed under a “View row errors” toggle.
  4. Use the Review pending jobs link to review the Pending listings before publishing
Condition Result
File not found or unreadable Import stops with an error message - no rows processed
Empty file or no header row Import stops with an error message - no rows processed
Missing title column Import stops with an error message - no rows processed
Row has wrong column count Row skipped, error logged in summary
Empty title on a row Row skipped, error logged in summary
Invalid currency or salary type Field skipped for that row
Invalid date Field skipped for that row
salary_min greater than salary_max Values swapped automatically, counted as a warning

The one-click WP Job Manager migration lives on the same Career Board → Import screen, in the built-in WP Job Manager → Jobs card. That card is provided by the Free plugin and is the supported way to migrate from WP Job Manager - you do not need Pro for it.

The migration copies job_listing posts to wcb_job posts, preserving title, content, author, and publish date. It is safe to run multiple times; already-migrated records are detected and skipped, and the card shows live “total” and “migrated” counts.

Pro also ships a standalone \WCB\Pro\Modules\Migration\WpjmImporter helper class. It is a programmatic helper only - it is not wired to any admin button or WP-CLI command, so for everyday migrations use the Free Import screen above. If you call the Pro helper directly in custom code, its import() method maps the following:

WPJM meta key WCB meta key
_job_location _wcb_location_text
_job_salary _wcb_salary_text
_company_name _wcb_company_name
_job_expires _wcb_deadline
_remote_position _wcb_remote
job_listing_type terms wcb_job_type taxonomy

Published WPJM jobs are imported as publish; any other status becomes pending. Each migrated original is flagged with _wcb_imported_from_wpjm so subsequent runs skip it, and the method returns [ 'imported' => N, 'skipped' => N, 'errors' => [...] ].