=== DIRSCHL Link Preview ===
Contributors: dirschl
Tags: link preview, open graph, screenshot, carousel, shortcode, seo
Requires at least: 5.8
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 3.0.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Rich link previews with Open Graph metadata, website screenshots, and carousel for WordPress.

== Description ==

DIRSCHL Link Preview (früher „SEO Image Link“) erzeugt ansprechende Link-Vorschaukarten für externe und interne URLs. Das Plugin liest Open-Graph- und Meta-Daten aus, erstellt optional Screenshots über einen konfigurierbaren Dienst und speichert Ergebnisse in einem JSON-Cache unter `wp-content/uploads/seo-img-link/`.

Produktseite: https://dirschl.com/wordpress/plugins/dirschl-link-preview/

= Hauptfunktionen =

* Einzelvorschau per Shortcode (`[dirschl_link_preview]`)
* Karussell für mehrere Vorschauen auf einer Seite (`[dirschl_link_preview_carousel]`)
* Raster-Galerie mit Spalten und optionaler Pagination (`[dirschl_link_preview_gallery]`)
* Open-Graph-Auslesen (Titel, Beschreibung, og:image)
* Website-Screenshots (externer Dienst, z. B. Culoca, oder lokale Tools)
* Hover-Effekt: og:image mit eingeblendetem Screenshot (bei `style="image"`)
* Bot-Modus für Cookie-Banner-Umgehung bei Screenshots
* Optional: og:images lokal cachen
* Rank Math Sitemap: Bilder aus Shortcodes können in die Sitemap übernommen werden
* Legacy-Shortcodes `[seo-img-link]`, `[seo-img-link-carousel]` und `[seo-img-link-gallery]` bleiben gültig
* Automatische Updates über dirschl.com (Update URI)

= Ausgabe =

Jede Vorschau wird als `<li class="sil-item">` gerendert (Listen-Element). Typischer Aufbau:

* Optional: eigene Überschrift (`title`-Parameter)
* Bildbereich (og:image, Screenshot oder Fallback)
* Seitentitel (verlinkt)
* Beschreibung
* Optional: Link-URL-Zeile

Das Styling erfolgt über `assets/css/seo-img-link.css` (dunkle Karten auf dunklen Seiten möglich).

== Installation ==

1. ZIP von dirschl.com herunterladen oder Plugin-Ordner nach `wp-content/plugins/dirschl-link-preview/` kopieren
2. Unter **Plugins** aktivieren: **DIRSCHL Link Preview**
3. Legacy-Eintrag **SEO Image Link** deaktivieren/löschen (nur Hinweis, keine Funktion mehr)
4. **Einstellungen → Link Preview** öffnen
5. Screenshot-Methode und Service konfigurieren (für Shared-Hosting: **Externer Service**)
6. Shortcode auf einer Seite einfügen

= Erste Schritte =

Beispiel auf einer Seite:

`[dirschl_link_preview site="https://dirschl.com/"]`

In einer Liste:

`<ul>
[dirschl_link_preview site="https://dirschl.com/"]
[dirschl_link_preview site="https://example.com/" style="screen"]
</ul>`

Karussell (findet Shortcodes im Seiteninhalt):

`[dirschl_link_preview_carousel items="4"]`

== Shortcodes ==

= [dirschl_link_preview] =

Einzelne Link-Vorschau.

**Parameter:**

* `site` – Ziel-URL. Leer = aktuelle Seite. `referer` = HTTP-Referer (mit `fallback` / `allow_internal`)
* `style` – `image` (Standard): og:image, Screenshot bei Hover. `screen`, `shot`, `screenshot`: Screenshot als Hauptbild
* `show` – Vier Zeichen: Bild, Titel, Beschreibung, Link (1=an, 0=aus). Standard: `1110`
* `title` – Eigene Überschrift (H2) über der Karte
* `cache` – Cache-Tage für Metadaten; `0` = immer neu laden
* `fallback` – Ersatz-URL bei Referer-Logik
* `allow_internal` – `1`/`true`: interne Referer erlauben
* `debug` – `1`/`true`: Debug-Box unter der Karte

**Legacy:** `[seo-img-link]` – identische Parameter (`site` wird verwendet, nicht `url`).

= [dirschl_link_preview_carousel] =

Endlos-Karussell aller `[dirschl_link_preview]` / `[seo-img-link]` im umgebenden Seiteninhalt.

**Parameter:**

* `items` / `columns` / `visible` – Anzahl sichtbarer Karten (1–8, Standard 4)
* `show` – wird an eingebettete Shortcodes ohne eigenes `show` vererbt

**Legacy:** `[seo-img-link-carousel]`

= [dirschl_link_preview_gallery] =

Responsive Raster-Galerie (kein Slider) mit denselben eingebetteten Shortcodes wie beim Karussell.

**Parameter:**

* `cols` / `columns` / `items` – Spalten Desktop (1–8, Standard 4)
* `cols_md` / `cols_sm` – Spalten Tablet / Mobil
* `gap` – Abstand in px (Standard 25)
* `show` – an eingebettete Shortcodes ohne eigenes `show` vererbt
* `cache` – Cache-Tage für alle eingebetteten Vorschauen (z. B. `cache="0"` oder `cache="14"`)
* `per_page` – Einträge pro Seite; `0` = alle anzeigen
* `id` – Galerie-ID für Pagination (`?lpg_{id}=2`, Standard `gallery`)
* `page` – Seite erzwingen (optional)

