Schlagwort: 🌍/🏠

  • blog-list


    Blog-Listen


    Das Blog-List-Modul ist die Grundlage für mehrsprachige Modul- und Server-Dokumentation im ganzen Weinhold-Framework – inklusive der Übersichtsseite, auf der du diesen Beitrag gefunden hast, und der Struktur, in der dieser Beitrag selbst geschrieben ist.

    Allgemein

    Diese Seite nutzt dieses Modul


    Die Übersicht auf weinify.de/module ist selbst mit dem Blog-List-Modul gebaut. Der Shortcode weinify_blog_list mit den Parametern tag, style, orderby und order rendert dort die Kachel-Übersicht aller Modul-Beiträge.

    Zwei Formate


    Für kurze Übersichtsseiten gibt es das einfache wf_de/wf_en-Format mit frei eingegebenem HTML. Für ausführliche Doku-Beiträge (wie diesen hier) gibt es das strukturierte weinhold_blog_list_de/weinhold_blog_list_en-Format mit benannten, einklappbaren Sektionen, automatischem Inhaltsverzeichnis und Entwickler-Tabellen. Beide Formate unterstützen denselben DE/EN-Umschalter.

    Core-Hervorhebung


    Posts mit dem Schlagwort core, wichtig oder benötigt werden in Listen-Ansichten automatisch nach oben sortiert und mit einem dezenten „Core“-Label hervorgehoben.

    Tag-Ăśbersetzungen & Icons


    Unter Weinhold → Blog List → Tag-Übersetzungen & Icons lässt sich pro Schlagwort eine englische Übersetzung und ein Icon hinterlegen, die automatisch in der Badge-Anzeige (weinhold_blog_list_meta) und im englischen Sprachblock verwendet werden.

    Shortcodes

    ShortcodeBeschreibung
    weinify_blog_listRendert eine gefilterte Kachel-/Listen-Ăśbersicht. Attribute: tag, style (cards/showcase/timeline/list), limit (Standard 9), orderby (title/date/menu_order), order (ASC/DESC), pin_core (1/0, Standard 1)
    weinhold_blog_list_de,weinhold_blog_list_enDeutscher bzw. englischer Inhaltsblock im strukturierten Format. Sind beide vorhanden, erscheint automatisch ein Umschalter
    weinhold_blog_list_captionKurzbeschreibung, wird als SeitenĂĽberschrift und als Kartentitel in Listen-Ansichten verwendet
    weinhold_blog_list_metaZeigt alle Schlagwörter des Posts als Badges (ohne rein strukturelle Tags wie modul/weinhold-framework)
    weinhold_blog_list_sectionBenannte, einklappbare Sektion, erzeugt automatisch einen Eintrag im Inhaltsverzeichnis
    weinhold_blog_list_h2ZwischenĂĽberschrift innerhalb einer Sektion
    weinhold_blog_list_devtableEntwickler-Tabelle aus einfachem, spaltengetrenntem Text
    weinhold_blog_list_collapseFrei benannter, einklappbarer Textblock ohne Inhaltsverzeichnis-Eintrag
    wf_de,wf_en,wf_caption,wf_h2,wf_devtable,wf_collapseLegacy-Kurzformen für das einfache Format bzw. Alias-Namen der obigen Shortcodes – in neuem Inhalt die kanonischen weinhold_blog_list_*-Namen verwenden

    Dateien

    modules/blog_list.php – einzige Datei des Moduls: alle Shortcode-Renderer, Sprachumschalter- und Inhaltsverzeichnis-JS, Tag-Metadaten-Verwaltung, Caption-Speicherung, Zurück-Button-Injektion.

    FĂĽr Entwickler

    Wie Devtables geparst werden


    Erste Zeile ist die Kopfzeile, sie bestimmt die Spaltenanzahl. Danach wird jede Zeile in Leerzeichen-getrennte Tokens zerlegt; die ersten N-1 Spalten bekommen je ein Token zugewiesen, die letzte Spalte nimmt den kompletten Rest der Zeile. Endet ein Token mit einem Komma oder enthält es eine offene runde Klammer, läuft die Spalte ĂĽber das nächste Leerzeichen hinaus weiter (z. B. bleibt „bigint, Auto-Increment“ oder „weinhold_…_get_rows( array $filters, …“ trotz enthaltener Leerzeichen und Kommas in einer Spalte). Seit 2026-09-22 wird daraus ein echtes HTML-table-Element gerendert (vorher nur Text mit br-UmbrĂĽchen).

    Inhaltsverzeichnis & Sprachumschalter


    Beides läuft rein im Frontend-JS (weinhold_blog_list_inline_js()): buildTocs() sammelt alle Sektionen mit data-toc-title im aktuellen Scope und baut daraus automatisch eine Navigation samt „Alle auf-/zuklappen“-Button, initLangToggles() blendet je nach gewählter Sprache den passenden Block ein/aus und merkt die Wahl in localStorage unter dem SchlĂĽssel weinhold_lang.

    Naming-Fix: wf_* vs. weinhold_blog_list_*


    Die kanonischen Shortcode-Namen sind weinhold_blog_list_*, die kürzeren wf_*-Namen existieren nur noch als Alias für bereits veröffentlichte, ältere Beiträge. In neuem Doku-Inhalt immer die langen Namen verwenden.

    Besonderheiten

    weinhold_blog_list_meta zeigt bewusst nicht zwischen „Kategorie“, „Geltungsbereich“ oder „Core“ unterschiedene Badges – im Code sind das alles einfach Tags wie jeder andere auch. Nur rein strukturelle, nicht unterscheidende Tags (modul, weinhold-framework, wichtig, benötigt) werden herausgefiltert.

    Shortcodes innerhalb von weinhold_blog_list_collapse werden nicht per do_shortcode() aufgelöst – ein Shortcode wie eine Server-Einbettung darf deshalb nie in einem Collapse-Block stehen, sondern muss direkt auf Beitragsebene, außerhalb aller weinhold_blog_list_*-Wrapper platziert werden.

    Der Zurück-Button am Ende jedes Beitrags sowie das Zuklappen/Aufklappen-Verhalten der Sektionen werden über den the_content-Filter automatisch injiziert – Autoren müssen dafür nichts zusätzlich in den Beitrag schreiben.

    Versionshistorie

    VersionDatumÄnderung
    1.0.022.09.2026EinfĂĽhrung der Versionierung.


  • 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.