Faustformel: Themes sind Gestaltungsvorlagen,
Plugins enthalten funktionale Ergänzungen zu WordPress.
Wenn du die Gestaltung deiner Website funktional ergänzen möchtest, kannst du eine Funktion in der functions.php
des Themes einfügen.
Eine direkte Änderung in einem Theme hat allerdings den Nachteil, dass deine Ergänzung beim nächsten Update des Themes überschrieben wird. Seshalb wird empfohlen, ergänzende Funktionen statt dessen in einem Child Theme unterzubringen (das ja selber schon eine Ergänzung des Themes ist und bei Updates nicht überschrieben wird).
Child Themes haben aber den Nachteil, dass du dich nun eigentlich bei jedem Update des Parent Theme erst einmal damit auseinandersetzen musst, welche Auswirkungen das Update auf das Child Theme haben könnte.
- (Exkurs: Nehmen wir an, du hast ein Child Theme erstellt und dabei – unabhängig von deinen eingefügten Funktionen in der
functions.php
– ein Template des Parent Theme kopiert und entsprechend eigener Wünsche angepasst. Nun stellt sich heraus, dass das Template des Parent Theme eine Sicherheitslücke hatte. Der Autor behebt diese Lücke mit einem Update. Da sich das Update aber nicht auf dein selbst kopiertes Template auswirkt, hast du nun ein Problem.)
Wer eine zusätzliche Funktion in die Gestaltungsvorlage einbauen, aus den o.g. Gründen aber kein Child Theme erstellen möchte, ist mit Code Snippets besser gestellt. Hier werden mit Hilfe eines Plugins Funktionen völlig unabhängig vom Theme eingebunden und machen die Erstellung eines Child Theme nur zu dem Zweck, eine Funktion einzufügen, überflüssig.
Weiterer Vorteil: Da Code Snippets unabhängig vom Theme sind, kannst du auch jederzeit die Gestaltungsvorlage wechseln, ohne die Funktionalität zu verlieren. Bestimmte Features – z.B. die Erstellung eines Custom Post Type (also einer selbst definierten Beitragsart) – sollten sowieso nicht im (Child-)Theme erfolgen, weil sonst ein späterer Themewechsel ohne Verlust von bereits erfassten Inhalten nicht möglich ist.
Nachteil von Code Snippets ist, dass du zur Verwendung von Code Snippets ein zusätzliches Plugin benötigst, mit dem die Code Snippets eingebunden werden. Unter Umständen sehen Webentwickler es auch kritisch, dass Kunden über das Plugin beliebige zusätzliche Funktionen einbinden könnten (und sich nachher über eine gehackte Website beschweren, weil ihr Code Sicherheitslücken produziert hat).
Ideal scheint, für Kunden ein eigenes Plugin zu erstellen und dort die Funktionalität einzubauen. Das hört sich komplizierter an, als es ist – das Plugin besteht schließlich auch nur aus einem Plugin Header mit ein paar Meta-Angaben, gefolgt von der Funktion die hinzugefügt werden soll.
Fertige Plugins verleiten Kunden weniger dazu, selbst gebastelten Code hunzuzufügen und sind natürlich auch unabhängig von Theme-Wechsel oder Theme-Updates. Als „Must Use“-Plugins können solche Kunden-Plugins sogar so eingebaut werden, dass sie nicht „versehentlich“ durch den Kunden deaktiviert werden.
Aus Sicherheitsgründen kannst du (ohne zusätzliche Plugins*) keinen PHP- und JavaScript-Code über den Beitrags- oder Seiteneditor (also über Beitrag/Seite bearbeiten) einfügen; sonst könnte jeder Anwender jede Benutzerregel umgehen. Wenn du nun aber doch an bestimmten Stellen deines Inhalts PHP-Code ausführen möchtest, kannst du dazu Shortcodes verwenden. Der in eckige Klammern gesetzte [shortcode]
verhält sich wie ein Textbaustein, der im Frontend die (idealerweise in einem Plugin, sonst in einem Code Snippet) hinterlegte Funktion ausführt.
(* Ich sehe Plugins, mit denen du PHP-Code direkt im Seiten-/Beitragseditor einfügen kannst, ausgesprochen kritisch. Solche Plugins verleiten Nutzer dazu, ungeprüften PHP-Code per Copy/Paste zu übernehmen und arge Sicherheitslücken zu produzieren. Auch Benutzerrechte können damit ohne Probleme umgangen werden, was vielen Nutzer vermutlich gar nicht bekannt ist.)