Support » Allgemeine Fragen » Shortcodes, Snippets oder Plugins

  • Gelöst didi1er

    (@didi1er)


    Guten Tag,
    ich versuche, mich in WordPress einzuarbeiten.
    Schon am Anfang bin ich verwirrt.
    Plugins sind Funktionen, hinter Shortcodes stecken Funktionen und ebenso hinter Code-Snippets.
    1. Wann nimmt man das eine, wann das andere?

    Dann habe ich zum Thema Snippets gelesen:

    Die meisten Websites, die Snippets hosten, empfehlen dir, den Snippet-Code in der Dateifunctions.php hinzuzufügen, was nach einiger Zeit recht lang und unübersichtlich werden kann. Code Snippets ändert das, in dem es dir eine grafische Benutzeroberfläche zur Verfügung stellt, in dem du Snippets hinzufügen und eigentlich auch auf deiner Website ausführen kannst, ganz so als ob sie in der Datei functions.php deines Themes wären.

    Demnach kann der Snippet-Code in der funtions.php abgelegt werden und anderswo (aber wo?)
    Woher weiß das System wo es dann den Snippet-code suchen soll?
    Ich bin total verwirrt:-(

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)
  • 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.)

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Ein weiterer Vorteil von dem erwähnten Snippet-Plugin ist, dass der Code zusätzlich auf Frontend oder Backend beschränkt werden kann.

    In einem eigenen Plugin kann/muss diese Beschränkung selbst gebaut werden.

    Gruß, Torsten

    Das nenne ich einmal eine tolle Erläuterung!
    Vielen Dank!

    Hallo Torsten,
    jetzt habe ich doch noch eine Frage.
    Du hast geschrieben

    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.

    Wenn ich ein Child-theme erstelle, sehe ich alle Seiten des themes. Wenn ich dann eine Seite ändere, so wird dies demnach (auch) im theme wirksam.
    Wo finde ich dann ein template im theme, das ich ändern möchte?
    Speichern tue ich es vermutlich in dem entsprechenden Verzeichnis des child-themes.

    Child Themes sind Erweiterungen regulärer Themes.

    Nehmen wir an, dir gefällt das Theme Twenty Sixteen so gut, dass du es gerne für deine Website verwenden möchtest. Typografie, Layout, Seitenaufbau … alles so, wie du es haben möchstest … bis auf eine Kleinigkeit: Du möchtest im Footer eine zusätzliche Zeile mit deinem ganz persönlichen Motto hinzufügen.

    Das Template für die Darstellung des Footers ist footer.php. Wenn du nun in diesem Template eine Änderung vornimmst, siehst du auch zunächst dein Motto im Footer; beim nächsten Update wird das Template aber wieder überschrieben und du fängst von vorne an.

    Die Lösung ist, ein Child Theme zu erstellen. Im Template Header des Child Theme steht, dass es sich um ein Child Theme handelt und alle Templates des Parent Theme verwendet werden müssen, wenn das Child Theme kein eigenes Template hat. Nun kopierst du das Template footer.php aus dem Parent Theme, nimmst hier deine Änderungen vor und WordPress verwendet künftig das Template footer.php des Child Themes. Wenn jetzt das Parent Theme aktualisiert wird, liegt dein geändertes Template im Verzeichnis des Child Themes und wird deshalb nicht überschrieben.

    Nachteil ist dabei, dass das Template des Child Themes auch dann nicht überschrieben wird, wenn im Parent Theme eine Sicherheitslücke behoben wird. Dies liegt in der Verantwortlichkeit des Website-Betreibers.

    Alles klar?

    Merci!

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)