=== DIRSCHL Contact FABs ===
Contributors: dirschl
Tags: contact, fab, floating, whatsapp, phone, email
Requires at least: 5.8
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 2.2.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Schwebende Kontakt-Buttons (Telefon, E-Mail, WhatsApp, Kontakt, Termine) mit pfadbasierten Zielen per JSON-Mapping.

== Beschreibung ==

**DIRSCHL Contact FABs** zeigt bis zu fünf quadratische, schwebende Aktions-Buttons am unteren Bildschirmrand (rechts oder links):

* **Anrufen** – `tel:`-Link
* **E-Mail** – `mailto:`-Link
* **WhatsApp** – automatisch aus Telefonnummer oder eigene URL; Nachricht enthält die aktuelle Seiten-URL
* **Kontakt** – interner Permalink (optional mit Referer-Parameter)
* **Termine** – externe URL (optional)

**Standard-Ziele** gelten überall, sofern kein Pfad-Mapping greift. **Pfad-Mappings** überschreiben einzelne Felder für URL-Präfixe – das **längste passende Präfix** gewinnt.

Produktseite: https://dirschl.com/wordpress/plugins/dirschl-contact-fabs/

== Installation ==

1. ZIP von dirschl.com herunterladen
2. *Plugins → Installieren → Plugin hochladen*
3. Plugin **DIRSCHL Contact FABs** aktivieren
4. **Einstellungen → Contact FABs** öffnen
5. Unter **Standard-Ziele** Telefon, E-Mail und ggf. Kontakt-Pfad eintragen
6. **FABs anzeigen** aktivieren und speichern
7. Optional: **Mappings (JSON)** für Bereiche Ihrer Website pflegen (siehe unten)

Bei Migration vom Plugin „Direct Contact FABs“ werden bestehende Optionen automatisch übernommen.

== Einstellungen (Überblick) ==

= Allgemein =

* **Aktiviert** – FABs ein-/ausblenden
* **Position** – unten rechts oder unten links
* **Farben** – Hintergrund und Schrift/Icons (Hex, z. B. `#C2086E` und `#FFFFFF`)
* **Darstellung** – nur Icons (60×60) oder mit Text (70×70); optional Scroll-nach-oben-Button
* **Standard-Ziele** – gelten, wenn kein Mapping-Feld gesetzt ist oder kein Mapping passt
* **Referer** – hängt die aktuelle Seiten-URL als `?referer=…` an den Kontakt-Link

= Sichtbarkeit =

* Ausblenden auf Startseite, Beiträgen oder Seiten
* **Pfade ausschließen** – eine Zeile pro Pfad; Präfix schließt alle Unterpfade ein (z. B. `/shop` blendet `/shop/checkout` aus)

== Pfad-Zuordnungen (JSON) ==

Im Feld **Mappings (JSON)** tragen Sie ein **JSON-Array** ein: jedes Element ist ein Objekt für einen URL-Bereich.

= Aufbau =

* Das Feld muss mit `[` beginnen und mit `]` enden (Array).
* Jedes Objekt beschreibt **ein Pfad-Präfix** und die Ziele für diesen Bereich.
* Beim Speichern normalisiert WordPress die Pfade (führendes `/`). Ungültiges JSON wird abgelehnt; der alte Stand bleibt erhalten.
* **Kommentare** (`//` oder `/* */`) und **trailing commas** werden beim Speichern entfernt – nur für die Eingabe hilfreich.

= Felder pro Mapping-Eintrag =

**path_prefix** (Pflicht)
URL-Anfang, ab dem dieser Eintrag gilt. Beispiele: `/`, `/leistungen/`, `/shop/`. Ohne führendes Slash wird eines ergänzt. Für die ganze Site oft `/` oder ein Bereich wie `/pv-anlagen/`.

**label** (optional)
Nur zur Orientierung in der JSON-Liste; wird in den FABs nicht angezeigt.

**phone** (optional)
`tel:`-Link für den Button „Anrufen“. Beispiel: `tel:+4986311660652` oder `tel:004986311660652`. Leer = Standard-Telefon aus den Einstellungen. Komplett leerer Button = FAB ausgegraut (nicht klickbar).

**email** (optional)
`mailto:`-Link für „E-Mail“. Beispiel: `mailto:info@example.com`. Leer = Standard-E-Mail.

**wa** (optional)
WhatsApp-URL, z. B. `https://wa.me/4986311660652`. **Leer** = Plugin erzeugt die URL aus dem **effektiven** Telefon-Wert (Mapping oder Standard). Die Nachricht enthält automatisch die aktuelle Seiten-URL.

**contact_url** (optional)
Relativer Pfad zur Kontakt-**Seite** auf Ihrer Website, z. B. `/kontakt/` oder `/leistungen/anfrage/`. Wird mit `home_url()` verknüpft. **Leer** = es gilt der globale **Kontakt-Pfad** aus den Standard-Zielen. Ist auch der leer, wird der Kontakt-FAB **ausgeblendet**.

