Schlagwort: 🏠

  • custom-header


    Custom Header


    Das Custom-Header-Modul ermöglicht die Erstellung eines vollwertigen Headers mit Navigationsbuttons und frei definierbarem HTML – komplett ĂŒber das Admin-Dashboard, ohne Theme-Anpassungen. Den Header, den du gerade auf weinify.de siehst, wurde mit diesem Modul gebaut.

    Allgemein

    Buttons & Drag and Drop


    Buttons werden ĂŒber den Platzhalter –buttons– an einer beliebigen Stelle im Header-Inhalt eingefĂŒgt. Die Reihenfolge lĂ€sst sich per Drag & Drop anpassen. Buttons können Sub-Buttons enthalten, die beim Hover ein Dropdown-MenĂŒ öffnen. Pro Button lĂ€sst sich außerdem die Sichtbarkeit festlegen: immer, nur fĂŒr eingeloggte oder nur fĂŒr ausgeloggte Besucher.

    Login-Navigation per Platzhalter


    ZusĂ€tzlich zu –buttons– gibt es den Platzhalter –auth–, der an dieser Stelle die Login/Profil-Navigation des Benutzerverwaltung-Moduls einfĂŒgt (identisch zum Shortcode weinhold_auth_nav). Nur im Header verfĂŒgbar, nicht im Footer.

    Pro Site, kein Shortcode


    Jede Subsite konfiguriert ihren eigenen Header unabhĂ€ngig. Inhalt, Buttons und Styling sind vollstĂ€ndig voneinander getrennt – dkj.weinify.de kann einen völlig anderen Header haben als weinify.de. Der Header wird automatisch in jede Seite der jeweiligen Subsite eingebunden, sobald er im Dashboard konfiguriert und aktiviert wurde. Kein Shortcode nötig.

    Social-Vorschau


    Unter den Header-Einstellungen gibt es einen eigenen Abschnitt „Social-Vorschau“. Er legt fest, welches Bild, welchen Titel und welche Beschreibung Discord, WhatsApp, Signal & Co. anzeigen, wenn ein Link zur Subsite geteilt wird (Open Graph und Twitter Card im Seitenkopf). Das Bild wird aus der Mediathek gewĂ€hlt, empfohlen sind 1200 × 630 Pixel. Unterseiten verwenden ihren eigenen Titel, ein gesetztes Beitragsbild und einen bewusst geschriebenen Auszug. Ohne eigene Angaben greifen Titel, Untertitel und Website-Icon der Subsite. Optional wird die Beschreibung zusĂ€tzlich als Meta-Beschreibung fĂŒr Suchmaschinen ausgegeben.

    Dateien

    modules/custom_header.php – Modul-Datei (Init, Admin-Seite, Cleanup) und die komplette Social-Vorschau (nur Header). Die Header-Ausgabe selbst delegiert sie an das gemeinsam mit Custom Footer genutzte includes/weinhold_custom_layout_helpers.php.

    FĂŒr Entwickler

    Gemeinsamer Unterbau mit Custom Footer


    Header und Footer sind keine zwei getrennten Implementierungen, sondern dieselbe Logik in includes/weinhold_custom_layout_helpers.php, parametrisiert ĂŒber $layout (‚header‘ oder ‚footer‘). weinhold_custom_layout_get_config($layout) liefert dazu Hook-Name (wp_head bzw. wp_footer), HTML-Tag, ob der –auth—Platzhalter unterstĂŒtzt wird (nur Header) und die Öffnungsrichtung der Sub-Button-MenĂŒs.

    Speicherung (Optionen pro Site)


    OptionInhalt
    weinhold_custom_header_enabledOb der Header aktiv ausgegeben wird
    weinhold_custom_header_htmlDer HTML-Inhalt mit den Platzhaltern –buttons– / –auth–
    weinhold_custom_header_linksArray der Buttons (Beschriftung, Ziel-URL, ĂŒbergeordneter Button fĂŒr Sub-Buttons, Sichtbarkeit)
    weinhold_custom_header_social_settingsSocial-Vorschau: enabled, image_id, title, description, prefer_featured, output_description

    Beim Footer entsprechend mit dem PrÀfix weinhold_custom_footer_* (ohne Social-Vorschau).

    Wichtige Funktionen


    FunktionBeschreibung
    weinhold_custom_layout_init($layout)HĂ€ngt den Render-Callback an wp_head bzw. wp_footer, baut das Button-HTML inkl. Sub-Buttons zusammen
    weinhold_custom_layout_resolve_link_url($value)Löst Spezial-Tokens in Button-Zielen auf (z. B. Links auf Auth-Seiten)
    weinhold_custom_layout_sanitize_html($html)Bereinigt gespeichertes HTML ĂŒber eine eigene, erweiterte Erlaubnisliste (weinhold_custom_layout_allowed_html())
    weinhold_custom_layout_get_button_visibility_class($link)Übersetzt die Sichtbarkeitseinstellung eines Buttons in die CSS-Klasse weinhold-show-on-login bzw. weinhold-show-on-logout
    weinhold_custom_header_render_social_preview()Gibt die Open-Graph- und Twitter-Card-Angaben an wp_head (PrioritÀt 5) aus
    weinhold_custom_header_social_get_meta($settings)Ermittelt Titel, Beschreibung, URL und Typ der aktuellen Seite
    weinhold_custom_header_social_get_image($settings)WĂ€hlt Beitragsbild, Standardbild oder Website-Icon samt GrĂ¶ĂŸe

    Die Sichtbarkeitsklassen greifen auf dieselbe CSS-Logik zurĂŒck, die auch die Shortcodes weinhold_show_on_login/weinhold_show_on_logout des Benutzerverwaltung-Moduls nutzen (weinhold_user_management_render_visibility_css()).

    Besonderheiten

    Wird auf Auth-Seiten (Login, Registrierung, Profil, Passwort-vergessen) automatisch unterdrĂŒckt – weinhold_user_management_is_auth_page() prĂŒft das vor jeder Ausgabe, damit der eigene Header/Footer die dortigen Formulare nicht stört.

    RĂŒckwĂ€rtskompatibel gespeicherte Buttons: Ă€ltere Buttons ohne das neue visibility-Feld werden ĂŒber das frĂŒhere boolesche Feld login_only interpretiert, statt beim Update verloren zu gehen.

    Freies HTML ohne Whitelisting von Grund auf – erlaubt sind bewusst mehr Tags/Attribute als WordPress‘ Standard-Editor zulĂ€sst (eigene erweiterte Erlaubnisliste), damit auch komplexere Layout-Strukturen im Header/Footer möglich sind.

    Die Social-Vorschau hat einen eigenen Schalter (standardmĂ€ĂŸig aus) und wirkt unabhĂ€ngig davon, ob der Header angezeigt wird, auch auf Auth-Seiten. Ist ein SEO-Plugin aktiv (Yoast, Rank Math, AIOSEO, SEOPress, The SEO Framework), gibt sie nichts aus, damit keine doppelten Angaben entstehen. Die Beschreibung von Unterseiten stammt nur aus einem gesetzten Auszug, nie aus dem gekĂŒrzten Inhalt, weil der Shortcodes oder geschĂŒtzte Texte enthalten kann.

    Versionshistorie

    VersionDatumÄnderung
    1.0.128.10.2026Social-Vorschau (Open Graph, Twitter Card) mit Bild aus der Mediathek, Titel und Beschreibung.
    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.