{"id":347108,"date":"2026-07-31T14:50:48","date_gmt":"2026-07-31T14:50:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/route-planner-4u\/"},"modified":"2026-07-31T14:50:27","modified_gmt":"2026-07-31T14:50:27","slug":"rp-4u-route-planner","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rp-4u-route-planner\/","author":23392752,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.17","stable_tag":"1.0.17","tested":"7.0.2","requires":"6.7","requires_php":"7.4","requires_plugins":null,"header_name":"RP 4U (Maps & Route Planner)","header_author":"4uWeb","header_description":"Interactive OpenStreetMap map with address autocomplete and route calculation (walking, cycling, driving) including turn-by-turn directions. Routing via a privacy-friendly proxy.","assets_banners_color":"9cb3bd","last_updated":"2026-07-31 14:50:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.4uweb.de\/routen-planer-4u","header_author_uri":"https:\/\/4uweb.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.17":{"tag":"1.0.17","author":"fhackforu","date":"2026-07-31 14:50:27"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3630138,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3630138,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3630138,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3630138,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.17"],"block_files":[],"assets_screenshots":{"screenshot-1-de_DE.png":{"filename":"screenshot-1-de_DE.png","revision":3630138,"resolution":"1","location":"assets","locale":"de_DE","width":1281,"height":1238},"screenshot-1.png":{"filename":"screenshot-1.png","revision":3630138,"resolution":"1","location":"assets","locale":"","width":1281,"height":1226},"screenshot-2-de_DE.png":{"filename":"screenshot-2-de_DE.png","revision":3630138,"resolution":"2","location":"assets","locale":"de_DE","width":1281,"height":720},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3630138,"resolution":"2","location":"assets","locale":"","width":1281,"height":717},"screenshot-3-de_DE.png":{"filename":"screenshot-3-de_DE.png","revision":3630138,"resolution":"3","location":"assets","locale":"de_DE","width":1280,"height":476},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3630138,"resolution":"3","location":"assets","locale":"","width":1280,"height":478},"screenshot-4-de_DE.png":{"filename":"screenshot-4-de_DE.png","revision":3630138,"resolution":"4","location":"assets","locale":"de_DE","width":1281,"height":1546},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3630138,"resolution":"4","location":"assets","locale":"","width":1281,"height":1546},"screenshot-5-de_DE.png":{"filename":"screenshot-5-de_DE.png","revision":3630138,"resolution":"5","location":"assets","locale":"de_DE","width":1280,"height":901},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3630138,"resolution":"5","location":"assets","locale":"","width":1280,"height":869},"screenshot-6-de_DE.png":{"filename":"screenshot-6-de_DE.png","revision":3630138,"resolution":"6","location":"assets","locale":"de_DE","width":1280,"height":1544},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3630138,"resolution":"6","location":"assets","locale":"","width":1280,"height":1544}},"screenshots":{"1":"The front-end route planner: start and destination with address autocomplete, travel mode and route preference \u2014 the calculated route on the map with numbered pins and turn-by-turn directions in the site language.","2":"\"Navigate here (QR)\": maps with a fixed destination offer a QR code \u2014 visitors scan it and their phone starts navigating from their current location. Works without any API key.","3":"All maps at a glance: manage any number of maps in the backend and embed each one with its shortcode.","4":"The map editor: center (address or coordinates), optional start and destination presets, zoom, height and the route planner toggle per map.","5":"Settings: enter your free OpenRouteService key to enable routing and adjust the plugin colors with the WordPress color picker.","6":"The built-in documentation: a step-by-step guide from creating maps to embedding, operating modes and privacy (GDPR)."}},"plugin_section":[],"plugin_tags":[3064,4595,2909,16164,10346],"plugin_category":[49],"plugin_contributors":[272225],"plugin_business_model":[],"class_list":["post-347108","plugin","type-plugin","status-publish","hentry","plugin_tags-directions","plugin_tags-leaflet","plugin_tags-map","plugin_tags-openstreetmap","plugin_tags-route","plugin_category-maps-and-location","plugin_contributors-fhackforu","plugin_committers-fhackforu"],"banners":{"banner":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/banner-772x250.jpg?rev=3630138","banner_2x":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/banner-1544x500.jpg?rev=3630138","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/icon-128x128.png?rev=3630138","icon_2x":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/icon-256x256.png?rev=3630138","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/screenshot-1.png?rev=3630138","caption":"The front-end route planner: start and destination with address autocomplete, travel mode and route preference \u2014 the calculated route on the map with numbered pins and turn-by-turn directions in the site language."},{"src":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/screenshot-2.png?rev=3630138","caption":"\"Navigate here (QR)\": maps with a fixed destination offer a QR code \u2014 visitors scan it and their phone starts navigating from their current location. Works without any API key."},{"src":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/screenshot-3.png?rev=3630138","caption":"All maps at a glance: manage any number of maps in the backend and embed each one with its shortcode."},{"src":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/screenshot-4.png?rev=3630138","caption":"The map editor: center (address or coordinates), optional start and destination presets, zoom, height and the route planner toggle per map."},{"src":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/screenshot-5.png?rev=3630138","caption":"Settings: enter your free OpenRouteService key to enable routing and adjust the plugin colors with the WordPress color picker."},{"src":"https:\/\/ps.w.org\/rp-4u-route-planner\/assets\/screenshot-6.png?rev=3630138","caption":"The built-in documentation: a step-by-step guide from creating maps to embedding, operating modes and privacy (GDPR)."}],"raw_content":"<!--section=description-->\n<p><strong>RP 4U (Maps &amp; Route Planner)<\/strong> embeds interactive OpenStreetMap maps (powered by the bundled Leaflet library) into your WordPress site \u2014 a privacy-friendly alternative to Google Maps embeds.<\/p>\n\n<h4>Maps without any API key<\/h4>\n\n<p>Create as many maps as you like in the backend (center, marker, zoom, height) and embed each one with a simple shortcode. Plain maps work <strong>without any API key or account<\/strong>: addresses you enter in the backend are geocoded once at save time, so the visitor's browser only loads the OpenStreetMap tiles \u2014 nothing else.<\/p>\n\n<p>Every map with a destination offers a <strong>\"Navigate here\" QR code<\/strong>: visitors scan it and their phone starts the navigation from their current location in Google or Apple Maps.<\/p>\n\n<h4>Optional route planner<\/h4>\n\n<p>Add your own free OpenRouteService API key (see below) and each map can show a full route planner: address autocomplete while typing, route calculation for walking, cycling and driving (recommended \/ shortest \/ fastest), a turn-by-turn directions list and a \"send route to phone\" QR code.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Unlimited maps, managed in the WordPress backend (custom post type)<\/li>\n<li>Shortcode embedding: <code>[routenplaner4u id=\"123\"]<\/code> \u2014 multiple maps per page supported<\/li>\n<li>Fixed destination, pre-filled start, custom center (address or coordinates), zoom and height per map<\/li>\n<li>Optional route planner per map (checkbox)<\/li>\n<li>Address autocomplete, turn-by-turn directions with distances and durations<\/li>\n<li>Map picker: right-click (long-press on touch) uses any point on the map as start or destination \u2014 ideal for targets without a street address; picked points get readable names via reverse geocoding<\/li>\n<li>Colored, numbered pins mark start, stops and destination<\/li>\n<li>Color settings: adjust the button colors with the WordPress color picker \u2014 no CSS needed<\/li>\n<li>Backend address fields with autocomplete and one-click \"use center address\" buttons<\/li>\n<li>QR code \/ deep links to open the route or destination in Google Maps or Apple Maps (generated locally, no external QR service)<\/li>\n<li>All libraries (Leaflet, polyline decoder, QR generator) are bundled locally \u2014 no CDN calls<\/li>\n<li>Translation-ready<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin can connect to the following external services. No data is sent anywhere without a map being embedded and used.<\/p>\n\n<p><strong>OpenStreetMap tile server<\/strong> (always, when a map is shown)\nThe map images (tiles) are loaded from tile.openstreetmap.org in the visitor's browser. The tile server receives the visitor's IP address and the map area being viewed. <a href=\"https:\/\/operations.osmfoundation.org\/policies\/tiles\/\">Terms<\/a> \u2014 <a href=\"https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\">Privacy<\/a><\/p>\n\n<p><strong>Nominatim geocoding<\/strong> (openstreetmap.org)\nAddresses entered in the backend are geocoded once at save time (server-side); the backend address autocomplete queries Nominatim while typing. If the route planner is enabled, addresses typed by visitors are geocoded in their browser and points picked on the map are reverse-geocoded to a readable name. Nominatim receives the address text or coordinates and the requesting IP. <a href=\"https:\/\/operations.osmfoundation.org\/policies\/nominatim\/\">Usage policy<\/a> \u2014 <a href=\"https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\">Privacy<\/a><\/p>\n\n<p><strong>OpenRouteService<\/strong> (openrouteservice.org, only with route planner enabled)\nRoute calculation and address autocomplete use the OpenRouteService API with the API key you configure. The service receives start\/destination coordinates, typed address fragments and the requesting IP. <a href=\"https:\/\/openrouteservice.org\/terms-of-service\/\">Terms<\/a> \u2014 <a href=\"https:\/\/heigit.org\/privacy-policy\/\">Privacy<\/a><\/p>\n\n<p><strong>Google Maps \/ Apple Maps deep links<\/strong> (only on user click)\nThe QR codes and \"open in\u2026\" links point to google.com\/maps and maps.apple.com. Nothing is sent to these services unless the visitor actively scans the code or clicks the link.<\/p>\n\n<h3>Third-Party Libraries and Assets<\/h3>\n\n<p>This plugin bundles the following third-party open-source libraries and assets, all locally \u2014 no external requests:<\/p>\n\n<p><strong>Leaflet<\/strong>\n- License: BSD-2-Clause\n- Source: https:\/\/github.com\/Leaflet\/Leaflet\n- Purpose: interactive OpenStreetMap map rendering\n- Files: assets\/libs\/leaflet\/ (see assets\/libs\/leaflet\/LICENSE)<\/p>\n\n<p><strong>polyline (encoded polyline decoder)<\/strong>\n- License: BSD-3-Clause\n- Source: https:\/\/github.com\/mapbox\/polyline\n- Purpose: decoding the route geometry returned by the routing service\n- Files: assets\/libs\/polyline\/ (see assets\/libs\/polyline\/LICENSE)<\/p>\n\n<p><strong>QR code generator<\/strong>\n- License: MIT\n- Purpose: generating the \"navigate here\" \/ \"send route to phone\" QR codes locally\n- Files: assets\/libs\/qrcode\/ (see assets\/libs\/qrcode\/LICENSE)<\/p>\n\n<p><strong>Twemoji (Twitter Emoji)<\/strong>\n- License: CC-BY 4.0 (graphics)\n- Source: https:\/\/github.com\/twitter\/twemoji\n- Purpose: local SVG icons in the admin interface (GDPR-compliant, no external emoji\/CDN requests)\n- Files: assets\/icons\/ (Twemoji code-point files, e.g. 1f5fa.svg)<\/p>\n\n<p>The location-pin icons (assets\/icons\/location_icon.svg, assets\/icons\/locations_icon.svg), the plugin icons (assets\/icon-128x128.png, assets\/icon-256x256.png) and the map placeholder image (assets\/images\/placeholder-map.jpg) are original artwork by the plugin author and are licensed as GPL together with the plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/<\/code>, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Go to <strong>RP4U<\/strong> in the admin menu and create your first map.<\/li>\n<li>Embed it with the shortcode shown in the map settings, e.g. <code>[routenplaner4u id=\"123\"]<\/code>.<\/li>\n<li>Optional: for the route planner, create a free API key at <a href=\"https:\/\/account.heigit.org\/\">openrouteservice.org<\/a> and enter it under <strong>RP4U \u2192 Settings<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>Not for maps. Plain maps (center, marker, zoom, \"navigate here\" QR) work entirely without a key. Only the route planner (route calculation + address autocomplete) needs a free OpenRouteService key.<\/p><\/dd>\n<dt id=\"can%20i%20show%20more%20than%20one%20map%20on%20a%20page%3F\"><h3>Can I show more than one map on a page?<\/h3><\/dt>\n<dd><p>Yes. Every shortcode instance is independent \u2014 different centers, destinations and settings.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20the%20openrouteservice%20key%3F\"><h3>Where do I get the OpenRouteService key?<\/h3><\/dt>\n<dd><p>Create a free account at account.heigit.org. The free tier currently includes 2,500 requests per day.<\/p><\/dd>\n<dt id=\"is%20this%20gdpr-friendly%3F\"><h3>Is this GDPR-friendly?<\/h3><\/dt>\n<dd><p>The plugin loads all its libraries locally and uses no tracking. The map tiles are loaded from openstreetmap.org (see External Services); depending on your legal interpretation you may want to load the map behind a consent tool.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Added: the plugin icon is now bundled, so update notices show the product icon instead of the generic placeholder.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>Updated the location pin artwork used for map markers (assets\/icons\/location_icon.svg, locations_icon.svg).<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Documentation: the readme description and installation steps now use the current plugin name and the correct English admin menu labels (RP4U, RP4U \u2192 Settings).<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Display name extended to \"RP 4U (Maps &amp; Route Planner)\" so the map embedding capability is visible in the plugin name.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Renamed to \"RP 4U (Route Planner)\" for the WordPress.org directory (new slug <code>rp-4u-route-planner<\/code>); functionality unchanged.<\/li>\n<li>Fixed: updated the HeiGIT privacy policy link in the readme (the previous URL no longer exists).<\/li>\n<li>Changed: translation files are no longer bundled \u2014 translations are delivered via translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>German translation: the keyless-mode notice in the map editor now uses the formal address (Sie) consistently with the surrounding backend texts.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Documentation: added the screenshot captions for the WordPress.org directory listing. No functional change.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Improved: the \"Calculate route\" button only appears once a calculation is actually possible (start and destination filled). Until then, maps with a fixed destination show just the \"Navigate here (QR)\" offer.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Changed: address autocomplete suggestions are now worldwide by default (previously limited to Germany, Austria and Switzerland). Site owners can narrow them with the new <code>rp4u_ors_countries<\/code> filter (comma-separated ISO country codes, e.g. <code>DE,AT,CH<\/code>).<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Fixed: without an API key the destination field was locked in the map editor, so keyless maps could not get their marker (\"pin\") or \"Navigate here\" QR code. The destination (incl. its map picker) is now always editable \u2014 only the actual route planner needs a key.<\/li>\n<li>Fixed: turn-by-turn directions now follow the site language (28 languages via OpenRouteService) instead of always being German.<\/li>\n<li>Improved: maps with a fixed destination now show the \"Navigate here (QR)\" button above the map even when the route planner form is present; it hides as soon as a start address is entered or a route is calculated.<\/li>\n<li>Improved: while routing is unavailable (no API key), the routing checkboxes in the map editor no longer appear checked, and the notice explains what still works without a key.<\/li>\n<li>Changed: the \"Route planner\" toggle now sits directly below the destination field in the map editor.<\/li>\n<li>Fixed: the Documentation page now uses the full admin width like every other screen.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Improved: consistent branded admin design across every screen, including the map list and the map editor (branded header with icons, intro info boxes, card-style setting groups).<\/li>\n<li>Improved: foreign admin notices from other plugins are hidden on Route Planner 4U screens for a clean, focused backend.<\/li>\n<li>New: dedicated location-pin icons after the title on the map list (\"Maps\") and map editor (\"Add New Map\" \/ \"Edit Map\").<\/li>\n<li>Changed: translations now load automatically \u2014 removed the discouraged manual textdomain loading; Requires at least is now WordPress 6.7.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Improved: the page header now also shows the section's own icon after the title (Settings, Documentation, Premium).<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Improved: consistent page header across the Settings, Documentation and Premium pages (\"Route Planner 4U \u2013 \" with the plugin icon and a divider). No functional change.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>New: a \"Premium\" info page that lists the additional features of the separately distributed premium version (privacy proxy, waypoints, GPX export). No change to the free features.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: In the map editor the \"use center address\" buttons stayed clickable when routing is disabled (no OpenRouteService key) and a center address was entered. They now remain disabled together with the rest of the routing fields.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Maintenance: internal code hardening in the map editor (output escaping of the field-state attribute). No functional change.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: In the map editor the routing fields (start, destination, travel mode, route preference) are now disabled when no OpenRouteService key is set \u2014 matching the front end, where the route planner only appears once a key is configured. A hint links to the settings.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable release for the WordPress.org plugin directory.<\/li>\n<li>Documentation: a clear setup guide for the free version \u2014 create a free OpenRouteService key and enter it under Route Planner 4U \u2192 Settings to enable the route planner.<\/li>\n<li>Internationalization refresh: English source language with a bundled German translation.<\/li>\n<\/ul>\n\n<h4>0.14.6<\/h4>\n\n<ul>\n<li>Documentation page: a book icon in the admin menu and a cleaner, styled layout.<\/li>\n<\/ul>\n\n<h4>0.14.5<\/h4>\n\n<ul>\n<li>Internationalization: the plugin now uses English as its source language with a bundled German translation, so it is ready for the WordPress.org directory (existing German installs stay German).<\/li>\n<li>New: an in-plugin Documentation page under \"Route Planner 4U \u2192 Documentation\".<\/li>\n<li>Renamed to \"Route Planner 4U\" (admin menu: RP4U); the plugin details view now shows the correct description.<\/li>\n<\/ul>\n\n<h4>0.14.4<\/h4>\n\n<ul>\n<li>Consent placeholder now fills the map area (background image with a readability veil, centered \"load\" box) instead of collapsing to a thin strip; ships a bundled default map backdrop used when no placeholder image is configured.<\/li>\n<\/ul>\n\n<h4>0.14.3<\/h4>\n\n<ul>\n<li>Maps can now sit behind a consent banner: a map only loads its OpenStreetMap tiles once a consent tool releases it \u2014 works out of the box with a contextual placeholder (e.g. CCT4U). Without a consent tool the map loads as before.<\/li>\n<\/ul>\n\n<h4>0.14.2<\/h4>\n\n<ul>\n<li>Front-end map picker reworked: a \"choose on map\" button next to the start, destination and each stop; the crosshair now only appears while picking. The right-click menu remains as a bonus.<\/li>\n<li>Picked and reverse-geocoded addresses now include the house number and read as \"street no., postcode city, county, state\".<\/li>\n<li>Route and validation errors now appear right next to the \"calculate route\" button instead of below the map; specific messages for a missing start vs destination.<\/li>\n<li>Backend map picker now centers on the field's existing address instead of showing the whole country.<\/li>\n<li>The front-end \"choose on map\" button matches the backend icon; stop buttons are aligned on one baseline.<\/li>\n<li>Fix: Apple Maps deep link now uses the documented parameter order so it opens the correct destination.<\/li>\n<li>Assets are cache-busted by file modification time.<\/li>\n<\/ul>\n\n<h4>0.14.1<\/h4>\n\n<ul>\n<li>New: per-map toggles to allow or lock visitor editing of the pre-filled start and destination fields.<\/li>\n<li>Backend map picker refined: crosshair cursor, compact icon buttons with tooltips, wider address fields, clearer zoom help.<\/li>\n<li>Premium: the plugins list shows the active license tier next to the plugin name.<\/li>\n<li>Fix: the \"use center address\" button stayed disabled after picking the center on the map.<\/li>\n<\/ul>\n\n<h4>0.14.0<\/h4>\n\n<ul>\n<li>New: visual map picker in the backend \u2014 a \"choose on map\" button next to the center\/start\/destination fields opens a map; one click sets the coordinates and fills the address (reverse geocoding).<\/li>\n<li>The OpenRouteService API key field is hidden in premium (proxy) mode, where no key is needed.<\/li>\n<li>Fix: the \"License\" plugin action link pointed to the wrong admin page.<\/li>\n<\/ul>\n\n<h4>0.13.2<\/h4>\n\n<ul>\n<li>Map attribution now links to OpenStreetMap's copyright page and uses the short form.<\/li>\n<\/ul>\n\n<h4>0.13.1<\/h4>\n\n<ul>\n<li>Color pickers preselect the default green; dashicons for the plugin submenu items; hardened backend input sanitization.<\/li>\n<\/ul>\n\n<h4>0.13.0<\/h4>\n\n<ul>\n<li>New: primary\/secondary color settings \u2014 style the plugin buttons with the WordPress color picker, no CSS needed (defaults unchanged).<\/li>\n<\/ul>\n\n<h4>0.12.0<\/h4>\n\n<ul>\n<li>Backend: address autocomplete for center\/start\/destination (a picked center suggestion also fills the coordinates), \"use center address\" copy buttons, readable field widths; \"+ stop\" is now a proper outline button.<\/li>\n<\/ul>\n\n<h4>0.11.0<\/h4>\n\n<ul>\n<li>New: colored numbered pins for start (S), stops (1..n) and destination (Z) \u2014 pure CSS, no image assets.<\/li>\n<li>New: points picked on the map get readable place names via reverse geocoding.<\/li>\n<li>Premium: reorder stops via drag &amp; drop (mouse and touch).<\/li>\n<\/ul>\n\n<h4>0.10.0<\/h4>\n\n<ul>\n<li>New: map picker \u2014 right-click (long-press on touch) offers the clicked point as start or destination (Premium: also as stop), ideal for targets without a street address.<\/li>\n<\/ul>\n\n<h4>0.9.1<\/h4>\n\n<ul>\n<li>Fix: adding or removing a stop re-enables the calculate button.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Premium: intermediate stops (waypoints) with autocomplete - route, directions, QR link and GPX include them.<\/li>\n<\/ul>\n\n<h4>0.8.2<\/h4>\n\n<ul>\n<li>UI: totals + QR\/GPX export appear right of the calculate button (only after calculation, as overlay); directions below the map.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Leaflet updated to 1.9.4, readme and license added, translation template.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Phone export: QR codes and deep links for Google\/Apple Maps (\"send route to phone\", \"navigate here\").<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Settings page with OpenRouteService key support (own-key mode).<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Maps without key: geocode-on-save, per-map route planner checkbox.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Route planner: address autocomplete, route calculation, turn-by-turn directions.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>First visible map: Leaflet bundled locally, map rendering from backend config.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Backend map manager (custom post type) with per-map settings and shortcode.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial scaffold.<\/li>\n<\/ul>","raw_excerpt":"Interactive OpenStreetMap maps with an optional route planner (walking, cycling, driving) including turn-by-turn directions \u2014 no Google required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347108"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fhackforu"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347108"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347108"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347108"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347108"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347108"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}