**termine_url** (optional)
URL für den Button „Termine“: extern (`https://kalender.example.com/buchen`) oder intern (`/termine/`). **Leer** = globale **Termine-URL** aus den Standard-Zielen. Ist auch die leer, wird der Termine-FAB **ausgeblendet**.

= Priorität =

1. Aktuelle URL wird mit allen `path_prefix`-Werten verglichen.
2. Es gewinnt das **längste** passende Präfix (z. B. `/shop/checkout` → `/shop/` vor `/`).
3. Fehlende Felder im Mapping fallen auf die **Standard-Ziele** zurück.

= Minimales Beispiel (nur Startseiten-Bereich) =

[
  {
    "path_prefix": "/",
    "label": "Allgemein",
    "phone": "tel:+4986311660652",
    "email": "mailto:info@example.com",
    "wa": "",
    "contact_url": "/kontakt/",
    "termine_url": ""
  }
]

= Mehrere Bereiche (typisch) =

[
  {
    "path_prefix": "/",
    "label": "Hauptseite",
    "phone": "tel:+4986311660652",
    "email": "mailto:info@example.com",
    "wa": "",
    "contact_url": "/kontakt/",
    "termine_url": ""
  },
  {
    "path_prefix": "/leistungen/",
    "label": "Leistungen",
    "phone": "tel:+4986311660652",
    "email": "mailto:leistungen@example.com",
    "wa": "https://wa.me/4986311660652",
    "contact_url": "/leistungen/kontakt/",
    "termine_url": ""
  },
  {
    "path_prefix": "/shop/",
    "label": "Shop",
    "phone": "tel:+4986311660652",
    "email": "mailto:shop@example.com",
    "wa": "",
    "contact_url": "",
    "termine_url": ""
  }
]

Hinweis: Im Shop ist `contact_url` leer → es zählt nur der **globale Kontakt-Pfad**; ist der auch leer, erscheint kein Kontakt-Button.

= Nur Kontakt-URL ändern, Rest von Standard =

[
  {
    "path_prefix": "/referenzen/",
    "label": "Referenzen",
    "phone": "",
    "email": "",
    "wa": "",
    "contact_url": "/referenzen/projekt-anfragen/",
    "termine_url": ""
  }
]

Leere Strings bei phone/email/wa bedeuten: Werte aus **Standard-Ziele** übernehmen.

= Termine-Button mit externem Kalender =

[
  {
    "path_prefix": "/beratung/",
    "label": "Beratung",
    "phone": "tel:+4986311660652",
    "email": "mailto:beratung@example.com",
    "wa": "",
    "contact_url": "/beratung/kontakt/",
    "termine_url": "https://outlook.office.com/book/ihr-kalender"
  }
]

= WhatsApp explizit (ohne Auto-Erkennung) =

[
  {
    "path_prefix": "/kampagne/",
    "label": "Kampagne",
    "phone": "tel:+4986311660652",
    "email": "mailto:kampagne@example.com",
    "wa": "https://wa.me/4986311660652",
    "contact_url": "/kontakt/",
    "termine_url": ""
  }
]

= Häufige Fehler =

* JSON-Syntax: fehlendes Komma, Anführungszeichen nur doppelt `"`, letztes Komma vor `}` ist erlaubt (wird entfernt).
* `path_prefix` ohne Slash am Ende für Bereiche: `/leistungen/` ist klarer als `/leistungen`.
* `contact_url` mit voller Domain: nur Pfad angeben (`/kontakt/`), nicht `https://…` (Ausnahme: **termine_url** darf vollständige URL sein).
* Telefon für WhatsApp: Nummer mit Ländervorwahl ohne führende 0 (z. B. `49…` in `wa.me/49…`).

== Changelog ==

= 2.2.0 =
* Log tab: FAB click statistics, chart, recent events table
* Optional Matomo deep link (visitor ID from cookie, no API)
* localStorage visitor ID for repeat recognition
* Settings: logging, retention, Matomo URL / site ID

= 2.0.1 =
* Shortcodes-Tab entfernt (Plugin nutzt keine Shortcodes)
* Ausführliche JSON-Dokumentation in readme.txt
* Kürzere Admin-Hinweise zu Pfad-Mappings, deutsche Übersetzung ergänzt

= 2.0.0 =
* Rebrand: DIRSCHL Contact FABs (von Direct Contact FABs)
* Admin-Tabs: Einstellungen, readme.txt
* Englische Quelltexte, deutsche Übersetzung (de_DE)
* Update-Server über dirschl.com
* Migration von direct_contact_fabs_options

== Upgrade Notice ==

= 2.0.1 =
Dokumentation zu JSON-Mappings erweitert; Shortcodes-Tab entfällt.
