WP Manifestindependent plugin directory
manifest / content / aomark-listings

Aomark Listings

Elementor-first WordPress listings engine with custom models, fields, taxonomies, AJAX filters, galleries, and interactive OpenStreetMap maps.

by Aomark.io · github.com/alex27m/aomark-listings · website

0stars
0forks

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/alex27m/aomark-listings/archive/refs/heads/main.zip

An Elementor-first WordPress listings engine for real-estate, directory, and custom listing sites. Version 3.5.3 keeps the existing data model and public URLs while making the admin experience lighter, clearer, progressively enhanced, and reliable with both pretty and plain permalinks.

What it provides

  • Guided Real Estate, Directory, and Custom Listing starters.
  • Generated custom post types, public taxonomies, and native WordPress post meta.
  • Text, textarea, number, price, select, checkbox, image, gallery, location, URL, email, and date fields.
  • Search, filtering, sorting, numbered pagination, Load More, results cards, and maps.
  • Normal URL behavior without JavaScript, enhanced in place when JavaScript is available.
  • Six Elementor widgets: Listing Results, Filter, Map, Field, Gallery, and Meta.
  • Locally bundled Leaflet; no executable JavaScript or CSS is loaded from a CDN.

The model engine and native listing editor work without Elementor. Elementor is required only for the visual widgets.

Quick start

  1. Install and activate the plugin.
  2. Open Aomark Listings and choose a starter listing type.
  3. Review its friendly names, categories, filters, and fields.
  4. Publish a listing.
  5. Add Listing Results in Elementor; add Filter and Map if needed.
  6. Use the same Listing Type and, for pages with multiple groups, the same unique Connection ID on related widgets.

Existing technical identifiers are read-only because changing them without a migration can disconnect stored content and Elementor documents. Friendly labels remain editable.

See the full quick-start guide, compatibility contract, and release test matrix.

When upgrading from 3.4.x, clear full-page and CDN caches once. Version 3.5 rejects stale unsigned AJAX descriptors by design; the server-rendered fallback continues to work while caches refresh.

Multiple widget groups

Connection IDs isolate live Filter–Results–Map groups, including stale-request cancellation and map updates. Different listing types are also isolated in normal URL and browser-history behavior.

The public alm_* URL format stores one state per listing type. If two groups for the same listing type must each retain an independent state after a full page reload, place them on separate pages. Their live AJAX interactions can still be isolated on one page with different Connection IDs.

Location and external services

Leaflet 1.9.4 is included locally under assets/vendor/leaflet/ with its license. Its human-readable source is available as leaflet-src.js and in the official 1.9.4 source tag. The optional location features use two documented external services by default:

  • Photon for editor address search. The editor must explicitly choose the Photon search action after entering at least three characters. The address query, optional country code, plugin version/public project URL in the User-Agent, and normal server request metadata are then sent from WordPress to Photon; the individual site's URL is not included. Searches are rate limited, request at most five results, and successful responses are cached for 12 hours. See Komoot's privacy policy.
  • OpenStreetMap tiles for admin and frontend maps. Hidden Location tabs do not request admin tiles; opening a Location tab automatically loads its map. Frontend tiles load only on pages where a site owner placed the Map widget. A browser loading either map sends normal request data—such as IP address, User-Agent, referrer, and tile coordinates—to tile.openstreetmap.org. See the OSMF privacy policy and attribution requirements.

The plugin adds suggested disclosure text to WordPress' Privacy Policy Guide and sends no analytics or telemetry to Aomark.

The geocoder can be changed or self-hosted without editing plugin files:

add_filter( 'aomark_listings_geocoder_endpoint', function () {
    return 'https://photon.example.com/api/';
} );

add_filter( 'aomark_listings_geocoder_country_code', function () {
    return 'rs';
} );

The HTTPS tile template and required attribution are filterable too:

add_filter( 'aomark_listings_tile_url', function () {
    return 'https://tiles.example.com/{z}/{x}/{y}.png';
} );

add_filter( 'aomark_listings_tile_attribution', function () {
    return '© Example Maps';
} );

The initial location-editor view is also filterable:

add_filter( 'aomark_listings_editor_map_default_center', function () {
    return [ 44.0165, 21.0059 ];
} );

add_filter( 'aomark_listings_editor_map_default_zoom', function () {
    return 7;
} );

Compatibility and security

  • Existing model IDs, post types, taxonomy slugs, field IDs, meta keys, CSS classes, Elementor widget names, and public alm_* parameters remain compatibility contracts.
  • Unknown model references fail closed instead of falling back to another type.
  • Public AJAX settings use purpose-bound HMAC descriptors and server-side allowlists.
  • Anonymous listing queries are limited to published content; privileged post previews require WordPress capabilities.
  • Query sizes, pages, filters, terms, map markers, geocoder requests, and remote response bodies are bounded.
  • Schema upgrades are additive and idempotent, with a one-time rollback snapshot of an existing registry.

Development checks

The plugin has no build step. With PHP and Node.js installed:

find . -name '*.php' -print0 | xargs -0 -n1 php -l
php tests/model-contract.php
find assets -name '*.js' -print0 | xargs -0 -n1 node --check
node tests/static-contracts.mjs
npm run check
git diff --check

GitHub Actions runs PHP syntax checks on PHP 7.4, 8.3, and 8.5, the PHP model contracts, JavaScript syntax, static compatibility contracts, a deterministic exact-package gate, and the official WordPress Plugin Check action. WordPress integration, browser, legacy-upgrade, accessibility, and scale scenarios remain explicit manual release checks in docs/testing.md.

License

Aomark Listings is licensed under the GNU General Public License v2.0 or later. Leaflet retains its own included license notice.