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: