Schlagwort: weinhold-framework

  • discord-notifications


    Discord-Benachrichtigungen


    Das Discord-Benachrichtigungs-Modul verbindet das Weinhold Framework mit Discord. Neue Inhalte – ob Blogbeiträge, Highlights, Kalendertermine oder andere Modul-Events – können automatisch als Rich Embed in Discord-Kanälen erscheinen.

    Allgemein

    Post-Type-Webhooks


    Für jeden WordPress-Post-Type (Beiträge, Seiten, eigene Post-Types) kann ein separater Webhook konfiguriert werden. Sobald ein Beitrag des jeweiligen Typs erstmalig veröffentlicht wird (nicht bei jedem erneuten Speichern eines bereits veröffentlichten Beitrags), sendet das Modul automatisch eine Benachrichtigung – optional mit Präfix-Text und Erwähnung bestimmter Discord-Rollen.

    Modul-Integrationen


    Andere Framework-Module registrieren sich als Modul-Integration und erhalten so einen eigenen Webhook-Slot mit individueller Nachrichtenvorlage. Aktuell integriert: Highlights, Kalender, LoL Comp Generator und weitere. Die Konfiguration erfolgt unter Weinhold → Discord-Benachrichtigungen → Modul-Integrationen.

    Nachrichtenvorlagen


    Jede Integration hat eine eigene Vorlage mit Platzhaltern wie {author}, {caption}, {url}, {date}. Discord-Embeds enthalten automatisch Author-Icon, Farbe, Bild (bei Medien), Timestamp und Footer.

    Manuelles Senden & Testen


    Über das Dashboard können auch manuell Nachrichten an konfigurierte Webhooks gesendet werden – praktisch für Ankündigungen. Ein eigener Testbereich erlaubt, einen Webhook vorab zu prüfen, ohne einen echten Beitrag veröffentlichen zu müssen.

    Dateien

    modules/discord_notifications.php – einzige Datei des Moduls: Einstellungen, Post-Type-Webhook-Logik, zentrale Modul-Event-Funktion, Webhook-Versand, Admin-Oberfläche (Post-Types, Modul-Integrationen, manueller Versand, Testbereich).

    Für Entwickler

    Ein Modul anbinden


    Zwei Schritte, siehe auch docs/CLAUDE.md im Repo für ein vollständiges Beispiel: Erstens im eigenen Modul beim Filter weinhold_discord_module_integrations einen Eintrag mit label und description registrieren – das Modul erscheint danach automatisch unter Modul-Integrationen mit Feldern für Webhook-URL, Aktivierung und Nachrichtenvorlage. Zweitens beim eigentlichen Ereignis weinhold_discord_fire_module_event($module_id, $context) aufrufen, mit Kontext-Feldern wie author, avatar_url, caption, media_url, media_type, link_url, page_url, date_gmt, date_local (alle optional). Module dürfen Discord-Nachrichten ausschließlich über diese eine Funktion senden, kein eigenes wp_remote_post() im aufrufenden Modul.

    Verfügbare Platzhalter (Modul-Vorlagen)


    PlatzhalterWert
    {author}Anzeigename des Nutzers
    {caption}Freitext / Hauptinhalt
    {link}Externer Link (leer wenn nicht übergeben)
    {media_url}URL zur Mediendatei
    {date}Lokal formatiertes Datum
    {url}URL zur Website-Seite
    {site}WordPress-Seitenname

    Wichtige Funktionen


    FunktionBeschreibung
    weinhold_discord_fire_module_event($module_id,$context)Zentraler Einstiegspunkt für Modul-Events, prüft selbst Aktivierung und Webhook-Konfiguration
    weinhold_discord_get_module_webhook($module_id)Liefert die Webhook-Konfiguration einer Modul-Integration
    weinhold_discord_resolve_module_template($template,$context)Ersetzt Platzhalter in einer Modul-Nachrichtenvorlage
    weinhold_discord_send_to_webhook($url,$content,$blocking,$allowed_mentions)Roher Versand an einen Discord-Webhook

    Besonderheiten

    transition_post_status feuert nur beim ERSTEN Übergang zu publish (alter Status war nicht bereits publish) – erneutes Speichern eines schon veröffentlichten Beitrags löst keine zweite Benachrichtigung aus. Revisionen und Autosaves werden zusätzlich explizit ausgeschlossen.

    Rollen-Erwähnungen bei Post-Type-Webhooks werden serverseitig als echte Discord-Mention-Syntax zusammengebaut (Rollen-ID eingebettet), zusammen mit einer passenden allowed_mentions-Angabe im Request – ohne diese würde Discord die Erwähnung als reinen Text anzeigen statt als Ping.

    Zwei komplett unabhängige Versandwege existieren nebeneinander: Post-Type-Webhooks senden reinen Text (content-Feld), Modul-Integrationen senden immer als vollwertiges Discord-Embed – beide teilen sich aber dieselbe zentrale weinhold_discord_send_to_webhook()-Funktion für den eigentlichen HTTP-Request.

    Versionshistorie

    VersionDatumÄnderung
    1.0.022.09.2026Einführung der Versionierung.


  • Highlights – Der Activity Feed im Weinhold Framework


    Highlights


    Das Highlights-Modul ist der Discord-ähnliche Activity Feed des Weinhold Frameworks. Mitglieder können Bilder, Videos und Links mit einer kurzen Caption posten – und die Community sieht es sofort im Feed.

    Allgemein

    Feed & Medien-Upload


    Neue Posts erscheinen oben, ältere können per „Mehr laden“ nachgeladen werden (AJAX, kein Seitenreload). Bilder und Videos werden direkt beim Posten hochgeladen und in einem eigenen Verzeichnis (uploads/weinhold-highlights/) abgelegt – getrennt von der WordPress-Mediathek. Die maximale Dateigröße und Posts pro Ladevorgang sind im Dashboard konfigurierbar.

    Discord-Integration


    Jeder neue Highlights-Post kann automatisch eine Discord-Benachrichtigung auslösen – über das Discord-Benachrichtigungs-Modul. Webhook-URL, Aktivierungsstatus und Nachrichtenvorlage werden zentral unter Weinhold → Discord-Benachrichtigungen → Modul-Integrationen → Highlights konfiguriert.

    Berechtigungen


    Über das Benutzerverwaltungs-Modul lässt sich steuern, wer den Feed sehen (view) und wer neue Posts erstellen (edit) darf. Eigene Posts lassen sich zusätzlich vom Ersteller selbst löschen.

    Admin-Werkzeuge


    Die Admin-Seite bietet neben den Einstellungen zwei Aufräum-Funktionen: eine Medien-Verwaltung mit Vorschau aller Posts mit Datei und Lösch-Button, sowie einen Scan des Upload-Ordners auf verwaiste Dateien (Dateien ohne zugehörigen Datenbankeintrag).

    Shortcodes

    ShortcodeBeschreibung
    weinhold_highlightsRendert den vollständigen Highlights-Feed auf einer WordPress-Seite

    Dateien

    modules/highlights.php – einzige Datei des Moduls: Datenbank, Datei-Upload, Frontend-Formular-Verarbeitung, AJAX (Nachladen, Löschen), Shortcode-Rendering, Admin-Oberfläche inkl. Datei-Aufräumung.

    Für Entwickler

    Datenbank


    SpalteTypBedeutung
    site_idbigintWelche Site im Netzwerk
    user_idbigintErsteller des Posts
    captiontextFreitext des Posts
    media_url,media_typevarcharHochgeladene Datei (URL) und Typ (image/video), beide optional
    link_urlvarcharOptionaler externer Link statt/zusätzlich zu Medien
    created_atdatetimeErstellungszeitpunkt

    Einstellungen (Option weinhold_highlights_settings): max_filesize in MB (Standard 20), per_page (Standard 15).

    Wichtige Funktionen


    FunktionBeschreibung
    weinhold_highlights_delete_post_and_file($id,$url)Post und zugehörige Datei in einem Aufruf löschen
    weinhold_highlights_delete_file_by_path($path)Datei über Pfad löschen, mit Sicherheitsprüfung gegen das Upload-Basisverzeichnis
    weinhold_highlights_get_orphaned_files()Verwaiste Dateien im Highlights-Ordner finden (Dateien ohne DB-Eintrag)
    weinhold_highlights_scan_upload_dir()Alle Dateien im Highlights-Ordner auflisten
    weinhold_highlights_current_user_can_view()/_can_post()/_can_delete($post_user_id)Berechtigungsprüfungen, delete zusätzlich mit Eigentümer-Check

    Upload-Verzeichnis


    Eigenes Unterverzeichnis uploads/weinhold-highlights/ (bei Multisite-Subsites entsprechend unter uploads/sites/{id}/) über einen temporären upload_dir-Filter, der nur während des Highlights-Uploads aktiv ist. Hochgeladene Dateien werden NICHT in der WordPress-Mediathek registriert (kein wp_insert_attachment) – daher der eigene Scan für verwaiste Dateien, da WordPress-Bordmittel sie nicht kennen.

    Besonderheiten

    Formulare werden auf der wp-Action verarbeitet (weinhold_highlights_handle_frontend_actions(), vor dem Template-Rendering), nicht per admin-post.php – Standardmuster für Frontend-POST-Verarbeitung im Framework.

    Discord-Versand läuft ausschließlich über die zentrale Funktion weinhold_discord_fire_module_event(‚highlights‘, $context) – kein eigener wp_remote_post() im Modul. Ist das Discord-Modul nicht aktiv, passiert einfach nichts (kein Fehler).

    Da hochgeladene Medien nicht in der Mediathek landen, gibt es keine automatische WordPress-Aufräumung beim Löschen eines Posts über die üblichen Attachment-Hooks – weinhold_highlights_delete_post_and_file() übernimmt Datei- und Datenbanklöschung deshalb explizit gemeinsam.

    Versionshistorie

    VersionDatumÄnderung
    1.0.022.09.2026Einführung der Versionierung.