Adresse-autocomplete i WooCommerce
Danske adresseforslag i din WooCommerce-checkout, direkte fra kundens browser. Med en offentlig nøgle skal du ikke bygge en proxy i WordPress: installér pluginnet, eller indsæt ét script. Begge dele virker på den klassiske checkout og på checkout-blokken.
- Kunden skriver gadenavn og husnummerFeltet spørger Grundfast direkte med butikkens offentlige nøgle.
- Forslag — og etage og dør, hvor der er lejlighederAdressen kommer fra det officielle adresseregister, med postnummer og by.
- Felterne udfyldes, fragten følger medVærdierne skrives, som om kunden havde tastet dem, så begge checkouts ser dem.
1. Opret en offentlig nøgle
Under Nøgler i dashboardet vælger du Offentlig og skriver butikkens domæner, fx butik.dk og www.butik.dk. Nøglen begynder med gf_pub_live_ og må gerne stå i sidens kode: den virker kun fra de domæner, kun til adresseopslag, og med en grænse pr. besøgende. Byg og test med en gf_pub_test_-nøgle, som aldrig faktureres. Reglerne for domæner står i dokumentationen for adressefeltet.
2a. Uden kode: pluginnetanbefalet
- Hent grundfast-adresse-wordpress.zip.
- I WordPress: Plugins → Tilføj nyt → Upload plugin, vælg filen og aktivér.
- Under Indstillinger → Grundfast adressefelt indsætter du den offentlige nøgle og gemmer.
Pluginnet indlæser feltet på checkout-siden og sætter det på både fakturerings- og leveringsadressen, i den klassiske checkout og i checkout-blokken.
2b. Med kode: ét script i functions.php
Har du et child-tema eller et plugin til kodestumper, er det de linjer, pluginnet ellers gør for dig. Scriptet indlæses kun på checkout-siden og hægter sig på de felter, der findes — også når checkout-blokken tegner dem, efter siden er indlæst.
<?php // functions.php i dit child-tema (eller et plugin til kodestumper). add_action('wp_enqueue_scripts', function () { if (!function_exists('is_checkout') || !is_checkout()) { return; } wp_enqueue_script( 'grundfast-adresse', 'https://grundfast.dk/widget/v1/grundfast-adresse.js', [], null, // ingen ?ver= — versionen står i URL'en ['in_footer' => true] ); wp_add_inline_script('grundfast-adresse', <<<'JS' (function () { var KEY = 'gf_pub_live_...'; // Klassisk checkout bruger understregning, checkout-blokken bindestreg. var FELTER = [ ['billing_address_1', 'billing_postcode', 'billing_city'], ['shipping_address_1', 'shipping_postcode', 'shipping_city'], ['billing-address_1', 'billing-postcode', 'billing-city'], ['shipping-address_1', 'shipping-postcode', 'shipping-city'], ]; function bind() { FELTER.forEach(function (f) { var input = document.getElementById(f[0]); // attach gør ingenting, hvis feltet allerede har forslag. if (input) GrundfastAdresse.attach(input, { key: KEY, postnr: '#' + f[1], by: '#' + f[2] }); }); } bind(); // Checkout-blokken tegner felterne efter siden er indlæst, og igen // når kunden fx vælger en anden faktureringsadresse. new MutationObserver(bind).observe(document.body, { childList: true, subtree: true }); // Klassisk checkout: genberegn fragt for det nye postnummer. document.addEventListener('grundfast:adresse', function () { if (window.jQuery) jQuery(document.body).trigger('update_checkout'); }); })(); JS, 'after'); });
De to checkouts navngiver felterne forskelligt, så koden kigger efter begge:
| Felt | Klassisk checkout | Checkout-blokken |
|---|---|---|
| Adresse (faktura) | #billing_address_1 | #billing-address_1 |
| Postnummer (faktura) | #billing_postcode | #billing-postcode |
| By (faktura) | #billing_city | #billing-city |
| Adresse (levering) | #shipping_address_1 | #shipping-address_1 |
| Postnummer (levering) | #shipping_postcode | #shipping-postcode |
| By (levering) | #shipping_city | #shipping-city |
Checkout-blokken.value er ikke nok
Blokkens felter er React-styrede. Sætter et script input.value direkte, ser du teksten et øjeblik, men React overskriver den ved næste render — og WooCommerce sender den gamle værdi med ordren. Adressefeltet skriver derfor værdierne, som om kunden havde tastet dem, og blokken opdaterer kurven og fragten selv. Læg alligevel en testordre igennem til ende på din egen WooCommerce-version, og kontrollér at adressen på den færdige ordre er den, du valgte.
Hvis der ikke kommer forslag
Åbn browserens konsol (F12). Feltet skriver én linje, der begynder med [grundfast-adresse], med årsagen. Den mest almindelige er, at domænet ikke står på nøglen. Du kan prøve nøglen og domænet fra en terminal med det samme kald, feltet laver:
curl -G "https://api.grundfast.dk/v1/adresse/search" \ --data-urlencode "q=Vestergade 10" \ --data-urlencode "token=$GRUNDFAST_PUBLIC_KEY" \ -H "Origin: https://www.din-butik.dk"
Fejler et kald, lukker listen, og kunden skriver adressen i hånden som før — feltet blokerer aldrig checkouten. Flere fejlbeskeder står under fejlfinding.
Spørgsmål
Ofte stillede spørgsmål
Ja, med den samme kode. De to checkouts navngiver felterne forskelligt (billing_postcode i den klassiske, billing-postcode i blokken), så koden kigger efter begge. Feltet skriver værdierne, som om kunden havde tastet dem, og det er det, checkout-blokkens React-felter lytter efter — en direkte tildeling af value ville blive overskrevet.
Ikke med en offentlig nøgle. Den virker kun fra de domæner, du har skrevet på den, kun til adresseopslag, og hver besøgende kan højst lave 120 kald i minuttet med den. En hemmelig gf_live-nøgle må stadig aldrig stå i temaets kode.
Pluginnet, hvis du vil undgå at røre temaet: du indsætter nøglen under Indstillinger, og det sætter feltet på begge checkouts. Koden, hvis du allerede har et child-tema eller vil styre, hvilke felter der får forslag.
Fordi WooCommerce beregner fragt ud fra postnummeret. Den klassiske checkout genberegner kun på bestemte hændelser, så koden beder om en genberegning, når en adresse vælges. Checkout-blokken opdaterer kurven af sig selv, når postnummeret ændrer sig.
Et nyt felt retter kun fremtidige ordrer. De eksisterende adresser kan vaskes mod adresseregistret med datavask-endpointet fra en server med en hemmelig nøgle; du får den bedste kandidat, en sikkerhed og BFE-nummeret for hver.
Se også
Få feltet på plads med en testnøgle
Gratis op til 5.000 kald/md · intet kreditkort · data fra Klimadatastyrelsen/Datafordeler, CC BY 4.0