Egner WooCommerce seg for B2B?
Mange norske WooCommerce-butikker startet som forbrukerbutikk og har gradvis fått et bedriftssalg ved siden av: kunder med egne priser, faktura med 30 dagers forfall, en rabatt hektet på en brukerrolle. Til slutt kommer spørsmålet om dere må over på Shopify Plus eller Adobe Commerce. Ofte trenger dere ikke det, hvis WooCommerce får de B2B-delene som mangler.
Jeg heter Mariusz Szatkowski og har utviklet for WordPress siden 2006. Dette arbeidet gjør jeg selv: jeg leser koden, setter opp priser og integrasjoner og tester alt i staging. Jeg har verken team eller underleverandører, så koden du får, har jeg skrevet. Skal butikken få nytt utseende, leverer du design og wireframes, og jeg bygger dem.
Salg til flere EU-land med OSS er dekket i gjennomgangen av WooCommerce mot EU-regelverk.
Hvordan sette opp kundespesifikke B2B-priser i WooCommerce
I kjernen har WooCommerce ordinær pris og salgspris. Gruppepriser, mengderabatter og avtalepriser må legges til. Hvilken vei som passer, avhenger av hvor mange prislister du faktisk har.
| Situasjon | Utvidelse holder | Egen kode trengs |
|---|---|---|
| Opptil tre kundegrupper med fast rabatt | ja | nei |
| Avtalepriser som er ulike for hver kunde | nei | ja |
| Mengderabatt kombinert med grupper og valuta | sjelden | som regel |
| Priser hentet direkte fra ERP | nei | ja |
| Katalog bare én kunde ser | delvis | ja |
Kundepriser legger jeg i en egen tabell som fylles fra ERP og er indeksert på kunde og vare. Tusenvis av priser i wp_postmeta gjør hver produktspørring tregere.
Tilbudsforespørsel i stedet for pris i handlekurven
I engroshandel har noen varer ingen pris før noen regner den ut: pallemengder, spesialbestillinger, fraktløsninger. Til det bruker jeg min egen utvidelse, Quotlet fra plogins.com. Den legger til en knapp for å legge varen i en forespørsel, skjuler priser, lar også gjester bygge en forespørselsliste og sender forespørselen til deg på e-post. Gratisversjonen ligger i utvidelseskatalogen på WordPress.org. For mengderabatter finnes Tiers fra samme serie.
Skjulte priser betyr ikke at produktsidene forsvinner fra søk. Beskrivelse, tekniske data og datablad er fortsatt synlige for søkemotorer, og prisen ser bare innloggede bedriftskunder.
Koble WooCommerce til Tripletex, Visma og PowerOffice Go
Hos norske handelsbedrifter møter jeg oftest Tripletex, Visma Business eller Visma eAccounting og PowerOffice Go. Hvert system eksponerer data på sin måte, så jeg starter med å sjekke hvilket API din installasjon har og hva det tillater.
Vanligvis synkroniserer jeg:
- lagerbeholdning, fortløpende eller etter fast intervall,
- kundedata: organisasjonsnummer, leveringsadresser, betalingsbetingelser, kredittgrense,
- ordrer med dokumentnummer og leveringsstatus,
- fakturanummer fra ERP.
Hvorfor ERP-kall ikke hører hjemme i kassen
Venter kassen på ERP, stopper salget hver gang regnskapssystemet har vedlikehold. Jeg legger hver ordre i en kø som kjøres av Action Scheduler, det samme biblioteket WooCommerce bruker til å levere webhooks og WooCommerce Subscriptions bruker til å trekke fornyelsesbetalinger. Er ERP nede, venter jobbene og kjøres senere. Hver jobb som feiler, blir liggende i loggen med feilmeldingen, så du ser hvilken ordre som må sjekkes.
Samme kø tar det tunge arbeidet etter at ordren er lagt inn: PDF-faktura, varsler på e-post, eksport. Kunden ser bekreftelsessiden uten å vente på noe av dette.
EHF-faktura til offentlig sektor
Forskrift om elektronisk faktura i offentlige anskaffelser sier i § 5 at oppdragsgiveren i kontraktene sine skal kreve elektronisk faktura i godkjent standardformat. EHF og Peppol BIS Billing er blant formatene som er godkjent i § 4. Selger du til kommuner, helseforetak eller statlige etater, er det altså kontrakten som stiller kravet til deg.
WooCommerce lager ikke EHF selv. Jeg lar regnskapssystemet ditt lage og sende fakturaen via Peppol og sørger for at butikken leverer komplette ordredata dit: organisasjonsnummer, fakturaadresse, bestillingsreferanse fra innkjøperen, varelinjer og MVA-satser.
Kilde: forskrift om elektronisk faktura i offentlige anskaffelser, Lovdata.
Gjentakende B2B-bestillinger med WooCommerce Subscriptions
I engroshandel er et abonnement oftere en månedlig levering av forbruksvarer eller en årslisens enn premiumtilgang. WooCommerce Subscriptions har to typer fornyelse. Ved automatisk fornyelse trekker betalingsløsningen beløpet selv, og mislykkes betalingen, prøver systemet på nytt etter regler, som standard fem forsøk i løpet av en uke. Ved manuell fornyelse får kunden en fornyelsesordre og betaler med hvilken som helst aktiv betalingsmåte, også bankoverføring med KID.
Fakturakunder med forfall faller utenfor de automatiske nye forsøkene. For dem setter jeg opp påminnelser og statuser slik at en ubetalt fornyelse havner hos regnskapsavdelingen, og abonnementet ikke stopper første dag betalingen er forsinket.
Ordregodkjenning og kredittgrenser
Ingen av delene finnes i WooCommerce-kjernen. Trenger du dem, bygger jeg dem:
- ordregodkjenning: en innkjøper fyller handlekurven, ordren får egen status og venter til noen med rett tilgang godkjenner eller avviser den fra en lenke i e-post eller i administrasjonspanelet,
- kredittgrense: kontosiden viser gjenstående ramme, butikken stopper ordrer over grensen, og tallet oppdateres fra ERP når en innbetaling er bokført,
- kostnadssteder: en ordre kan knyttes til en avdeling eller et prosjekt.
Hva endrer HPOS for en B2B-butikk?
HPOS (High-Performance Order Storage) flytter ordrer ut av wp_posts og wp_postmeta og inn i fire egne tabeller: wc_orders, wc_order_addresses, wc_order_operational_data og wc_orders_meta. Siden WooCommerce 8.2 fra oktober 2023 er det standard for nye installasjoner. Eldre butikker lagrer ofte fortsatt ordrer i innleggstabellen sammen med produkter og sider.
Før byttet sjekker jeg hver utvidelse og all egen kode. Kompatibel kode henter ordrer med wc_get_order(), endrer metadata via ordreobjektet og lagrer med save(), og utvidelsen melder kompatibilitet med FeaturesUtil::declare_compatibility. Direkte spørringer mot wp_postmeta skriver jeg om. Så slår jeg på kompatibilitetsmodus, der WooCommerce holder gamle og nye tabeller synkronisert, og gjør HPOS til hovedkilde først når begge sider stemmer.
Kan databaseoptimalisering erstatte plattformbytte?
Før du betaler for en migrering, er det verdt å se på databasen. I bedriftsbutikker finner jeg som regel:
- en
wp_options-tabell full av automatisk lastede rader fra utvidelser som ble fjernet for lenge siden, - ordremetadata fra utvidelser som ikke finnes lenger,
- spørringer fra utvidelser og tema som kjøres én gang per variant,
- ordrer som fortsatt ligger i
wp_postmetafordi ingen har slått på HPOS.
Plattformbytte gir mening når du trenger en markedsplass med mange selgere, når ERP-leverandøren bare har en sertifisert kobling for en annen plattform, eller når en lasttest på en kopi av butikken viser at WooCommerce ikke klarer seg på fornuftig maskinvare. Da skriver jeg ned hva datamigreringen koster og hva som skjer med URL-ene dine.
Testing og overlevering
Hver endring testes i staging med en datakopi uten personopplysninger:
- kjøpsflyten for hver kundegruppe, altså om hver kunde ser sin pris og sine vilkår,
- en ordre nøyaktig på grensen for en mengderabatt,
- hva butikken gjør når ERP ikke svarer,
- betalinger i testmodus hos betalingsløsningen, for eksempel Vipps MobilePay eller Klarna.
Koden ligger i et privat Git-repo. Til hver endring får du en skriftlig beskrivelse av hva som er endret og hvordan du sjekker det. Jeg jobber via e-post og dokumenter, så beslutninger blir stående skriftlig. Før jeg får tilgang til en butikk med kundedata, signerer vi en databehandleravtale etter GDPR artikkel 28. Jeg fakturerer som polsk virksomhet med EU-MVA-nummer PL7393037445, og avtalen følger polsk rett.
Relaterte tjenester
- WooCommerce-utvikler: løpende utvikling i butikken din.
- Gjør WordPress raskere: ytelsesarbeidet en stabil kasse bygger på.
- GEO- og LLMO-optimalisering: hvordan butikken din vises i KI-søk.
Beskriv butikken og hva som skal endres via kontaktskjemaet. Du får spørsmål om omfanget og deretter et tilbud med forutsetningene det bygger på.







