WP Immo Sync
Theme settings file (wpis-settings.json)
Place an optional JSON file in the active theme (child theme when one is used) to override plugin options without using the admin Configuration tab.
{active-theme}/wpis-settings.jsonThe plugin reads it with get_stylesheet_directory(), so a parent theme file is not used when a child theme is active.
Only keys you set are applied. Omit everything else to keep database values or code defaults.
// line comments and /* */ block comments are stripped before parsing, so you can disable a key by commenting it out without invalidating the rest of the file.
Precedence
- Key present in
wpis-settings.json→ that value (includingfalse,0, or"") - Else the value stored in the
wpis_settingstable (admin Configuration tab) - Else the code default listed below
The Configuration tab loads stored values from the wpis_settings table, then overlays keys present in wpis-settings.json. Runtime uses SettingsManager::get(), which prefers the JSON file.
Form-security keys can be set from the admin Formulaires tab. Rewrite slugs can be set from the admin Slugs tab. Estate SEO keys can be set from the admin SEO tab. If the same key is present in wpis-settings.json, the admin field shows that value, is disabled, and displays a note that it is read from the file. Saving does not overwrite a JSON-locked key.
Unsaved rewrite slugs fall back to the site locale via PO files (_x(..., 'rewrite slug', 'wpis')). English keeps the technical defaults (wpis_estates, city, …). French locales use biens, ville, equipements, and Dutch (nl_BE, nl_NL) uses panden, stad, voorzieningen. Stored values that still match those English msgids are treated as unset so the translated default can apply. Saving a slug that equals the current locale default does not persist it.
Types
Use native JSON types:
- Booleans:
true/false(the strings"0"/"1"also work) - Integers:
900,60,2 - Strings:
"wpis_estates","agency@example.com"
An empty string "" still overrides the default. That matters for rewrite slugs: "" is applied as-is.
Disable one security check
{
"formSecurityFastSubmission": false
}Full example
{
"debug": false,
"formSecurityEnabled": true,
"formSecurityCsrf": true,
"formSecurityHoneypot": true,
"formSecurityFastSubmission": true,
"formSecurityRateIp": true,
"formSecuritySimilarFields": true,
"formSecurityCsrfTtl": 900,
"formSecurityFastSubmissionSeconds": 2,
"formSecurityRateTtl": 60,
"formSecurityWeeklyReport": true,
"formSecurityWeeklyReportEmail": "agency@example.com",
"formEnableContactSaving": true,
"formEnableRecipientEmail": true,
"formEnableClientEmail": true,
"formEmailDefaultReceiver": "agency@example.com",
"formEmailDefaultSender": "noreply@example.com",
"formEmailDefaultSenderName": "Agency name",
"enableImportSystem": true,
"enableImportCustomPostType": false,
"customPostType": "",
"enableProjectManagement": false,
"enableProjectManagementCustomPostType": false,
"projectCustomPostType": "",
"enableAgentManagement": false,
"enableAgentManagementCustomPostType": false,
"agentCustomPostType": "",
"enableTaxonomies": false,
"postTypeEstateSlug": "wpis_estates",
"postTypeProjectSlug": "wpis_projects",
"postTypeAgentSlug": "wpis_agents",
"taxonomyEstateCitySlug": "city",
"taxonomyEstateCategorySlug": "category",
"taxonomyEstatePurposeSlug": "type",
"taxonomyEstateAmenetySlug": "amenities",
"enableSyncAutomation": false,
"enableCronImport": false,
"enableCronUpdate": false,
"enableCronRemove": false,
"autoRemoveUpdatedEstates": false,
"enablePartialRemove": false,
"enableEstateSeo": true,
"enableEstateJsonLd": true,
"enableEstateOpenGraph": true,
"noindexSoldEstates": true,
"noindexSoftDeletedEstates": true,
"enableVueShortcodes": false
}Debug
| Key | Type | Default | Description |
|---|---|---|---|
debug |
bool | false |
Extra sync logging and debug flags returned by admin API responses. |
Form security
Public forms ([wpis-form-contact], [wpis-form-estate], [wpis-form-evaluation]) run these checks before a contact is saved or emails are sent. All checks are on by default. They can also be changed from the admin Formulaires tab; keys present in wpis-settings.json stay locked there.
Check order: CSRF → honeypot → fast submission → rate / IP → similar fields.
Fast submission uses the CSRF token timestamp. Disabling formSecurityCsrf also skips fast submission.
| Key | Type | Default | Description |
|---|---|---|---|
formSecurityEnabled |
bool | true |
Master switch. false skips every check and does not inject the token or honeypot. |
formSecurityCsrf |
bool | true |
Require a valid _wpis_token. Invalid or expired tokens return an error. |
formSecurityHoneypot |
bool | true |
Hidden website field. If filled, the plugin returns a fake success and does not save the contact. |
formSecurityFastSubmission |
bool | true |
Reject posts sent less than N seconds after the token was issued. Requires CSRF. |
formSecurityRateIp |
bool | true |
One consuming submit per client IP per window. |
formSecuritySimilarFields |
bool | true |
Reject when first name and last name are the same (after trim and case-fold). |
formSecurityCsrfTtl |
int (seconds) | 900 |
CSRF token lifetime. Non-positive values fall back to 900. |
formSecurityFastSubmissionSeconds |
int (seconds) | 2 |
Fast-submit threshold. Non-positive values fall back to 2. |
formSecurityRateTtl |
int (seconds) | 60 |
IP rate-limit window. Non-positive values fall back to 60. |
formSecurityWeeklyReport |
bool | true |
Send a weekly email every Monday at 08:00 (WordPress timezone) with blocked submissions from the last 7 days. No email is sent when there are no rows. |
formSecurityWeeklyReportEmail |
string | Site admin email | Inbox for the weekly blocked-submissions report. |
Boolean false, 0, and "0" disable a check. Missing keys keep the default (enabled).
Forms
| Key | Type | Default | Description |
|---|---|---|---|
formEnableContactSaving |
bool | true |
Save submissions in the WordPress contacts table. |
formEnableClientEmail |
bool | true |
Send a notification email to the agency when a form is submitted. |
formEnableRecipientEmail |
bool | true |
Send a confirmation email to the visitor. |
formEmailDefaultReceiver |
string | Site admin email | Inbox for agency notifications. |
formEmailDefaultSender |
string | Site admin email | From address on the visitor confirmation. |
formEmailDefaultSenderName |
string | Site name | From name on the visitor confirmation. |
Import / post types
| Key | Type | Default | Description |
|---|---|---|---|
enableImportSystem |
bool | false |
Create WordPress posts from ImmoSync estates. |
enableImportCustomPostType |
bool | false |
Import estates into an existing post type instead of wpis_estates. |
customPostType |
string | — | Target post type when enableImportCustomPostType is on. |
enableProjectManagement |
bool | false |
Import and manage projects. |
enableProjectManagementCustomPostType |
bool | false |
Import projects into an existing post type instead of wpis_projects. |
projectCustomPostType |
string | — | Target post type when enableProjectManagementCustomPostType is on. |
enableAgentManagement |
bool | false |
Import and manage agents. |
enableAgentManagementCustomPostType |
bool | false |
Import agents into an existing post type instead of wpis_agents. |
agentCustomPostType |
string | — | Target post type when enableAgentManagementCustomPostType is on. |
enableTaxonomies |
bool | — | Register city, category, purpose, and amenities taxonomies on estates. |
Rewrite slugs
Used as the rewrite.slug of the matching post type or taxonomy. Saving from the admin Slugs tab regenerates permalinks on the next request. If you change a slug only in wpis-settings.json, flush permalinks (Settings → Permalinks → Save).
Unsaved defaults follow the site locale (see precedence). The English msgid is listed below.
| Key | Type | Default (en) | Description |
|---|---|---|---|
postTypeEstateSlug |
string | wpis_estates |
Estate post type permalink slug. |
postTypeProjectSlug |
string | wpis_projects |
Project post type permalink slug. |
postTypeAgentSlug |
string | wpis_agents |
Agent post type permalink slug. |
taxonomyEstateCitySlug |
string | city |
City taxonomy slug. |
taxonomyEstateCategorySlug |
string | category |
Category taxonomy slug. |
taxonomyEstatePurposeSlug |
string | type |
Transaction type taxonomy slug. |
taxonomyEstateAmenetySlug |
string | amenities |
Amenities taxonomy slug. The key spelling Amenety is required. |
Sync automation
| Key | Type | Default | Description |
|---|---|---|---|
enableSyncAutomation |
bool | — | Allow cron-driven sync. Enabling it from admin also generates cronKey if missing. Inbound REST auth no longer requires this key; the activation token is used first. |
enableCronImport |
bool | — | Cron phase: create new estates. |
enableCronUpdate |
bool | — | Cron phase: update existing estates. |
enableCronRemove |
bool | — | Cron phase: remove estates that left the remote feed. |
autoRemoveUpdatedEstates |
bool | — | Delete and re-import estates whose images changed. |
enablePartialRemove |
bool | — | Soft-delete instead of removing the post: keep the estate and the main image, set wpis_soft_deleted. |
Estate SEO
Emitted on singular imported estate pages. All five keys can also be changed from the admin Configuration SEO tab; keys present in wpis-settings.json stay locked there.
JSON-LD requires enableEstateSeo and enableEstateJsonLd. Open Graph requires enableEstateSeo and enableEstateOpenGraph. Noindex requires enableEstateSeo plus the matching noindex flag. See Estate SEO.
| Key | Type | Default | Description |
|---|---|---|---|
enableEstateSeo |
bool | true |
Master switch. false skips JSON-LD, Open Graph, and robots overrides. |
enableEstateJsonLd |
bool | true |
Output schema.org RealEstateListing / Offer / Place JSON-LD. Ignored when SEO is off. |
enableEstateOpenGraph |
bool | true |
Output Open Graph image, price, and status tags. Ignored when SEO is off. |
noindexSoldEstates |
bool | true |
noindex, follow on listings with wpis_status_id = 3. Ignored when SEO is off. |
noindexSoftDeletedEstates |
bool | true |
noindex, follow on listings with wpis_soft_deleted. Ignored when SEO is off. |
Shortcodes
| Key | Type | Default | Description |
|---|---|---|---|
enableVueShortcodes |
bool | false |
Load the public listing shortcode assets (Vue). Leave off if those shortcodes are unused. |
Internal / unused
| Key | Type | Default | Description |
|---|---|---|---|
cronKey |
string | Generated when automation is enabled | Legacy secret for cron URLs. Inbound REST (/sync, /logs, /blocked-submissions) prefers the activation token stored in wpis_connexion. Do not commit this value to a public repository. |
estatePageId |
mixed | — | Accepted by the admin settings save endpoint. Unused at runtime. |