it-swarm.com.de

Gemeinsame Funktionalität zwischen meinen eigenen Plugins

Ich habe gelesen, dass Sie beim Erstellen neuer Beitragstypen, beim Erstellen einer Einstellungsseite und beim Erstellen einer neuen Taxonomie ein Plugin erstellen sollten. Also habe ich das getan. Aber ich habe Funktionen, die in meinen Plugins verallgemeinert werden könnten oder identisch sind. Ein Beispiel hierfür ist die Funktion, die in der Datenbank gespeichert wird. Da alles in den globalen Bereich zu fallen scheint, sollte ich, wenn es so etwas in PHP gibt, ein weiteres Plugin mit gemeinsam genutzter Funktionalität erstellen oder gemeinsam genutzte Funktionalität in die functions.php-Datei einfügen?

4
ptf

1.

Zunächst einmal ist functions.php für Themen gedacht, die sich von Plugins unterscheiden.

In WordPress sollten Themen verwendet werden nur für die Präsentation, Plugin für die Funktionalität .

Wenn Sie möchten, können SieThemen für die Funktionalität verwenden, aber Sie sollten nicht. In der Tat sind Themes und Plugins nur PHP-Dateien, die zu einem bestimmten Zeitpunkt einer WordPress-Anfrage geladen werden. (WordPress lädt nur eine Datei, das heißt functions.php für Themes und die Haupt-Plugin-Datei für Plugins. Laden Sie alle anderen Dateien, die Sie benötigen, ganz nach Ihren Wünschen.).

Das Problem ist, dass Sie in WordPress eine unbegrenzte Anzahl von Plugins haben können, aber nur ein Thema. Wenn Sie also das Thema ändern möchten und über Funktionen für functions.php verfügen, verlieren Sie diese: In wenigen Worten ist es daher besser, Funktionen für Plugins zu verwenden und das Thema nur für Präsentationen zu verwenden.

2.

Ja, alles in WordPress Core ist im globalen Namespace und es gibt eine große Anzahl von globalen Variablen, aber das ist der Kern, niemand zwingt Sie, dieselben Regeln zu befolgen. Sie können Namespaces verwenden (wenn Ihre PHP-Version dies ist) 5.3+) und verwenden Sie auch keine globale Variable: Wenn WordPress Ihr Plugin lädt, lädt es eine PHP -Datei, sodass Sie alles tun können, was Ihre Version von PHP kann: if Sie möchten, dass Sie alle Funktionen selbst schreiben können, aber das macht keinen Sinn: Sie verwenden WordPress wegen all der Funktionen, die es bietet. Versuchen Sie also, Kernfunktionen klassen zu verwenden, wenn das, was Sie benötigen, vom Kern abgedeckt wird PHP Code, der das tut, was WordPress nicht tut. Um dies zu tun, können Sie alle PHP Techniken verwenden, die Sie kennen.

3.

Ich habe in Ihrer Frage gelesen

Ein Beispiel hierfür ist die Funktion, die in der Datenbank gespeichert wird

