=== Egen lagerbesked til WooCommerce ===
Contributors: hostious
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Requires Plugins: woocommerce
Stable tag: 1.1.2
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Egne lagerbeskeder pr. produkt/variant, fælles fallback-tekster og automatisk
"På lager - 12 klar til levering" med produktets aktuelle lagerantal.

== Opdatering fra version 1.0.0 ==

1. Tag en sædvanlig backup, og afprøv helst først på en testkopi.
2. Gå til Plugins > Tilføj nyt plugin > Upload plugin.
3. Upload egen-lagerbesked-woocommerce-1.1.0.zip uden at pakke den ud.
4. Vælg at erstatte den allerede installerede version, når WordPress spørger.
5. Gå til WooCommerce > Lagerbeskeder, og gem dine fælles tekster.
6. Tøm eventuel sidecache, og kontrollér et produkt i hver lagerstatus.

ZIP-filen indeholder samme pluginmappe og hovedfil som version 1.0.0.
De eksisterende produktfelter og metadata bevares uden datamigrering.
Installér ikke opdateringen som et ekstra, sideløbende plugin.

Ved ny installation: upload filen som ovenfor, og aktivér pluginet.
Pluginet kræver aktiv WooCommerce. WordPress og PHP skal også opfylde kravene
for den WooCommerce-version, du bruger.

== Indstillinger: WooCommerce > Lagerbeskeder ==

Fallback ved udsolgt:
Bruges ved udsolgt, når produktet/varianten ikke har en individuel besked.
Eksempel: Udsolgt - kontakt os for leveringstid
Standard: tomt felt, så WooCommerces normale tekst bevares.

Fallback ved restordre:
Bruges ved restordre, når produktet/varianten ikke har en individuel besked.
Eksempel: Forventes snart på lager - Forudbestil nu
Standard: tomt felt, så WooCommerces normale tekst bevares.

Skriv samme tekst i de to fallback-felter, hvis den skal gælde begge statusser.
Forventede datoer er almindelig tekst og ændres ikke automatisk.

Automatisk lagertekst:
Slået TIL som standard, også ved opdatering fra 1.0.0.
Slå fra for at gendanne WooCommerces almindelige tekst på lagervarer.
Individuelle tekster med "Vis også på lager" bevares uanset denne indstilling.

På lager - med antal:
Standard: På lager - {antal} klar til levering
Ved et lager på 12 vises: På lager - 12 klar til levering
Du kan redigere hele teksten. {antal} erstattes med lagerantallet.
(antal) accepteres også som pladsholder. Ønskes synlige parenteser om tallet,
brug ({antal}), fx: På lager - ({antal}) klar til levering.
Tomt felt bevarer WooCommerces normale lagertekst.

På lager - uden kendt antal:
Standard: På lager - klar til levering
Bruges, når lagerstyring er slået fra, eller der ikke er et kendt lagerantal.
Feltet må ikke indeholde {antal} eller (antal).
Tomt felt bevarer WooCommerces normale lagertekst.

== Prioritet og produkter ==

Ved udsolgt/restordre er rækkefølgen:
1. Variantens egen besked, hvis en variant vises.
2. Produktets/hovedproduktets egen besked.
3. Den fælles fallback for den relevante lagerstatus.
4. WooCommerces normale lagertekst.

Produktfeltet findes stadig under Produkter > rediger produkt > Produktdata
> Lager (kan hedde Lagerbeholdning). Feltet hedder "Egen lagerbesked".
Eksempel: Forventet på lager 10/12-2026 - Forudbestil nu

Ved genopfyldning bruges den automatiske lagertekst som standard, selv om der
stadig står en forventet leveringsdato i produktfeltet.

Undtagelse: Et produkt med en egen besked OG flueben i "Vis også på lager"
viser stadig sin egen tekst frem for den automatiske lagertekst. Fjern
fluebenet, hvis den nye automatiske lagertekst skal bruges på det produkt.
Dette bevarer den eksisterende indstilling fra version 1.0.0.

En gammel leveringsdato slettes ikke ved genopfyldning. Den kan blive vist igen,
hvis produktet senere bliver udsolgt eller kommer på restordre. Opdatér/slet
forældede individuelle beskeder og fælles fallback-datoer manuelt.

== Antal og varianter ==

Der vises kun et lagerantal, hvis WooCommerces lagerstyring er aktiv for varen.
Gamle lagerantal ignoreres, hvis lagerstyringen ikke længere er aktiv.
På valgte varianter bruges variantens eget lagerantal eller hovedproduktets
fælles lagerantal, når WooCommerce lader varianten arve lagerstyringen.
Lagerantal for forskellige varianter lægges ikke sammen.

Den valgte variants lagerforhold bestemmer, hvilken besked der bruges.
Feltet til en variants egen besked findes nederst i variantens udfoldede panel.
"Vis også på lager" sættes på hovedproduktet og gælder dets varianter.

På klassiske variable produktsider vises variantens besked normalt først,
når kunden har valgt varianten. Skjulte/inaktive varianter aktiveres ikke.
Den særskilte fejltekst, når ingen varianter kan vælges, må ikke blive til en
besked om, at varen er klar til levering, blot fordi hovedproduktets status
er på lager. Denne situation er derfor afgrænset særskilt i pluginet.

Antallet er WooCommerces registrerede lagerantal på visningstidspunktet.
Det er ikke et løbende/live-opdateret tal, en leveringsgaranti eller en særskilt
beregning af lagerreservationer eller varer i andres indkøbskurve.
Sidecache kan betyde, at kunder ser en tidligere genereret tekst/et ældre antal.
Dette plugin foretager ikke automatisk rydning af tredjeparts-cache.

