Für eines meiner Wordpress-Designs sind einige Plugins von Drittanbietern erforderlich, um ordnungsgemäß ausgeführt zu werden.
Meistens habe ich Funktionen von Plugins von Drittanbietern mit bedingten Anweisungen wie aufgerufen
if(function_exist('plugin_function')) {
plugin_function() // do something
}
Angenommen, ich muss ausgiebig ein Plugin für viele Dateien meines Themas verwenden ... Ich möchte die Verwendung vieler IF-Bedingungen vermeiden ... gibt es eine geeignete Möglichkeit, die Installation eines bestimmten Plugins in WP zu verlangen oder sie sogar besser zu installieren Wenn sie fehlen, bevor das Thema aktiviert wird?
Vielen Dank
quelle
function_exists
, erhält ein normaler Benutzer einfach die Meldung, dass er das Plugin, auf das sich ein anderes Plugin stützt, nicht installiert hat. Das Problem ist, dass der Benutzer tatsächlich wird hat das Plugin installiert und dann einfach fragen , warum es doens't Arbeit . Oh, und ich werde dich dafür nicht herabstimmen.Dies würde zwar nicht verhindern, dass das Thema beschädigt wird, wenn das Plugin deaktiviert ist, aber ich würde mir diesen Artikel über das Plugin "Anzeigen eines Administratorhinweises für erforderliche Themen" ansehen. Ich war noch nie mit der Idee vertraut, dass ein Thema die Installation eines Plugins erzwingt , und daher scheint dies die nächstbeste Option zu sein.
Noch ein kurzer Gedanke: Ich habe das noch nie versucht, aber ich frage mich, ob Sie eine clevere Möglichkeit finden könnten, mehrere Haken in einer einzigen Bedingung unterzubringen. Vielleicht könnten Sie alle bedingten Funktionen in einer anderen Datei trennen und sie nur bei
if( function_exists( 'plugin_function' ) )
Rückgabe benötigentrue
(mit dem Verständnis, dass dies eine unvollständige Prüfung ist.quelle
Wenn Sie nur eine Plugin-Seite benötigen, dann gibt es
is_plugin_active()
. Wenn Sie es außerhalb benötigen, kopieren Sie die Kernfunktion besser in Ihr Thema und fügen Sie sie dann wieder ein:Die Bedingung vermeidet Fehler bei der doppelten Definition der Funktion.
quelle
if(function_exist('plugin_function'))
durchif(is_plugin_active('plugin-file.php'))
Hinweis: Diese Antwort dient nur dazu, die Diskussion zwischen @scribu und @kaiser zu vereinfachen. Mods: Bitte nicht löschen. Benutzer / Leser: Bitte stimmen Sie nicht ab. Wenn Sie der Diskussion folgen möchten, sehen Sie sich das Revisions- / Bearbeitungsprotokoll an. Wenn Sie an der Diskussion teilnehmen möchten, bearbeiten Sie die Antwort. Wenn die Diskussion ein Ergebnis hat, wird es als solches markiert. Danke.
Szenarien
Es gibt auch verschiedene Szenarien mit unterschiedlicher Gewichtung, bei denen möglicherweise eine Plugin-Abhängigkeit besteht. (Die Beispiele sind nur fiktiv). Das Wort "(übergeordnetes) Plugin" kann aus übergeordneter Sicht mit "Theme" ausgetauscht werden.
Im Folgenden versuche ich zu skizzieren, was passiert, wenn Sie das "andere" Plugin aktualisieren und die Prüfung nicht mehr funktioniert.
Prüfen
Es gibt drei Möglichkeiten, um zu prüfen, ob ein Plugin aktiv ist:
'active_plugins'
-?Wenn ich jetzt mein Internal Link Checker Plugin als Beispiel nehme , das keine öffentliche API bietet und nicht erweitert werden soll, sehe ich keinen Grund (als Autor), die Benennung interner Funktionen nicht nach Bedarf oder nur nach Belieben zu ändern . Wenn also jemand versuchen würde, dieses Plugin zu huckepack zu nehmen, würde das Zeug beim Update einfach kaputt gehen (abhängig von der Funktionalität und der engen Bündelung). Gleiches gilt für Dateinamen. Ich hätte keinen wirklichen Grund (abgesehen davon, dass das Plugin beim Update deaktiviert würde), den Dateinamen nicht zu ändern. Das einzige, was mich davon abhalten würde, den Ordnernamen zu ändern, ist, dass die Aktualisierungsprüfung und Benachrichtigung für den Dateinamen ausgeführt wird - sofern sie im offiziellen Repo gehostet wird.
Ich würde also sagen, vom schwächsten (leicht zu ändernden) zum härtesten (viel spricht gegen das Ändern) Teil eines (übergeordneten) Plugins wäre:
Funktionsordner »Hauptdateiname»
Als ich sagte, dass eine Funktionsprüfung weniger fragil ist als die Verwendung, nahm
is_plugin_active()
ich an, dass die fragliche Funktion eine ist, die der Plugin-Autor ausdrücklich empfiehlt. Das ultimative Beispiel hierfür wäre daswp_pagenavi()
Template-Tag, das vom WP-PageNavi-Plugin angeboten wird.Die Schwierigkeit beim Definieren von Abhängigkeiten besteht darin, dass es keine Standardmethode gibt, um Plugins ohne Dateinamen eindeutig zu identifizieren.
Weitere Gedanken zu diesem Thema:
http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme
Ich denke, wir können es bisher in drei Punkten zusammenfassen:
Die (bisher) klügste Art, an die ich denken kann, die ich bereits in einigen (viel zu weniger) Plugins gesehen habe:
Ohne zu viel darüber nachzudenken, aber ich denke, Sie könnten Ihren Hinweis in eine Überprüfung des Filters "Alle" einbinden und im aktuellen Filter überprüfen , ob er ausgelöst wurde, als Sie am
shutdown
Haken waren ...?@scibu Dies war auf "Ihr" Thema ausgerichtet. (Ich habe schon aufgehört, über meine zu reden). :) :)
Wenn Sie also eine Abhängigkeit benötigen - und Sie haben einen netten Autor -, könnte er stattdessen einen Hook als Ersatz für ein Template-Tag anbieten. Weil sich das Plugin nur einhaken würde, wenn der Hook vorhanden wäre, oder einfach nichts tun würde. Und auf der anderen Seite hätten Sie keinen Fehler, wenn die Plugins nicht vorhanden wären.
Hier ist der schwierige Teil (oder eher ein Q): Um eine Administratorbenachrichtigung zu schreiben, um den Benutzer über die Abhängigkeit "Sie müssen» DisneyWonderLinks «installieren" zu informieren, können Sie die überprüfen
array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
. Ich bin mir nicht sicher, ob dies funktionieren würde, aber afaik sollte das Array auf beiden Seiten (public / admin) zugänglich sein.Das würde nicht funktionieren. Nur weil ein Rückruf für einen Hook registriert ist, bedeutet dies nicht, dass der Hook erwartungsgemäß ausgelöst wird. Das einzige, was irgendwie funktionieren würde, ist die Verwendung des "Shutdown" -Hakens, den Sie zuvor erwähnt haben:
Dies wird natürlich ganz unten nach dem
</html>
Tag im Front-End gedruckt (da dort normalerweise Vorlagen-Tags verwendet werden), was nicht sehr nützlich ist.Sie könnten versuchen, die Nachricht in wp_options zu speichern und sie dann im Admin-Bereich anzuzeigen, aber das würde eine ganz neue Dose Würmer öffnen: Ungültigmachung, Caching-Plugins usw.
quelle