Ich weiß nicht, was Sie in der Datenbank speichern und warum, aber wenn Sie WordPress speichern müssen entity : post, taxonomy terms, meta, options, users, transient ... WordPress hat bereits Funktionen zum Speichern und alle aus der Datenbank abrufen, sodass keine benutzerdefinierten Funktionen dafür geschrieben werden müssen. Wenn Sie einige/- benutzerdefinierte Tabellen meinen, ja, wenn Sie möchten, können Sie Code schreiben, der abstrakt ist und die Erstellung und Bearbeitung benutzerdefinierter Tabellen erleichtert. In diesem Fall:

  • die Verwendung von benutzerdefinierten Tabellen in WordPress ist manchmal nützlich, aber wenn Ihre Anwendung zu viele benutzerdefinierte Tabellen benötigt, ist WordPress wahrscheinlich nicht die richtige Grundlage, da es sehr nette Frameworks gibt ( Symphony , Laravel , Sylex und mehr)
  • bevor Sie eine benutzerdefinierte Funktionalität schreiben, schauen Sie sich die riesigen verfügbaren WordPress-Plugins an. Möglicherweise gibt es eines, das bereits das tut, was Sie benötigen
  • wenn Sie eine benutzerdefinierte WordPress-Funktion schreiben, beachten Sie, dass es sich nicht um eine eigenständige Anwendung handelt. Sie wird in WordPress zusammen mit anderen Themen und Plugins verwendet. Um die Integrität der Anwendung zu gewährleisten, müssen Sie also einige Regeln für die Koexistenz befolgen. z.B Verwenden Sie den richtigen Haken für bestimmte Aufgaben. Oder, nur um etwas über die spezifische Aufgabe zu sagen, wenn Sie eine benutzerdefinierte Tabelle erstellen müssen, verwenden Sie db_delta
  • Erstellen Sie ein Plugin nur für eine Funktion. Ich halte es nicht für eine gute Idee: Um ein Plugin von einer anderen zu verwenden, sind einige kleine Anstrengungen erforderlich und es lohnt sich nicht für nur eine Funktion. Wenn es einige generische Funktionen gibt, die Sie in Ihren Plugins verwenden, können Sie ein Plugin erstellen, das sie alle enthält ...

4.

Sprechen Sie nun über das Extrahieren allgemeiner Funktionen von einem Plugin zu einem anderen. Ja, es ist machbar und, imho, es ist perfekt fair. Es gibt verschiedene Möglichkeiten:

4.1: erstelle einfach verschiedene Plugins und installiere sie alle

Wie bereits erwähnt, sind Plugins nur PHP-Dateien, die zu einem bestimmten Zeitpunkt während des Startvorgangs von WordPress mit require_once geladen werden. Wenn also 2 Plugins installiert sind, besteht kein Unterschied zwischen zwei Dateien, die sich im selben Plugin befinden und von Ihnen selbst geladen werden Dateien werden von WordPress geladen. Sicher können Sie nicht sagen, welche Datei zuerst und welche später geladen wird, aber dank WordPress-Hooks können Sie wissen, wann alle Plugins geladen sind, und können ab diesem Moment loslegen. Bevor Sie eine Funktion in einem anderen Plugin verwenden, müssen Sie sicherstellen, dass das Plugin/die Funktion verfügbar ist. Ein Proof-of-Concept-Code:

// plugin-one.php

namespace PluginOne

class Foo {
  function do_something () {
    return 'Foo!';
  }
}

// plugin-two.php

namespace PluginTwo

class Bar {
  function do_something ( PluginOne\Foo $foo ) {
     echo $foo->do_something();
  }
}

add_action('plugins_loaded', function() { 
  // when WordPress fires 'plugins_loaded' all plugin files are required
  // so we can check if the class PluginOne\Foo exists and use it
  if ( class_exists( 'PluginOne\Foo' ) ) {
    $bar = new Bar;
    $bar->do_something( new PluginOne\Foo );
  }
});

4.2: Komponist

Ich weiß nicht, ob Sie jemals von Composer gehört haben. Es ist ein Tool zum Verwalten von Abhängigkeiten.

Wenn Sie ein Plugin schreiben müssen, für das ein anderes Plugin erforderlich ist, fügen Sie einfach eine Zeile in die Datei composer.json ein, wenn beide Composer unterstützen.

Die Verwendung von Composer für Plugins ist nicht komplex, aber für eine Antwort hier zu komplex.

In den letzten Monaten ist das Interesse an Composer in der WordPress-Community gewachsen (in der PHP Community ist es vor einiger Zeit gewachsen), und jetzt finden Sie einige nützliche Ressourcen. Sehen Sie sich das an composer.rarst.net , eine Ressource, die von Rarst , einer dieser Site-Mods, geteilt wird.

6
gmazzap