{"id":380860,"date":"2026-10-11T13:27:49","date_gmt":"2026-10-11T13:27:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/completestores-store-locator-map\/"},"modified":"2026-10-11T13:27:33","modified_gmt":"2026-10-11T13:27:33","slug":"completestores","status":"publish","type":"plugin","link":"https:\/\/lt.wordpress.org\/plugins\/completestores\/","author":17747413,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.3","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"CompleteStores \u2013 Store Locator Map","header_author":"Develop Digital","header_description":"A lightweight store locator with an interactive Leaflet map, area \/ postal-code search, radius filter, \"use my location\", distance sorting and full brand customisation. No Google Maps API key required.","assets_banners_color":"505f77","last_updated":"2026-10-11 13:27:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/developdigital.gr\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"aipal","date":"2026-10-11 13:27:33","revision":3739521}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3739520,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3739520,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3739520,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3739520,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3739520,"resolution":"1","location":"assets","locale":"","width":1200,"height":677},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3739520,"resolution":"2","location":"assets","locale":"","width":1400,"height":705}},"screenshots":{"1":"The store locator on a page.","2":"Editing a store."}},"plugin_section":[],"plugin_tags":[4595,351,2909,6102,6113],"plugin_category":[49],"plugin_contributors":[285811],"plugin_business_model":[],"class_list":["post-380860","plugin","type-plugin","status-publish","hentry","plugin_tags-leaflet","plugin_tags-locations","plugin_tags-map","plugin_tags-store-locator","plugin_tags-stores","plugin_category-maps-and-location","plugin_contributors-aipal","plugin_committers-aipal"],"banners":{"banner":"https:\/\/ps.w.org\/completestores\/assets\/banner-772x250.png?rev=3739520","banner_2x":"https:\/\/ps.w.org\/completestores\/assets\/banner-1544x500.png?rev=3739520","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/completestores\/assets\/icon-128x128.png?rev=3739520","icon_2x":"https:\/\/ps.w.org\/completestores\/assets\/icon-256x256.png?rev=3739520","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/completestores\/assets\/screenshot-1.png?rev=3739520","caption":"The store locator on a page."},{"src":"https:\/\/ps.w.org\/completestores\/assets\/screenshot-2.png?rev=3739520","caption":"Editing a store."}],"raw_content":"<!--section=description-->\n<p>CompleteStores adds a clean, fast store locator to any page with one shortcode. Visitors can search by area or postal code, filter by distance, use their own location, see the closest stores sorted by distance and open directions in one click.<\/p>\n\n<p>It uses <a href=\"https:\/\/leafletjs.com\/\">Leaflet<\/a> (bundled with the plugin) and OpenStreetMap-compatible tiles, so <strong>there is no Google Maps API key, no billing account and no per-map fees.<\/strong><\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Interactive map with clickable pins and popups.<\/li>\n<li>Search by area or postal code, with a configurable country filter.<\/li>\n<li>Distance filter with your own options (for example 5, 10, 25, 50) in kilometres or miles.<\/li>\n<li>\"Use my location\" button \u2013 the visitor's position stays in the browser and is never stored.<\/li>\n<li>If no store is inside the chosen distance, the nearest store is shown instead of an empty result.<\/li>\n<li>Store cards with address, phone and directions, sorted by distance.<\/li>\n<li>Layout options (list left, list right or stacked) and map height.<\/li>\n<li>Developer hooks (PHP filters and a small JavaScript API) so add-ons can extend the map.<\/li>\n<li>Every label can be rewritten. English by default and fully translated into Greek; other languages can be added with standard translation files.<\/li>\n<li>Choose your own map tile provider and geocoding service, or use a \"local only\" mode that makes no external search requests.<\/li>\n<li>Accessible: keyboard-friendly store cards, visible focus, labelled controls.<\/li>\n<li>Lightweight and secure: no public write endpoints, all settings validated, all output escaped.<\/li>\n<\/ul>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[completestores]\n<\/code><\/pre>\n\n<p>Optional attributes: <code>layout<\/code> (list-left, list-right, stacked), <code>height<\/code> (280\u20131000), <code>pin_color<\/code> (for example #e53935).<\/p>\n\n<h4>Managing stores<\/h4>\n\n<p>Add stores under <strong>CompleteStores &gt; Add new<\/strong>: name, address, city, postal code, phone, latitude and longitude, and an optional Google Maps link.<\/p>\n\n<h4>CompleteStores Pro<\/h4>\n\n<p>A separate add-on, sold on developdigital.gr (the free plugin has no locked features), adds: your own branding (colours, pin shapes, custom pin images), store categories and filters with a pin colour per category, opening hours with an \"Open now\" status and holiday exceptions, extra fields (email, website, description, image), marker clustering, Google Sheet synchronisation and CSV import \/ export.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can contact the following third-party services from the visitor's browser. Which ones are used depends on your settings.<\/p>\n\n<p><strong>Map tiles \u2013 OpenStreetMap (default) or a provider you choose<\/strong>\nUsed to draw the map. Sent: the visitor's IP address and the map area requested, whenever the map is displayed.\nDefault provider: OpenStreetMap tile servers (tile.openstreetmap.org). Tile usage policy: https:\/\/operations.osmfoundation.org\/policies\/tiles\/ \u00b7 Privacy policy: https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\nThe public OpenStreetMap servers are intended for light use. For busy sites, set a tile provider of your own in the plugin settings.<\/p>\n\n<p><strong>Area \/ postal-code search \u2013 OpenStreetMap Nominatim (default), a Nominatim-compatible service you choose, or none<\/strong>\nUsed when a visitor presses the search button. Sent: the text typed by the visitor (an area or postal code), the optional country code and the visitor's IP address. Nothing is sent until the visitor presses Search. Successful results are cached in the visitor's browser (localStorage) for up to 30 days.\nDefault service: https:\/\/nominatim.openstreetmap.org \u00b7 Usage policy: https:\/\/operations.osmfoundation.org\/policies\/nominatim\/ \u00b7 Privacy policy: https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\nChoose \"Local only\" in the settings to disable all external search requests.<\/p>\n\n<p><strong>Coordinate check (administrators only)<\/strong>\nOn the store edit screen an optional \"Check against the address\" button sends the store address to the configured geocoding service when an administrator clicks it.<\/p>\n\n<p><strong>Directions links \u2013 Google Maps or OpenStreetMap<\/strong>\nDirections links open the chosen map website in a new tab only when the visitor clicks them. No data is sent by the plugin itself.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin and activate it.<\/li>\n<li>Go to <strong>CompleteStores &gt; Add new<\/strong> and add your stores (or use the Pro add-on to import them).<\/li>\n<li>Put <code>[completestores]<\/code> on a page.<\/li>\n<li>Open <strong>CompleteStores &gt; Settings<\/strong> to set the country, map centre, distance options and texts.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20google%20maps%20api%20key%3F\"><h3>Do I need a Google Maps API key?<\/h3><\/dt>\n<dd><p>No. Maps use Leaflet with OpenStreetMap-compatible tiles. Google Maps links are only used for optional directions.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20map%20tiles%3F\"><h3>Can I use my own map tiles?<\/h3><\/dt>\n<dd><p>Yes. Under Settings choose \"Custom tile provider\" and paste the HTTPS tile URL and the attribution text your provider requires.<\/p><\/dd>\n<dt id=\"is%20the%20visitor%27s%20location%20stored%3F\"><h3>Is the visitor's location stored?<\/h3><\/dt>\n<dd><p>No. The position is read by the browser and used only inside the page to calculate distances.<\/p><\/dd>\n<dt id=\"is%20the%20public%20openstreetmap%20service%20enough%20for%20my%20site%3F\"><h3>Is the public OpenStreetMap service enough for my site?<\/h3><\/dt>\n<dd><p>For small and medium sites, usually yes. The public servers have a fair-use policy; for busy sites, configure your own tile provider and geocoder, or choose \"Local only\" search.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20the%20texts%20or%20translate%20the%20locator%3F\"><h3>How do I change the texts or translate the locator?<\/h3><\/dt>\n<dd><p>Edit any label under Settings &gt; Texts. A Greek translation is included.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>Nothing is deleted unless you tick \"Delete all stores and settings when the plugin is deleted\" before uninstalling.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>First public release of CompleteStores.<\/li>\n<\/ul>","raw_excerpt":"All-in-one store locator map with search and radius filter. No Google Maps API key, no billing, no per-map fees.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=380860"}],"author":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aipal"}],"wp:attachment":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380860"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380860"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380860"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380860"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380860"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}