Title: JTZL Community Project Maps with OpenStreetMap
Author: voceadinumbra
Published: <strong>November 8, 2026</strong>
Last modified: November 8, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/jtzl-community-project-maps.svg)

# JTZL Community Project Maps with OpenStreetMap

 By [voceadinumbra](https://profiles.wordpress.org/voceadinumbra/)

[Download](https://downloads.wordpress.org/plugin/jtzl-community-project-maps.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/jtzl-community-project-maps/#description)
 * [Reviews](https://wordpress.org/plugins/jtzl-community-project-maps/#reviews)
 *  [Installation](https://wordpress.org/plugins/jtzl-community-project-maps/#installation)
 * [Development](https://wordpress.org/plugins/jtzl-community-project-maps/#developers)

 [Support](https://wordpress.org/support/plugin/jtzl-community-project-maps/)

## Description

JTZL Community Project Maps with OpenStreetMap lets logged-in members propose project
locations and updates. Administrators approve each new listing and edit before it
becomes public.

 * Display the map and location list with [jtzl_map].
 * Filter projects by status, recenter with browser location, and select or drag
   a proposed location marker.
 * Require a name and location; configure optional status, capacity, source, size
   and other fields.
 * Review new listings separately from proposed edits. An existing listing accepts
   one pending edit at a time.
 * Accept one JPEG, PNG or WebP photo per proposal, limited to 2 MB / 20 megapixels.
   Pending photos remain private; approval re-encodes the photo before publication.
 * Import UTF-8 CSV files of up to 1 MB / 500 rows into the review queue. Exact 
   duplicates are skipped; configurable proximity checks help prevent repeat imports.
 * Optional Geoapify autocomplete is available inside the submission form. There
   are no search boxes above the map.

Author: Andrei Siminiciuc. This is an independent integration, not an official OpenStreetMap
or OpenStreetMap Foundation plugin.

#### External services

No service requests are made merely by activating this plugin. Both integrations
are disabled by default and require explicit administrator opt-in in JTZL Community
Project Maps with OpenStreetMap > Settings. Adding a shortcode does not enable a
service. When upgrading from a development build, review these settings and opt 
in to the services you want to use.

OpenStreetMap:
 When a visitor views, pans or zooms the map, their browser requests
HTTPS map images. The default endpoint is https://tile.openstreetmap.org/{z}/{x}/{
y}.png. Requests disclose the viewed tile coordinates, visitor IP address, browser
headers and applicable referrer information. The service supplies the background
map; it does not store this plugin’s listing database. No API key is needed for 
the default tiles. Standard OpenStreetMap tiles are a best-effort service, not an
unlimited hosted map service. No bulk downloading or offline prefetching is implemented.
Review usage policy before use, especially on busy sites.

 * Tile policy: https://operations.osmfoundation.org/policies/tiles/
 * Terms: https://osmfoundation.org/wiki/Terms_of_Use
 * Privacy: https://osmfoundation.org/wiki/Privacy_Policy
 * Data attribution: https://www.openstreetmap.org/copyright

Geoapify:
 This optional service supplies address suggestions in the submission 
form’s Location field. It requires an administrator-provided Geoapify account/key
and separate explicit opt-in to service requests and Geoapify / OpenStreetMap credits.
After at least three characters and a short typing pause, the browser sends the 
typed query and public API key to https://api.geoapify.com/v1/geocode/autocomplete.
Geoapify also receives the visitor’s IP address and browser request headers. Its
account quotas and terms apply; restrict the browser key to your website’s origins/
referrers. The plugin does not contact Geoapify if this option is disabled. Manual
map placement and coordinates work without it.

 * Terms: https://www.geoapify.com/terms-and-conditions/
 * Privacy: https://www.geoapify.com/privacy-policy/

#### Privacy and stored data

Contributions store names, location labels, coordinates, configured field values,
contributing account IDs, pending photos and review history in WordPress. Approved
listing values and photos are publicly displayed. Pending and rejected proposals
are not returned by the public map endpoints. Rejected pending photo data is deleted;
remaining proposal history is retained. Previously approved media is retained when
replaced. Site administrators should set retention policies and handle removal requests,
including any identifying information submitted in free-text fields or photos. Suggested
privacy-policy text is available in WordPress’s Privacy Policy Guide.

Browser geolocation is requested only after a visitor clicks a location button and
grants browser permission. Recentring changes only their view. Coordinates chosen
in a proposal are stored only upon submission. When tiles are enabled, a recentered
map loads the corresponding tiles from the provider. Browser/OS location services
have their own privacy terms.

There is no analytics, advertising, remote executable code, external updater or 
communication with the plugin author. JavaScript, CSS and Leaflet assets are bundled
locally. No private API credentials are bundled.

Data is retained on deactivation and deletion to prevent accidental loss of community
contributions. Unpublishing removes a listing from the public map but retains its
data. To completely purge data, an administrator must remove jtzl_listing / jtzl_proposal
posts and their metadata, jtzl_fields and jtzl_settings options, jtzl_ lock/notice/
rate entries, and any associated media they no longer need. Back up first. There
is no automatic destructive uninstall routine.

### Source and licenses

First-party PHP, JavaScript and CSS are readable source and licensed GPLv2 or later;
no build step is required. GPL text is included in LICENSE.txt.

Leaflet 1.9.4 is bundled under BSD-2-Clause, compatible with GPL. The original LICENSE
is in assets/leaflet/LICENSE. Its readable source is included as assets/leaflet/
leaflet-src.js; the browser uses the original distribution leaflet.js and leaflet.
css. Upstream source and build instructions: https://github.com/Leaflet/Leaflet/
tree/v1.9.4. Upstream build uses its package.json scripts. This plugin does not 
download executable assets at runtime.

## Installation

 1. Upload the plugin ZIP through Plugins > Add New Plugin, or place the jtzl-community-
    project-maps directory in wp-content/plugins.
 2. Activate JTZL Community Project Maps with OpenStreetMap.
 3. Open JTZL Community Project Maps with OpenStreetMap > Settings. Review the external-
    service disclosures. Enable OpenStreetMap tiles and their attribution if desired.
    Optionally configure and enable Geoapify.
 4. Add [jtzl_map] to a Shortcode block on a page.
 5. Use JTZL Community Project Maps with OpenStreetMap > Review queue to approve or
    reject contributions. Only administrators with manage_options can review, change
    settings or import CSV.

## FAQ

### Who can add or edit a listing?

Logged-in members can propose contributions. Every new listing or edit requires 
administrator approval. Published details remain unchanged until approval. A pending
edit prevents further edit proposals until it is approved or rejected.

### Why is the map background blank after upgrading?

Enable OpenStreetMap tiles and their required contributor credit in Settings. This
is off by default. Without it, listings and markers remain available on a blank 
map background; no tile requests or map credit links are sent or displayed.

### What happened to the two search boxes?

The listing search and separate city/address search above the map have been removed.
The status filter and location button remain. Address suggestions can still be enabled
for the submission form’s Location field.

### Which CSV headers are supported?

Required: name,location,lat,lng. Optional headers use the configured field keys,
such as status,size,energy_capacity,power_source,existence. Latitude/longitude use
decimal degrees. A field marked required in Form fields is also required in CSV 
rows. Imports create proposals, not updates, and never download remote images.

### Does the plugin require a paid service?

No payment unlocks plugin code or features. OpenStreetMap standard tiles and manual
location entry need no API key. Optional Geoapify has its own account plans and 
quotas.

### How do I upgrade from the previous development ZIP?

Back up the database and deactivate the previous plugin before activating this renamed
plugin. In Settings, use “Migrate legacy settings and next 100 records” before saving
new settings. Repeat until “No legacy records remain” appears. This copies existing
settings only when new settings do not exist, and preserves post IDs, statuses, 
images and pending edit relationships. Old metadata and options remain for recovery;
post types are renamed, so rollback requires the database backup. Do not run both
plugins together.

Replace [openstreet_map] with [jtzl_map] on your pages. Custom CSS selectors now
use .jtzl- instead of .ecm-. Enable map tiles in Settings after migration. No page
content is rewritten automatically.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“JTZL Community Project Maps with OpenStreetMap” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ voceadinumbra ](https://profiles.wordpress.org/voceadinumbra/)

[Translate “JTZL Community Project Maps with OpenStreetMap” into your language.](https://translate.wordpress.org/projects/wp-plugins/jtzl-community-project-maps)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/jtzl-community-project-maps/),
check out the [SVN repository](https://plugins.svn.wordpress.org/jtzl-community-project-maps/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/jtzl-community-project-maps/)
by [RSS](https://plugins.trac.wordpress.org/log/jtzl-community-project-maps/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Prepared initial directory release under a distinctive integration name and matching
   text domain.
 * Prefixed shortcode, hooks, assets, storage and PHP/JavaScript declarations with
   JTZL/jtzl.
 * Added explicit OpenStreetMap service and credit consent, default off.
 * Replaced the transient rate counter with an atomic database admission update:
   ten attempts per non-administrator per hour from the first attempt in a window.
 * Retained nonce, authentication and administrator capability checks on mutations.
 * Added an administrator-only migration for previous development data.

## Meta

 *  Version **1.0.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [community](https://wordpress.org/plugins/tags/community/)[locations](https://wordpress.org/plugins/tags/locations/)
   [map](https://wordpress.org/plugins/tags/map/)[moderation](https://wordpress.org/plugins/tags/moderation/)
   [openstreetmap](https://wordpress.org/plugins/tags/openstreetmap/)
 *  [Advanced View](https://wordpress.org/plugins/jtzl-community-project-maps/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/jtzl-community-project-maps/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/jtzl-community-project-maps/reviews/)

## Contributors

 *   [ voceadinumbra ](https://profiles.wordpress.org/voceadinumbra/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/jtzl-community-project-maps/)