WP Manifestindependent plugin directory
manifest / integrations / vismaxmlimport

VismaXMLImport

Imports job listings from a Visma Recruit XML feed into the "job-listing" post type. No external dependencies.

★ 0stars

Install

Download source zip No release zip yet

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.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

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.