**Legacy:** `[seo-img-link-gallery]`

== Screenshots ==

Screenshots werden **asynchron** erstellt (Seite blockiert nicht). Voraussetzungen:

* Externe URL (keine Screenshots für `localhost` / gleiche Domain als „lokal“ erkannt)
* Konfigurierter Screenshot-Dienst unter **Einstellungen → Link Preview**
* WP-Cron oder Hintergrund-Ajax des Plugins (relevant in Docker/Local)

**style-Werte:**

* `image` – zeigt og:image; Screenshot lädt im Hintergrund, Hover zeigt Screenshot wenn fertig
* `screen` / `screenshot` – bevorzugt Screenshot; bis zur Fertigstellung Fallback/og:image

Dateien: `wp-content/uploads/seo-img-link/{hash}.jpg`

== Einstellungen (Backend) ==

Unter **Einstellungen → Link Preview** (Tabs: Einstellungen, Shortcodes, readme.txt):

**Screenshot-Methode**

* Externer Service (empfohlen für Shared-Hosting)
* Lokale Tools (wkhtmltoimage, Chrome Headless – nur wenn Server es erlaubt)
* Auto (beides versuchen)

**Externe Services**

* Culoca (Standard-URL konfigurierbar)
* Weitere vordefinierte Dienste
* Eigene Service-URL mit Platzhaltern `{url}`, `{width}`, `{height}`

**Bot-Modus**

Fügt Parameter an die Ziel-URL an, damit Cookie-Manager (z. B. Real Cookie Manager) Banner für Screenshot-Bots ausblenden.

**og:images lokal speichern**

Optional og:image-Dateien in den Upload-Ordner kopieren (Standard: aus, Original-URLs werden verwendet).

**Cache-Verwaltung**

* Screenshot-URLs aus JSON-Cache entfernen
* Screenshot-Dateien auf der Festplatte löschen
* Komplett zurücksetzen
* Test-Screenshot für eine URL

== Technik & Cache ==

* Metadaten: `wp-content/uploads/seo-img-link/seo-img-link-cache.json`
* Bilder/Screenshots: `wp-content/uploads/seo-img-link/*.jpg`
* Cron-Event: `seoi_build_screenshot_event`
* Einstellungen: Options mit Präfix `seoi_` (Kompatibilität mit früheren Versionen)
* Migration vom Plugin „SEO Image Link“: Einstellungen und Cache bleiben erhalten

== Rank Math ==

Shortcode-Bilder können für die XML-Sitemap registriert werden (Filter im Plugin). Externe Bild-URLs können per Filter von der Sitemap ausgeschlossen werden.

== Häufige Fragen ==

= Warum erscheint kein Screenshot? =

* URL ist lokal (localhost) → Screenshots werden übersprungen
* Screenshot-Dienst nicht erreichbar oder API-Key fehlt
* Erster Aufruf: Screenshot braucht 10–40 Sekunden – Seite neu laden
* Cache-Eintrag prüfen / Test-Screenshot in den Einstellungen

= Warum wird der Shortcode als Text ausgeführt? =

In Dokumentation `[` als HTML-Entity `&#91;` schreiben oder Divi-Code-Modul nutzen. Im normalen Shortcode-Block wird ausgeführt.

= Unterschied image vs. screen? =

`image` = Marketing-Vorschau mit og:image. `screen` = Website-Screenshot als Hauptmotiv.

== Changelog ==

= 3.0.5 =
* Text spacing in cards (padding left/right/top/bottom for headings and paragraphs)
* Gallery/Carousel: `cache="N"` on container applies to all child previews (per-item override supported)

= 3.0.4 =
* CSS: Divi list padding/bullets reset for gallery and carousel (`#left-area ul`, `.et_pb_text ul`, etc.)

= 3.0.3 =
* Gallery/Carousel: per-item `show="1010"` supported; empty `show=""` inherits container mask (no need to remove the attribute)
* Release 3.0.3

= 3.0.2 =
* New shortcode `[dirschl_link_preview_gallery]` (legacy `[seo-img-link-gallery]`): responsive grid, optional pagination
* Carousel/gallery: `show` inheritance and URL preload also for `[dirschl_link_preview]` children
* Carousel: optional `cols`, `cols_md`, `cols_sm`, `gap` attributes

= 3.0.1 =
* English source strings in PHP; German translation file de_DE.mo
* Settings/admin UI follows WordPress locale (de_DE → German, otherwise English)

= 3.0.0 =
* Rebrand: DIRSCHL Link Preview (dirschl-link-preview)
* Shortcodes: `[dirschl_link_preview]`, `[dirschl_link_preview_carousel]`
* Admin: Tabs Einstellungen / Shortcodes / readme.txt
* Menü: „Link Preview“ unter Einstellungen
* Screenshot-Queue für Docker/Local ohne WP-Cron
* Alias `style="screen"` für Screenshots
* Fix: CSS/JS-Pfade nach Verschieben nach includes/
* Update-Server auf dirschl.com

= 2.5.3 (SEO Image Link) =
* Letzte Version unter altem Namen – Funktionsumfang Basis für 3.0.0
