ThemeForest hat kürzlich seine WordPress-Theme-Einreichungsanforderungen aktualisiert, um strenger und besser an die Best Practices der WordPress-Theme-Entwicklung angepasst zu sein.
Die Richtlinien erfordern die Verwendung mehrerer Kernfunktionen von WordPress, Standard-Theme-Hooks und verbieten PHP-Funktionen (wie base64 und fopen), die wirklich eigentlich keinen Platz in einem WordPress-Theme haben sollten.
Im Grunde genommen die Theme Review Policy von WordPress.org, mit ein paar Ausnahmen.
Insgesamt ist dies ein Schritt in die richtige Richtung und fördert Best Practices auf einem der beliebtesten Marktplätze für WordPress-Themes im Netz. Es gibt nur ein Problem...
Zulässige Shortcodes
Eine Sache, die mir besonders aufgefallen ist, war jedoch, wie bestimmte „zulässige“ Shortcode-Funktionalitäten erlaubt waren (d. h. durch direkte Einbindung über die functions.php-Datei des Themes). Die als „zulässig“ aufgeführten enthielten die folgenden:
- Schaltflächen
- Preislisten
- Bildcontainer
- Dropcaps
- Listen
Unzulässige Shortcodes sind: Karten, Akkordeons und Toggles, Box-Inhalte, Spalten, Kontaktformulare, Diagramme.
Das Problem mit Shortcodes in Themes
Ich kann es nicht besser ausdrücken, als Justin Tadlock es bereits getan hat. Eines der auffälligsten Probleme ist, dass, wenn ein Benutzer das Theme wechselt, die Shortcodes nicht mehr geparst werden.
Nehmen wir an, das Theme „Super Awesome“ hatte eine Shortcode-Funktion, die einen großen grünen Button mit einem Link ausgab, wenn man etwas wie [button url="http://example.com"]Großer grüner Button[/button] eingab.
Wenn Sie zu einem anderen Theme wechseln (sagen wir, die Leute langweilen sich leicht von Themes), gibt es keinen großen grünen Button mehr. Stattdessen sehen Sie den ungeparsten Shortcode im Beitrag, als wäre er ein beliebiger anderer Inhalt, so:
[button url=”http://example.com”]Großer grüner Button[/button]
Es sieht hässlich, verwirrend und deplatziert aus, und es ist eine Qual für den Benutzer, alle zu entfernen/ersetzen.
Das andere Problem mit Shortcodes in Themes
Etwas, das Tadlock in seinem Artikel „Dealing with shortcode madness“ behandelt hat, ist, dass viele Shortcodes so einfach und HTML-ähnlich sind, dass es vielleicht am besten wäre, die Benutzer anzuweisen, ein wenig (*gasp*) echten HTML-Code zu schreiben.
Der gleiche [button url="http://example.com"]Button-Text[/button]-Shortcode in meinem obigen Beispiel könnte leicht umgeschrieben werden als etwas wie:
Auch wenn es möglicherweise keinen CSS-Code gibt, der den .button-Selektor in einem neuen Theme stylt, wird zumindest ein normaler Link angezeigt. Was eine große Verbesserung gegenüber einem ungeparsten [button]-Shortcode ist, der im Inhalt eines Beitrags angezeigt wird.
Außerdem glaube ich, dass jeder WordPress-Benutzer grundlegende Kenntnisse in HTML-Code haben sollte. Indem man sie lehrt, auch nur in kleinen Dosen (wie man einen Link erstellt), wird dies helfen. Wenn sie einen Shortcode verstehen können, wird es nicht viel mehr erfordern, um sie grundlegendes HTML verstehen zu lassen.
Aber die Benutzer kümmern sich nicht!
Ein häufiges Argument, das ich zur Verteidigung aller möglichen schlechten Praktiken bei der Theme-Entwicklung sehe, ist, dass sich die Benutzer einfach nicht darum kümmern. Ich meine, vielleicht wollen sie ihr Theme nie aktualisieren, in diesem Fall wäre dieses Shortcode-Problem irrelevant.
Das Problem ist, dass einige Benutzer unvermeidlich eines Tages die Themes wechseln wollen werden. Einige Benutzer werden ein Plugin installieren wollen, das mit anderem schlecht durchdachtem Code in einem Theme in Konflikt geraten könnte.
Dann werden sie sich wahrscheinlich doch kümmern und sich wahrscheinlich fragen, ob das Theme, das sie mit Hunderten von integrierten Shortcodes und anderen überflüssigen Funktionen gekauft haben, wirklich sein Geld wert war.
Der richtige Weg, Shortcodes einzubinden
Packen Sie es in ein Plugin. Ein wirklich einfaches Plugin. Es braucht kein separates Optionsfeld. Kopieren und fügen Sie einfach buchstäblich ein, was auch immer Sie über die functions.php-Datei Ihres Themes einfügen wollten, und packen Sie es stattdessen in ein Plugin.
Es könnte sogar mit etwas wie TGM Plugin Activation gebündelt werden, um es bei der Theme-Aktivierung erforderlich zu machen. Oder auch nicht. Ein Theme ist immer noch ein Theme ohne Shortcodes.
Auf diese Weise, wenn der Benutzer die Themes wechselt, funktionieren die Shortcodes immer noch, da diese Funktionalität vom Plugin gehandhabt wird, das noch aktiv ist.
Vielleicht könnte das Plugin auch Styles einbinden für die Shortcodes. Auf diese Weise werden die großen grünen Schaltflächen, die Sie mit dem [button]-Shortcode eingefügt haben, immer noch große grüne Schaltflächen sein, unabhängig vom verwendeten Theme.
Warum hat ThemeForest „zulässige“ Shortcodes erlaubt?
Es ist schwer zu sagen, was genau die Begründung für diese Entscheidung war. Japh Thomson, ein WordPress-Evangelist bei Envato (der Muttergesellschaft von ThemeForest), sagte dazu in einem Kommentar auf WPMU.org:
Komplexe Shortcode-Funktionalität sollte wirklich in einem Plugin und nicht in einem Theme liegen. Es ist auch sinnvoll, wenn man bedenkt, dass die meisten unserer Autoren mehrere Themes haben.
Offensichtlich versteht er es. Es ist mir also ein Rätsel, warum es überhaupt „zulässige“ Shortcodes geben sollte. Und ja, ich erkenne, dass er das Wort „komplex“ im obigen Zitat verwendet hat, und die zulässigen Shortcodes sind tendenziell eher einfache (Dropcaps, Listen usw.).
So einfach ein Shortcode auch sein mag, die Probleme, die ich oben skizziert habe, werden immer noch bestehen. ThemeForest hat sich als reaktionsfähig auf Community-Feedback erwiesen, daher ist es möglich, dass diese Regel in Zukunft geändert wird.
Fazit
Ich erkenne, dass dieser Beitrag ein wenig kleinlich erscheint, und diese neuen Richtlinien sind definitiv ein großer Schritt in die richtige Richtung. Aber es gibt wirklich keinen Grund, warum irgendein Shortcode in einem Theme erlaubt sein sollte, egal ob einfach oder nicht.
Können Sie sich eine Situation vorstellen, in der ein öffentlich veröffentlichtes Theme unbedingt eine Shortcode-Funktionalität über seine eigene functions.php benötigt?
— Theme Lab (@themelab) 9. Juli 2013
Spoiler-Alarm: Keine Antworten auf diesen Tweet mit einem echten Beispiel für einen Shortcode, der unbedingt in ein öffentlich veröffentlichtes Theme aufgenommen werden muss.
Das liegt daran, dass es für einen Benutzer nicht benutzerfreundlich ist, zurückzugehen und Hunderte von Button-Shortcodes zu ersetzen, nachdem er zu einem Theme gewechselt hat, das nicht genau die gleiche Shortcode-Unterstützung bietet.
Vielen Dank für diesen Beitrag. Ich habe gerade ein ThemeForest-Theme gekauft und habe dasselbe Problem! Als wir das Theme hochgeladen haben, sagen die Seiten, dass der Shortcode nicht kompatibel ist ... was kann ich jetzt tun, um ihn kompatibel zu machen? Danke!
Obwohl ich zustimme, dass Shortcodes in einem Plugin und nicht in einem Theme enthalten sein sollten, wird der ungeparste Code immer noch angezeigt, wenn das Plugin deaktiviert oder durch ein anderes Shortcode-Plugin ersetzt wird. In jedem Fall kann dies eine Belastung für die Person sein, die den Wechsel durchführt.
Grundlegendes HTML zu lernen, scheint am besten.
Stimme dem vollkommen zu. Themes sollten Layout und Stile verwalten. Alles, was zusätzliche Funktionen hinzufügt, muss in ein Plugin.
Ich habe die gleiche Haltung zu Shortcodes, kann aber die Begründung verstehen, dass einige Themes sie für technisch nicht versierte Benutzer enthalten, um Funktionen einfach hinzuzufügen, und das wiederum hilft, mehr Themes von Entwicklern zu verkaufen.
Dem stimme ich zu.
Es wäre auch schön, wenn es eine Art elegante Abwärtskompatibilität für Shortcodes gäbe, die nicht mehr aktiv sind.
Somit können mögliche Probleme mit Funktionen, die in Zukunft in verschiedenen Themes hinzugefügt werden, vermieden werden. Wartungsfragen sind wichtige Kaufargumente – zumindest für mich!
Ich stimme Ihnen vollkommen zu. Nur wenige Leute bleiben für immer bei einem Theme, es sei denn, es ist komplett benutzerdefiniert (und dann haben Sie nicht das ThemeForest-Problem), und Shortcodes sind eine Qual. Ich habe dieses Problem kürzlich entdeckt, als ich von einem Theme-Junkie-Theme zu einem Studiopress/Genesis-Theme wechselte. Jetzt habe ich die Änderung auf Eis gelegt, obwohl ich bereits 80 US-Dollar dafür ausgegeben habe, weil es selbst auf meiner neuen Website zu viel zu ändern gibt.
Hallo Leland, toller Beitrag, danke für deine Gedanken!
Wir werden in Kürze ein Update dieser Anforderungen veröffentlichen, basierend auf dem Feedback unserer Autoren, und ich hoffe, Sie werden mit einigen der von uns vorgenommenen Anpassungen zufrieden sein (insbesondere in Bezug auf Shortcodes) 🙂
Ich denke, es ist nicht nur ein Kompatibilitätsproblem mit anderen Themes, sondern auch ein Inhaltsbezogenes Problem. Ein Shortcode sollte nur ein Helfer zur Verarbeitung von Inhalten sein, und Themes sollten nur vorverarbeitete Inhalte anzeigen und den Inhalt nicht selbst verarbeiten. Wenn Themes Shortcodes selbst verarbeiten, behandeln sie diesen Text (oder zumindest sieht es so aus, als ob der Entwickler es tut) als Aufruf zu einem visuellen Element, nicht zu einem funktionalen (was er wirklich ist), als ob der Umfang dessen, wofür ein Theme gedacht ist, dort fehlen würde. Diese Praxis zeigt einen Mangel an Klarheit darüber, was Inhalt, Funktionalität und Visualisierung sind und wie diese Elemente verwaltet werden sollten (d. h. Inhalte sollten in der DB gespeichert werden, Funktionalität sollte über den WP-Kern und Plugins verwaltet werden und Visualisierung über Themes; nur als sehr einfaches Beispiel). Man muss kein Inhaltsexperte, erfahrener Programmierer oder großartiger Designer sein, um solche Dinge zu wissen, nur ein wenig Aufmerksamkeit und sorgfältiges Nachdenken darüber, was wir unseren Benutzern anbieten und wie einfach oder schwierig es für sie sein wird, unsere Produkte zu nutzen. Ich denke, es ist in Ordnung, wenn Sie die Unterschiede nicht kennen, aber offen dafür sind, zu lernen und sich zu verbessern, aber andererseits, all diese Dinge zu kennen und im Hinterkopf zu behalten und Shortcodes (und andere funktionsbezogene Dinge) trotzdem in Themes anzubieten, das erscheint mir wie eine unfaire Praxis, die Ihre Benutzer an Ihr Produkt fesselt. Ich weiß, dass die Grenze zwischen Visualisierung und Funktionalität manchmal sehr dünn ist, aber in den meisten Fällen ist der Unterschied nicht diskutierbar.
Entschuldigung für die lange Antwort, das ist ein Thema, das mich wirklich interessiert. Toller Beitrag 🙂
Hallo Andrés, keine Entschuldigung für die ausführliche Antwort nötig, du bringst einige großartige Punkte vor!
Danke dafür… Ich habe anhaltende Probleme mit Shortcodes in Themes, die ich gekauft habe. Und wenn ich sie neu thematisiere, habe ich überall Legacy-Code, der ersetzt werden muss.
Peter, das ist ein perfektes Beispiel für das Problem mit Shortcodes in Themes.
Es wird noch schlimmer, wenn andere nicht-präsentationale Funktionalitäten ebenfalls in ein Theme aufgenommen werden, vielleicht etwas, worüber wir in einem zukünftigen Beitrag sprechen können.