Skip to content

Open Beta – help us test! All listings are examples only.

Set up the WordPress plugin

Install the official WOHNO WordPress plugin, connect it with your API key, and embed your listings natively and SEO-friendly via block, widget or shortcode.

The official WOHNO WordPress plugin shows your listings natively and SEO-friendly on your WordPress site. You maintain your properties exactly once in WOHNO; the plugin renders them as real HTML as a grid, large cards, a list or an interactive map. The detail page and application run first-party on wohno.de – so the applicant folder, personal data and GDPR responsibility stay with WOHNO.

What problem this solves: you want to show your WOHNO listings on your own agency website – automatically in sync, without running your own portal and without applicant data being created on your server.

Looking for a plain Vanilla-JS embed without WordPress (a static page, your own framework)? Then the Embed listings on your website guide is the right place.

Prerequisites

  • WordPress 6.4 or newer and PHP 8.1 or newer.
  • A WOHNO account with at least one published listing.
  • A secret key (sk_…) with the listings:read scope. The plugin calls the API server-side only and stores the key encrypted; it never reaches the browser.

Unlike a browser-side embed, here you need no publishable key (pk_…) and no origin allowlist: the fetch happens server-side in WordPress, not in your visitors' browser.

Step 1 — Create a secret key

  1. Open Dashboard → Settings → API.
  2. Click Create API key and choose Secret key (sk_…).
  3. Assign the listings:read scope.
  4. Save and copy the key. Keep it safe – it is shown in full only once.

Step 2 — Install and connect the plugin

  1. Install and activate the WOHNO plugin in WordPress.
  2. Open the new Wohno menu in the WordPress sidebar.
  3. Switch to the Connection tab, paste your secret key and save.
  4. Click Test connection. On success, the plugin is ready to use.

The key is stored server-side in wp_options – encrypted with AES-256-GCM, provided AUTH_KEY/SECURE_AUTH_KEY are set in wp-config.php (the WordPress default) and the server provides openssl. It is sent only over HTTPS in the X-API-Key header, never in the query string and never logged.

Step 3 — Embed listings

There are three equivalent ways:

  • The Gutenberg block "Wohno – Listings" (with editor preview and ready-made block patterns).
  • The classic widget "Wohno – Listings" for widget areas.
  • The shortcode [wohno_listings] for pages and posts.

A typical shortcode with filters:

[wohno_listings city="Köln" rooms_min="2" rent_max="1200" layout="grid" columns="3"]

You embed a single listing by ID:

[wohno_listing id="9f1c2a3b-1111-2222-3333-444455556666"]

The Embed tab of the plugin settings provides a shortcode generator with a live preview and a picker for individual listings – so you never have to look up an ID.

Shortcode reference: [wohno_listings]

AttributeValuesDefaultDescription
citytext (2–80 chars)City filter
zipup to 5 digitsZIP filter (prefix)
rooms_min0–20Minimum number of rooms
rooms_max0–20Maximum number of rooms
rent_maxeuros (e.g. 1200)Max. cold rent in euros; the plugin converts to cents internally
property_typeapartment, house, studio, wg_room, otherProperty type
wbs_only1WBS-only listings
qtext (up to 100 chars)Full-text search
limit1–509Listings per page
columns1–43Columns (grid only)
layoutgrid, cards, list, mapgridLayout
search1offShow the visitor filter bar
load_more1 / false1"Load more" button (cursor pagination)

[wohno_listing]

AttributeValuesDescription
idUUIDID of a single listing

Appearance & branding

In the Appearance tab you set the default layout, number of columns, accent colour and corner radius. For full design control you can copy the card template wohno/listing-card.php into your (child) theme – the plugin then uses your version. Custom templates must escape their own output (esc_html, esc_url, esc_attr).

Map layout & OpenStreetMap

The map layout (layout="map") uses Leaflet with OpenStreetMap tiles and needs no API key. Your visitors' browsers load map tiles directly from OpenStreetMap, which transmits their IP address to OpenStreetMap. Without the map layout no such connection is made. The plugin contributes suggested privacy-policy text for both data flows (Tools → Privacy).

Performance: non-blocking rendering

The plugin never renders blocking against the API:

  • Each query has a fresh window (~5 minutes) and a longer retain window (~1 day). Fresh hits return immediately from the cache.
  • Stale hits return the cache and trigger a background refresh; only the very first view of a query fetches synchronously.
  • A 5-minute WP-Cron prewarms known queries in the background. The refresh is ETag-validated – a 304 Not Modified costs no API quota.

Security

  • The secret key is used server-side only (encrypted at rest), sent only over HTTPS in the X-API-Key header, and never exposed in the browser or page source.
  • A non-HTTPS configuration of the API base is rejected, so the key-bearing request can never be downgraded to plaintext.
  • No applicant data is created on your website – the application runs first-party on wohno.de.

Troubleshooting

SymptomPossible causeFix
No listings visibleKey invalid or missing scopeRun "Test connection"; create a key with listings:read
"API key invalid or unauthorized"Wrong scope (401/403)Create an sk_… key with listings:read in the dashboard
Listings appear delayedCaching (~5 min)Wait briefly; the prewarm refreshes in the background
"API limit reached"Rate limit (429)Retry later; the plugin serves the cache meanwhile
Filter returns (almost) nothingFilters too narrowLoosen city, rent_max or rooms_min

Configuration for staging/self-hosting

The WOHNO_API_BASE constant in wp-config.php lets you override the API base URL (default https://wohno.de). Only HTTPS is accepted – the exception being local development hosts (localhost, *.test, *.local).

define( 'WOHNO_API_BASE', 'https://staging.example.com' );

Next steps