VismaXMLImport
Imports job listings from a Visma Recruit XML feed into the "job-listing" post type. No external dependencies.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/considbrs-webdev/vismaxmlimport/archive/refs/heads/main.zipReadme
VismaXMLImport
WordPress 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.