VismaXMLImport
Imports job listings from a Visma Recruit XML feed into the "job-listing" post type. No external dependencies.
Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/considbrs-webdev/vismaxmlimport/archive/refs/heads/main.zipWordPress plugin that imports job assignments from a Visma Recruit XML feed into the job-listing post type. It has no external dependencies (no Composer, no ACF, no jq).
Author: Consid
Installation
Copy the plugin folder into wp-content/plugins/ and activate it.
Configuration
Go to Tools → Visma XML import and set:
- XML feed URL – the public Visma Recruit XML endpoint.
- Schedule – how often the import should run automatically (uses WP-Cron). Choose Never to only run manually.
The page also has Run now and Dry run buttons. A dry run reports what would change without writing anything.
What gets imported
Every <Assignment> in the feed becomes one lediga-jobb post.
| Post field | Source |
|---|---|
post_title |
Localization/AssignmentLoc/AssignmentTitle |
post_content |
Localization/AssignmentLoc/AdDescription |
post_date |
PublishStartDate (feed dates are treated as UTC) |
post_status |
publish if PublishStartDate has passed, otherwise trash |
Post meta:
| Meta key | Source |
|---|---|
job_publish_start_date |
PublishStartDate |
job_application_end_date |
ApplicationEndDate |
job_employment_start_date |
EmploymentStartDate |
job_employment_start_date_descr |
EmploymentStartDateDescr |
job_external_url |
Visma apply URL built from Guid |
job_number_of_positions |
NumberOfJobs (integer) |
job_employment_type |
EmploymentType/Name |
job_employment_grade |
EmploymentGrade/Name |
job_salary_type |
SalaryType/Name |
job_location_name |
Municipality/Name |
job_departments |
Departments with Level 2, as [{name}] |
job_contacts |
Contact persons, as [{name, phone, position}] |
schemaData |
Municipio JobPosting schema array (see below) |
Occupation classifications with Level 1 are assigned as lediga-jobb-category terms and created if missing. Terms are only assigned when the taxonomy is registered by the theme.
Municipio schemaData (JobPosting)
Each imported post also gets a PHP array in meta key schemaData so Municipio’s $post->getSchemaProperty() works. It is not stored as a JSON string.
| Schema property | Source |
|---|---|
@type |
JobPosting |
@id |
Visma Guid |
title |
AssignmentTitle |
description |
AdDescription |
url |
Visma apply URL |
datePosted |
PublishStartDate (ISO-8601 UTC) |
validThrough |
ApplicationEndDate (ISO-8601 UTC) |
employmentType |
EmploymentType/Name |
employmentUnit.name |
First level-2 department |
employmentUnit.address.addressLocality |
Municipality/Name |
applicationContact[] |
Contact persons (name, telephone, contactType) |
relevantOccupation[] |
Level-1 occupation classifications |
Sync behaviour
Each assignment is tracked by its Guid, stored in the vxi_id post meta. A hash of the mapped payload is stored in vxi_hash, so unchanged assignments are skipped on subsequent runs. Posts that disappear from the feed are moved to the trash.