{"id":357169,"date":"2026-09-07T22:03:48","date_gmt":"2026-09-07T22:03:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/lynbro-danadresse\/"},"modified":"2026-09-07T22:03:18","modified_gmt":"2026-09-07T22:03:18","slug":"lynbro-danadresse","status":"publish","type":"plugin","link":"https:\/\/nl.wordpress.org\/plugins\/lynbro-danadresse\/","author":23511594,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.2","stable_tag":"0.4.2","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Lynbro Danadresse","header_author":"Lynbro","header_description":"Typo-tolerant Danish address autocomplete and validation (DAWA-compatible) that autofills WooCommerce and every major form builder \u2014 powered by danadresse.dk.","assets_banners_color":"428e72","last_updated":"2026-09-07 22:03:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.lynbro.dk\/lynbro-danadresse","header_author_uri":"https:\/\/lynbro.dk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.2":{"tag":"0.4.2","author":"lynbro","date":"2026-09-07 22:03:18","revision":3685655}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3685656,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3685656,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3685656,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3685656,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"lynbro-danadresse\/address-field":{"name":"lynbro-danadresse\/address-field","title":"Danish address field"}},"tagged_versions":["0.4.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3685656,"resolution":"1","location":"assets","locale":"","width":1800,"height":1720},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3685656,"resolution":"2","location":"assets","locale":"","width":2160,"height":1358},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3685656,"resolution":"3","location":"assets","locale":"","width":2160,"height":3526},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3685656,"resolution":"4","location":"assets","locale":"","width":2160,"height":1338},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3685656,"resolution":"5","location":"assets","locale":"","width":2160,"height":1522},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3685656,"resolution":"6","location":"assets","locale":"","width":2160,"height":876},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3685656,"resolution":"7","location":"assets","locale":"","width":2160,"height":1276},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3685656,"resolution":"8","location":"assets","locale":"","width":2160,"height":2088},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3685656,"resolution":"9","location":"assets","locale":"","width":1536,"height":1024}},"screenshots":{"1":"Autocomplete on the WooCommerce checkout \u2014 one address, typed once.","2":"Settings \u2014 paste your danadresse.dk API key and choose how suggestions behave.","3":"Integrations \u2014 toggle autofill for 14 plugins; the ones active on your site are marked.","4":"Status \u2014 a live test lookup, so you can confirm the key works without leaving WordPress.","5":"Statistics \u2014 daily lookups from this site over the last 30 days.","6":"Log \u2014 recent failures in plain words; no address text is ever stored.","7":"Languages \u2014 what WordPress has installed for your site, nothing to configure.","8":"About \u2014 what the plugin does, how it handles data, and the external service it uses.","9":"How it works \u2014 one address, typed once, autofilled into checkout, form and membership fields."}},"plugin_section":[],"plugin_tags":[17237,2183,279623,153595,286],"plugin_category":[45],"plugin_contributors":[268427],"plugin_business_model":[],"class_list":["post-357169","plugin","type-plugin","status-publish","hentry","plugin_tags-address-autocomplete","plugin_tags-address-validation","plugin_tags-dawa","plugin_tags-denmark","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-lynbro","plugin_committers-lynbro"],"banners":{"banner":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/banner-772x250.png?rev=3685656","banner_2x":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/banner-1544x500.png?rev=3685656","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/icon-128x128.png?rev=3685656","icon_2x":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/icon-256x256.png?rev=3685656","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-1.png?rev=3685656","caption":"Autocomplete on the WooCommerce checkout \u2014 one address, typed once."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-2.png?rev=3685656","caption":"Settings \u2014 paste your danadresse.dk API key and choose how suggestions behave."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-3.png?rev=3685656","caption":"Integrations \u2014 toggle autofill for 14 plugins; the ones active on your site are marked."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-4.png?rev=3685656","caption":"Status \u2014 a live test lookup, so you can confirm the key works without leaving WordPress."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-5.png?rev=3685656","caption":"Statistics \u2014 daily lookups from this site over the last 30 days."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-6.png?rev=3685656","caption":"Log \u2014 recent failures in plain words; no address text is ever stored."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-7.png?rev=3685656","caption":"Languages \u2014 what WordPress has installed for your site, nothing to configure."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-8.png?rev=3685656","caption":"About \u2014 what the plugin does, how it handles data, and the external service it uses."},{"src":"https:\/\/ps.w.org\/lynbro-danadresse\/assets\/screenshot-9.png?rev=3685656","caption":"How it works \u2014 one address, typed once, autofilled into checkout, form and membership fields."}],"raw_content":"<!--section=description-->\n<p>Lynbro Danadresse Autofill adds fast, typo-tolerant <strong>Danish address autocomplete<\/strong> to your whole site \u2014 the WooCommerce checkout, My Account address forms, and the address field of every major form builder \u2014 then <strong>validates delivery addresses<\/strong> so parcels stop bouncing because of a mistyped street or postal code.<\/p>\n\n<p>It is the official WordPress companion for <a href=\"https:\/\/danadresse.dk\">danadresse.dk<\/a>, a DAWA-compatible Danish address API. If you previously used DAWA (dawadocs.dataforsyningen.dk), the suggestion format and address IDs are the same.<\/p>\n\n<h4>Works everywhere \u2014 automatically<\/h4>\n\n<p>One widget, many plugins, through built-in <strong>integration adapters<\/strong> that know each plugin's fields. Composite address fields also fill <strong>postcode and city<\/strong> for you:<\/p>\n\n<ul>\n<li><strong>WooCommerce<\/strong> \u2014 classic checkout, the <strong>Checkout Block<\/strong>, and My Account (and any WooCommerce extension that uses the standard checkout \u2014 Subscriptions, Bookings, Memberships\u2026).<\/li>\n<li><strong>WPForms<\/strong> \u2014 the Address field.<\/li>\n<li><strong>Gravity Forms<\/strong> \u2014 the Address field.<\/li>\n<li><strong>Fluent Forms<\/strong> \u2014 the Address field.<\/li>\n<li><strong>Formidable Forms<\/strong> \u2014 the Address field.<\/li>\n<li><strong>Forminator<\/strong> \u2014 the Address field.<\/li>\n<li><strong>Everest Forms<\/strong> \u2014 the Address field.<\/li>\n<li><strong>Easy Digital Downloads<\/strong> \u2014 the checkout billing address.<\/li>\n<li><strong>GiveWP<\/strong> \u2014 the donation billing address.<\/li>\n<li><strong>Paid Memberships Pro<\/strong> \u2014 the membership checkout billing address.<\/li>\n<li><strong>Ultimate Member<\/strong> \u2014 the profile \/ registration address field.<\/li>\n<li><strong>Contact Form 7, Ninja Forms, Elementor<\/strong> \u2014 auto-detect an address field, or point the plugin at it with a CSS selector.<\/li>\n<li><strong>Any theme or custom form<\/strong> \u2014 a CSS selector, a <code>data-lynbro-danadresse<\/code> attribute, the <code>[lynbro_danadresse_field]<\/code> shortcode, or the \"Danish address field\" block.<\/li>\n<\/ul>\n\n<p>Turn each integration on or off from a simple <strong>Integrations<\/strong> screen that marks which target plugins are active on your site.<\/p>\n\n<h4>Highlights<\/h4>\n\n<ul>\n<li><strong>Typo-tolerant<\/strong> \u2014 \"radhuspladsen\" finds \"R\u00e5dhuspladsen\"; oe\u2194\u00f8, aa\u2194\u00e5, ae\u2194\u00e6 folding included.<\/li>\n<li><strong>Address validation (datavask)<\/strong> \u2014 on WooCommerce checkout, Danish delivery addresses are washed against the register; the result (exact \/ close \/ not recognised) is saved on the order and shown to the shop admin. Optionally block clearly invalid addresses.<\/li>\n<li><strong>Privacy-sound by design<\/strong> \u2014 your API key stays on the server; visitors' browsers never talk to the address service, and no visitor IP is forwarded by the plugin.<\/li>\n<li><strong>Accessible<\/strong> \u2014 the suggestion list is a proper ARIA combobox with full keyboard support.<\/li>\n<li><strong>Light<\/strong> \u2014 one small script + style, loaded only where an address field exists.<\/li>\n<\/ul>\n\n<h4>You can see what it is doing<\/h4>\n\n<p>No black box. The plugin's own screens answer the questions a shop owner actually asks:<\/p>\n\n<ul>\n<li><strong>Status<\/strong> \u2014 is the key working? Run a live test lookup without leaving WordPress.<\/li>\n<li><strong>Statistics<\/strong> \u2014 how many lookups this site made, day by day, for the last 30 days.<\/li>\n<li><strong>Log<\/strong> \u2014 the last failures and what each one means in plain words (\"Key blocked \u2014 unlock it in the danadresse.dk dashboard\"). Only technical facts are kept; the address text a visitor typed is never stored.<\/li>\n<li><strong>Languages<\/strong> \u2014 which translations WordPress has installed for your site.<\/li>\n<li><strong>Tools<\/strong> \u2014 export or reset the plugin's settings.<\/li>\n<\/ul>\n\n<h4>What you need<\/h4>\n\n<p>A free API key from <a href=\"https:\/\/danadresse.dk\">danadresse.dk<\/a> (2,000 lookups\/month on the free tier \u2014 enough for most small shops). Larger plans are available on danadresse.dk; the plugin itself is fully functional and free.<\/p>\n\n<h4>For developers<\/h4>\n\n<ul>\n<li><code>lynbro_danadresse_integrations<\/code> \u2014 add or modify an integration adapter.<\/li>\n<li><code>lynbro_danadresse_result<\/code> \u2014 filter the suggestion list server-side.<\/li>\n<li><code>lynbro_danadresse_washed<\/code> \u2014 action fired after each address validation.<\/li>\n<li><code>lynbro_danadresse_attach_selectors<\/code> \u2014 filter the CSS selectors the widget attaches to.<\/li>\n<li><code>lynbro_danadresse_api_base<\/code> \u2014 point the client at a self-hosted mirror.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin talks to <strong>one<\/strong> external service: the danadresse.dk address API (<code>https:\/\/api.danadresse.dk<\/code>), operated by LynBro ApS, Denmark.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> the address text a visitor types into an autofill-enabled field (plus your API key, sent server-to-server), and \u2014 when address validation is enabled \u2014 the delivery address entered at checkout. Requests are proxied through your server; the visitor's browser never contacts the service and no visitor IP is forwarded by the plugin.<\/li>\n<li><strong>When:<\/strong> only while a visitor types in an address field, when an order with a Danish delivery address is placed (if validation is enabled), or when you run a test lookup in the settings.<\/li>\n<li><strong>Terms:<\/strong> https:\/\/danadresse.dk\/terms \u2014 <strong>Privacy:<\/strong> https:\/\/danadresse.dk\/privacy<\/li>\n<\/ul>\n\n<p>No other external requests are made. Without an API key configured, the plugin makes no external requests at all.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Create a free API key at danadresse.dk and paste it under <strong>Lynbro \u2192 Danadresse \u2192 Settings<\/strong>.<\/li>\n<li>Open the <strong>Integrations<\/strong> tab. WooCommerce and every detected form builder are on by default \u2014 toggle any you don't want. For a form without a dedicated adapter, add its CSS selector, use the shortcode\/block, or turn on Auto-detect.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20form%20plugins%20are%20supported%3F\"><h3>Which form plugins are supported?<\/h3><\/dt>\n<dd><p>WooCommerce (classic + Checkout Block + My Account), WPForms, Gravity Forms, Fluent Forms, Formidable Forms and Easy Digital Downloads have built-in adapters that also fill postcode and city. Contact Form 7, Ninja Forms, Elementor and any custom form attach through auto-detect, a CSS selector, the shortcode or the block.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>Yes \u2014 a free danadresse.dk key gives 2,000 lookups\/month, enough for most small shops. The key is stored on your server and never sent to visitors.<\/p><\/dd>\n<dt id=\"is%20this%20dawa%3F\"><h3>Is this DAWA?<\/h3><\/dt>\n<dd><p>The API is DAWA-compatible (same autocomplete and datavask semantics and the same address IDs), operated by danadresse.dk. Existing DAWA integrations migrate without changing IDs.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20service%20is%20down%20or%20my%20quota%20is%20used%20up%3F\"><h3>What happens if the service is down or my quota is used up?<\/h3><\/dt>\n<dd><p>Autocomplete quietly disappears and forms keep working as plain text fields. Address validation never blocks checkout when the service is unreachable.<\/p><\/dd>\n<dt id=\"which%20data%20is%20stored%20in%20my%20database%3F\"><h3>Which data is stored in my database?<\/h3><\/dt>\n<dd><p>Your settings, a local 30-day lookup counter, a short list of recent errors (time, kind of lookup, error code \u2014 never the address text), short-lived response caches, and \u2014 when validation is enabled \u2014 the validation result on each order. Nothing else.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20download%20a%20copy%20of%20the%20danish%20address%20register%3F\"><h3>Does the plugin download a copy of the Danish address register?<\/h3><\/dt>\n<dd><p>No. Every suggestion is a live lookup against the service, so you always get current data and your database stays small. There is no import step and nothing to keep in sync.<\/p><\/dd>\n<dt id=\"is%20it%20translated%20into%20danish%3F\"><h3>Is it translated into Danish?<\/h3><\/dt>\n<dd><p>Yes. Translations are served by translate.wordpress.org and installed by WordPress itself, so they stay current without a plugin update. Both the admin screens and the suggestion list follow whatever language WordPress is running in; the <strong>Languages<\/strong> tab shows what is installed on your site.<\/p><\/dd>\n<dt id=\"where%20do%20i%20see%20whether%20it%20is%20actually%20working%3F\"><h3>Where do I see whether it is actually working?<\/h3><\/dt>\n<dd><p><strong>Lynbro \u2192 Danadresse \u2192 Status<\/strong> runs a live test lookup through your key. <strong>Statistics<\/strong> shows daily lookup counts from this site, and <strong>Log<\/strong> lists recent failures with a plain-language explanation of each.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>The Tools screen can no longer be pointed at another plugin's settings. It used to send the list of options to export or reset along with the request, and any name starting with \"lynbro\" was accepted \u2014 so on a site running several Lynbro plugins, one plugin's Tools form could read or delete another's settings. The list now comes from code, and each screen's form is signed for that screen alone.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>The public address-lookup endpoint now requires a valid nonce on every request. It previously fell back to accepting any request that claimed to come from this site, which a Referer header can claim for free \u2014 so the endpoint, which spends your API quota, was effectively open. On a page cached longer than the nonce lifetime the field simply behaves as ordinary text.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Nothing from this plugin appears outside its own screens any more. The review request moved onto the settings page, and the redirect that used to hijack the browser after activation is gone \u2014 the Settings link on the plugins row does the same job without moving you.<\/li>\n<li>Translations now come from translate.wordpress.org, the way WordPress installs them for every plugin, instead of riding along in the package. They stay current without waiting for a plugin update, and the Languages screen reports what is actually installed on your site rather than what shipped in the zip.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Fixes WooCommerce autofill being off while the Integrations screen showed it as enabled. The front end was gated on a leftover option from before the integration toggles existed, which could disagree with the checkbox you actually see.<\/li>\n<li>Fixes turning an integration off having no effect. A disabled toggle is now respected.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New <strong>Statistics<\/strong> screen: daily lookup counts from this site over the last 30 days, so you can see your own consumption without opening the danadresse.dk dashboard.<\/li>\n<li>New <strong>Log<\/strong> screen: the last failures with a plain-language explanation of each. It records only the time, the kind of lookup and the error code \u2014 never the address a visitor typed.<\/li>\n<li>New <strong>Languages<\/strong>, <strong>Feedback<\/strong> and <strong>About<\/strong> screens, so what the plugin does with your data and which external service it uses are visible inside WordPress, not only in the readme.<\/li>\n<li>A single, dismissible review request that appears once, after a week of actual use, and never again.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li>Fixes address validation flagging valid deliveries as unrecognised. The floor\/door part of the address is no longer sent to the validator \u2014 with it, a perfectly good address scored \"not recognised\", which shops using \"block checkout on unrecognised address\" would have turned into lost orders.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>A blocked API key now points the administrator to the danadresse.dk dashboard, which is the only place it can be unlocked. The previous in-plugin \"Re-bind this site\" button relied on a request header the service has since removed for security, so it would have looked like it worked while changing nothing.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Backs off on the per-minute rate-limit window, which is the one address autocomplete actually reaches \u2014 the monthly counter still shows plenty left at that moment. Plans without a per-minute cap are unaffected.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Follows the danadresse.dk integration guide to the letter: writes <code>forslagstekst<\/code> (never the raw <code>tekst<\/code>, which carries an empty segment by DAWA convention), drills into an access address for floor\/door and fills it anyway when the building has no units, and backs off on the reported rate-limit budget instead of running into 429s.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Adapters for GiveWP, Forminator, Everest Forms, Paid Memberships Pro and Ultimate Member \u2014 14 integrations in total.<\/li>\n<li>Sends a stable per-site device id, so the address service no longer sees admin, REST and cron requests as different devices.<\/li>\n<li>Recognises the service's machine-readable error codes and explains exactly what to do; adds a one-click \"Re-bind this site\" recovery when a key was blocked.<\/li>\n<li>Never caches a response longer than the service says it stays fresh.<\/li>\n<li>Fills correctly for addresses that have no floor\/door level.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release. Universal Danish address autofill with built-in adapters for WooCommerce (classic + Checkout Block + My Account), WPForms, Gravity Forms, Fluent Forms, Formidable Forms and Easy Digital Downloads; auto-detect + CSS-selector + shortcode + block for everything else; address validation (datavask) with order badge; ARIA combobox widget; server-side key proxy with caching and rate limiting.<\/li>\n<\/ul>","raw_excerpt":"Typo-tolerant Danish address autocomplete &amp; validation that autofills WooCommerce and every major form builder \u2014 powered by danadresse.dk.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357169"}],"author":[{"embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lynbro"}],"wp:attachment":[{"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357169"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357169"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357169"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357169"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357169"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/nl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}