Den automatiske funktion viser antal, også hvis WooCommerces normale visning
er indstillet til at skjule det. Slå funktionen fra eller fjern {antal} fra
skabelonen for at undlade den automatiske visning af antallet.
Kendte 0/negative antal med en modstridende status "på lager" giver ikke
pluginets "klar til levering"-tekst. WooCommerces oprindelige tekst bevares.

== Kun tekster: ingen ændring af køb eller lager ==

Pluginet ændrer IKKE lagerstatus, lagerantal, restordreindstillinger,
købsmuligheder, priser, kurv, checkout, ordrebehandling eller betaling.
"Forudbestil nu" gør ikke i sig selv et produkt købsbart.

Forudbestilling kræver passende restordreindstillinger i WooCommerce.
Et produkt, som WooCommerce betragter som udsolgt, er fortsat blokeret for køb.
Beskeder i mails, kurv, checkout, feeds og schema omskrives ikke særskilt.

== Kompatibilitet ==

Adminfelterne på produkter er lavet til den klassiske produktredigering med
boksen Produktdata. Den nye indstillingsside er en almindelig WordPress-side
under WooCommerce. Der medfølger ingen CSS eller JavaScript.

Visningen bruger woocommerce_get_availability_text samt det særskilte filter
woocommerce_out_of_stock_message i den klassiske variant-skabelon.
Eksisterende placering og lager-CSS-klasser bevares.

Det virker dér, hvor temaet/pagebuilderen/blokken bruger disse WooCommerce-
filtre. Egne badges, hardcodede tekster, headless løsninger og elementer, der
beregner deres egne lagertekster, kan kræve separat integration.
Der tilføjes ikke automatisk lagertekst i produktlister uden en lagertekst.
Eksterne og grupperede produkter ændres ikke.

== Data og sikkerhed ==

Eksisterende metadata, uændret fra 1.0.0:
_elbwc_stock_message
_elbwc_show_in_stock

Ny WordPress-indstilling:
elbwc_settings (ét array med de fem globale indstillinger).

Adgang til indstillingssiden og gemning kræver manage_woocommerce.
WordPress Settings API håndterer nonce og rettighedstjek ved global gemning.
Produkt- og variantgemning kræver egne produktspecifikke nonces og adgang.
Beskeder renses ved gemning og escapes ved visning. HTML er ikke understøttet.

Ingen nye databasetabeller, cronjobs, eksterne forbindelser eller telemetri.
Der sendes ingen data ud af dit site.
Deaktivering stopper tekstudskiftningen. Indstillinger og produktbeskeder
bevares ved både deaktivering og sletning af pluginet.

== Kontrol af version 1.1.0 ==

Begge PHP-filer er syntakskontrolleret med PHP 8.4.23.
121 isolerede regressionstjek er bestået, herunder:
- Fallback pr. status, tomme felter og prioritet mellem beskeder.
- Aktive/fravalgte lagertekster, pladsholdere og ukendte lagerantal.
- Eget/fælles variantlager og eksisterende produktindstillinger.
- Gemning, validering, escaping, nonce- og rettighedstjek.
- Registrering af settings API, adminformular og uændrede metadatafelter.
- Visning uden mutation af produktdata.

Testene bruger WordPress/WooCommerce-testdobler. Der er ikke udført fuld
end-to-end-test i en kørende WordPress/WooCommerce-installation eller på
netop din webshop. Test derfor først på en testkopi eller testprodukter.

== Changelog ==

= 1.1.2 - 2026-10-22 =
- Erklærer kompatibilitet med WooCommerces ordretabeller (HPOS) og kurv- og kasseblokke. Pluginnet blev før vist som "ikke kompatibel med WooCommerce-funktioner" på butikker med HPOS slået til. Pluginnet læser og skriver ikke ordrer.

= 1.1.1 - 2026-10-22 =
- Udgiver (Hostious.io), plugin-URI og "Tested up to" er tilføjet i plugin-oplysningerne.
- Testet med WordPress 7.1, WooCommerce 11.2 og PHP 8.5.
- Ingen ændringer i funktioner eller data.

= 1.1.0 - 2026-09-22 =
- Ny dansk indstillingsside: WooCommerce > Lagerbeskeder.
- Separate fallback-tekster ved udsolgt og restordre.
- Automatisk lagertekst: På lager - {antal} klar til levering.
- Redigerbar tekst uden antal til varer uden aktiv lagerstyring/kendt antal.
- Understøtter {antal} og (antal) i den automatiske lagerskabelon.
- Mulighed for at slå den automatiske lagertekst fra.
- Eget/fælles variantlager håndteres via WooCommerces produkt-gettere.
- Eksisterende individuelle tekster og "Vis også på lager" bevares.
- Sikker Settings API-gemning og Indstillinger-link på pluginlisten.
- Undgår "klar til levering" i den særskilte fejltekst for ubrugelige varianter.

= 1.0.0 =
- Første version: produktbeskeder, variantbeskeder, nedarvning og valgfri
  permanent visning med "Vis også på lager".

== Tekniske referencer ==

Kontrolleret mod den officielle dokumentation den 22. september 2026:
https://woocommerce.github.io/code-reference/files/woocommerce-includes-abstracts-abstract-wc-product.html
https://woocommerce.github.io/code-reference/files/woocommerce-includes-class-wc-product-variation.html
https://woocommerce.github.io/code-reference/files/woocommerce-templates-single-product-add-to-cart-variable.html
https://developer.wordpress.org/reference/functions/register_setting/
https://developer.wordpress.org/reference/functions/add_submenu_page/
https://developer.wordpress.org/reference/hooks/option_page_capability_option_page/
