Zum Inhalt

Eigenes Modul

Diese Seite ist noch im Aufbau

Das Gerüst steht, die ausführliche Beschreibung folgt. Die Angaben zu Modul, Blöcken und Einstellungen sind geprüft.

Wozu

Ein Modul kapselt einen Funktionsbereich so, dass er sich abschalten lässt, ohne Spuren zu hinterlassen. Die Regeln dazu stehen unter Modul-Vertrag — diese Seite ist die Schritt-für-Schritt-Anleitung.

Nur im Parent, und nur wenn es allgemein ist

Ein Modul gehört in den Parent, wenn es für mehrere Projekte taugt. Alles Projektspezifische gehört ins Child-Theme — siehe Child-Theme.

Einstellungen

Der Ordner

includes/theme-options/add-ons/mein-modul/
  mein-modul.php     # gleicher Name wie der Ordner, wird automatisch gefunden
  module.json        # Metadaten und Build-Einträge

Die module.json

{
  "name": "Mein Modul",
  "description": "Was es tut, in einem Satz.",
  "requires": [],
  "required": false,
  "defaultEnabled": false
}

defaultEnabled bei etwas Neuem besser auf false — dann bekommt es niemand ungefragt.

Verwenden

Felder in die Theme-Optionen

add_filter('twtheme_option_fields', function (array $form_data): array {
    $form_data[] = [
        'title'  => 'Mein Modul',
        'id'     => 'mein-modul',
        'fields' => [
            ['id' => 'enabled', 'label' => 'Aktiv', 'type' => 'switch'],
        ],
    ];

    return $form_data;
}, 50);

Die Priorität bestimmt die Position des Reiters.

Assets

In die module.json:

{
  "scss": [["assets/mein-modul.scss", "assets/mein-modul.css"]],
  "js": [{ "src": "assets/mein-modul.js", "bundle": true }]
}

Mehr ist nicht nötig — der Build findet die Einträge selbst. Siehe Build-Kette.

Entwicklertipps

Drei Regeln, an denen es sonst scheitert:

Aufrufe über Modulgrenzen immer prüfen. Ein ungeprüfter Aufruf ist ein Fatal Error, sobald das andere Modul aus ist:

if (function_exists('twtheme_icons_available') && twtheme_icons_available()) {
    echo twtheme_inline_icon('phone');
}

Harte Voraussetzungen zusätzlich in die module.json, damit die Oberfläche den Schalter sperrt.

Keine Funktion ohne Modulpräfix beim Laden deklarieren. Wer einen allgemeinen Namen belegen will, reicht ihn bei after_setup_theme mit Priorität 99 nach — und nur, wenn er frei ist.

Editor-Assets nicht ins Frontend lassen. Kein "script" in der block.json, kein editor.css unter "style".

Prüfen:

npm run audit:modules
npm run audit:editor-assets
npm run check

Weiter