=== WP Save for Later ===
Contributors: gooloo
Tags: bookmarks, save for later, reading list, favorites, litespeed
Requires at least: 6.3
Tested up to: 7.1.3
Requires PHP: 8.0
Stable tag: 1.0.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Eingeloggte Nutzer speichern Beiträge per "Für später speichern" in mehreren eigenen Listen und verwalten sie in einem interaktiven Frontend-Dashboard. Erstellt mithilfe von Google AI Studio.

== Description ==

**WP Save for Later** (WP Save for Later Pro) ist eine schlanke, ultra-performante Lesezeichen- und Leselisten-Lösung für WordPress. Nutzer können Beiträge mit einem modernen Split-Button per Klick in ihre Favoriten speichern oder flexibel in mehreren Listen organisieren. Ein interaktives Frontend-Dashboard ermöglicht das Verwalten, Umsortieren, Umbenennen und Filtern gespeicherter Inhalte – ohne Seitenneuladen und mit voller Echtzeit-Synchronisation über alle Geräte hinweg.

Erstellt mithilfe von Google AI Studio.

### Hauptmerkmale

* **Echtzeit-Synchronisation & Cache-Sicherheit:** Vollständige Unabhängigkeit von Full-Page-Caches (LiteSpeed Cache, WP Rocket, Cloudflare) und persistentem Object Cache (Redis, Memcached, SQLite Object Cache). Das HTML liefert neutrale Skelette aus; der nutzerspezifische Zustand wird dynamisch per autoritativer REST-API und No-Cache-Headern hydriert.
* **Modernes Split-Button UI:** 
  - Nicht gespeichert: Klick speichert direkt in die Standardliste ("Meine Favoriten").
  - Gespeichert: Klick entfernt den Beitrag aus allen Listen mit einem "Rückgängig"-Toast.
  - Dropdown: Direkte Auswahl beliebiger Listen, Inline-Erstellung neuer Listen und Schnellzugriff auf das Dashboard.
* **Frontend-Dashboard `[save_for_later_lists]`:**
  - Responsive Seitenleiste mit Listen, Zählern und Neuerstellung.
  - "Alle gespeicherten Beiträge"-Übersicht.
  - Listen umbenennen und löschen (mit barrierefreiem Bestätigungsdialog; Beiträge bleiben unberührt).
  - Beiträge per Drag & Drop oder Tastatur-Pfeilen sortieren, in andere Listen verschieben oder entfernen.
  - Sortierung nach Manuell, Zuletzt gespeichert und Titel A–Z.
* **Paid Memberships Pro (PMP) Integration:**
  - Zugriff auf Listen-Erstellung und Speichern kann auf bestimmte Mitgliedschaftsstufen beschränkt werden.
  - Serverseitig gehärtet: Ansehen und Entfernen bestehender Einträge bleibt für berechtigte Konten erhalten.
* **Font Awesome & SVG:**
  - Standardmäßig native, performante Inline-SVGs (keine externen Requests, 0 CDN-Abhängigkeit).
  - Optional: Erkennung und Nutzung lokaler Font Awesome Bibliotheken (FA4, FA5, FA6) mit automatischem SVG-Fallback.
* **Barrierefreiheit & Standards:**
  - WCAG 2.2 AA konform (`aria-expanded`, `aria-live`, Tastaturnavigation, sichtbare Fokusringe, Kontraste).
  - 100% PHP 8.0–8.4 kompatibel, strenge $wpdb-Vorbereitung, IDOR-Schutz, DSGVO-Export & Lösch-Routinen.

== Installation ==

1. Lade den Ordner `wp-save-for-later` in das Verzeichnis `/wp-content/plugins/` hoch oder installiere die ZIP-Datei über das WordPress-Backend (**Plugins → Installieren → Plugin hochladen**).
2. Aktiviere das Plugin unter **Plugins**.
3. Gehe zu **Einstellungen → WP Save for Later**, um Post Types, automatische Button-Platzierung, Farben und das Leselisten-Dashboard zu konfigurieren.
4. Platziere den Shortcode `[save_for_later_lists]` auf einer beliebigen Seite oder nutze den Button "Neue Leselisten-Seite automatisch generieren" in den Einstellungen.

== Frequently Asked Questions ==

= Wie verhält sich das Plugin mit LiteSpeed Cache? =
WP Save for Later ist von Grund auf für LiteSpeed Cache optimiert. Alle API- und AJAX-Anfragen senden `X-LiteSpeed-Cache-Control: no-cache` und triggern den Hook `litespeed_control_set_nocache`. Das JavaScript initialisiert selbst bei aktivem "Delay JS" oder "Combine JS" nahtlos.

**Wichtig für LiteSpeed UCSS / Critical CSS:**
Falls du in LiteSpeed Cache UCSS (Unique CSS) oder Critical CSS aktiviert hast, trage in den LiteSpeed Cache Einstellungen unter **Page Optimization → Tuning → UCSS Whitelist** die CSS-Klassenpräfixe `.sfl-*` ein, damit interaktive Dropdowns, Dialoge und Toasts immer korrekt gestylt sind.

= Werden Daten im persistenten Object Cache (Redis, SQLite) gespeichert? =
Nein. Sämtliche Nutzerdaten, Zuordnungen und Synchronisations-Tokens liegen ausschließlich in eigens optimierten Datenbanktabellen (`wp_sfl_lists`, `wp_sfl_items`, `wp_sfl_state`) und werden über direkte `$wpdb`-Abfragen verwaltet. Es treten daher keine veralteten Cache-Zustände auf.

= Kann ich das Plugin mit Paid Memberships Pro nutzen? =
Ja. Unter **Einstellungen → WP Save for Later** findest du einen eigenen PMP-Bereich (sofern PMP aktiv ist). Du kannst das Erstellen und Hinzufügen von Lesezeichen auf ausgewählte Mitgliedschaftsstufen beschränken.

= Funktioniert das Plugin mit Page Buildern wie Divi, Elementor oder Bricks? =
Ja. Der Shortcode `[save_for_later]` und `[save_for_later_lists]` funktioniert in allen Page Buildern. Divi 5.x wird vollständig unterstützt, ohne den Visual Builder zu beeinträchtigen.

= Welche Shortcodes stehen zur Verfügung? =
* `[save_for_later]` – Gibt den Speicher-Button für den aktuellen Beitrag aus.
* `[save_for_later post_id="123"]` – Gibt den Speicher-Button für einen bestimmten Beitrag aus.
* `[save_for_later_lists]` (Alias: `[save_for_later_dashboard]`) – Gibt das vollständige Listen-Dashboard aus.

== Screenshots ==

1. Split-Button im gespeicherten Zustand.
2. Split-Button im Ausgangszustand ("Für später speichern").
3. Das Frontend-Dashboard mit Listenübersicht, Sortierung und Beitragsverwaltung.
4. Einstellungsseite im WordPress-Admin mit Live-Metriken, Farb-Picker und PMP-Steuerung.

== Changelog ==

= 1.0.2 =
* Behoben: TypeError in `SFL_Display::filter_divi_module()` behoben (Divi übergibt das Modul-Element-Objekt als 3. Parameter; `accepted_args` auf 2 angepasst und Typisierung gelockert).

= 1.0.1 =
* Behoben: Zuverlässige Button-Platzierung "Direkt unter dem Beitragstitel" für Divi 5, Theme Builder und Themes mit getrennten Titel-Templates. Platzierung direkt nach Lesezeit-Hinweisen.
* Behoben: Fehlen des Admin-Menü-Icons im Backend durch natives, gestochen scharfes Base64-SVG Bookmark-Icon ersetzt.
* Optimiert: Registrierung von Stylesheets und Inline-CSS-Variablen bereits im Header (wp_enqueue_scripts).

= 1.0.0 =
* Erstveröffentlichung von WP Save for Later Pro.
* Eigene Datenbanktabellen für unbegrenzte, skalierbare Listen.
* Split-Button mit Dropdown, Toast-Meldung mit Rückgängig-Funktion.
* Vollwertiges Frontend-Dashboard mit Drag-and-Drop Sortierung und Inline-Umbenennung.
* LiteSpeed Cache und Object Cache Härtung.
* Paid Memberships Pro Integration.
* DSGVO-Datenexport und Personenbezogene Daten Löschfunktion.
* Mehrsprachigkeit (de_DE, de_DE_formal, en_US, en_GB).
