So machen Sie ein WordPress-Plugin erweiterbar

Veröffentlicht: 2022-03-10
Kurze Zusammenfassung ↬ Gerade als Sie dachten, Sie hätten endlich ein Plugin gefunden, das alles kann, was Sie brauchen, gibt es immer noch eine winzige wichtige Sache, die es nicht kann. Finden Sie heraus, wie Sie Ihr Plugin erweiterbar machen und Kopfschmerzen reduzieren können.

Haben Sie jemals ein Plugin verwendet und sich gewünscht, dass es etwas anders macht? Vielleicht brauchten Sie etwas Einzigartiges, das den Rahmen der Einstellungsseite des Plugins sprengen würde.

Ich bin persönlich darauf gestoßen, und ich wette, Sie haben es auch. Wenn Sie ein WordPress-Plugin-Entwickler sind, ist dies höchstwahrscheinlich auch einigen Ihrer Benutzer bei der Verwendung Ihres Plugins begegnet.

Hier ist ein typisches Szenario: Sie haben endlich das Plugin gefunden, das alles tut, was Sie brauchen – bis auf eine winzige wichtige Sache. Es gibt keine Einstellung oder Option, um dieses winzige Ding zu aktivieren, also durchsuchen Sie die Dokumentation und stellen fest, dass Sie nichts dagegen tun können. Sie fordern die Funktion im Support-Forum des WordPress-Plugins an – aber keine Würfel. Am Ende deinstallieren Sie es und setzen Ihre Suche fort.

Stellen Sie sich vor, Sie wären der Entwickler dieses Plugins. Was würden Sie tun, wenn ein Benutzer nach einer bestimmten Funktionalität fragt?

Das Ideal wäre, es umzusetzen. Aber wenn das Feature für einen ganz speziellen Anwendungsfall wäre, wäre es unpraktisch, es hinzuzufügen. Es wäre nicht gut, eine Plugin-Einstellung zu haben, die nur 0,1 % Ihrer Benutzer verwenden würden.

Sie möchten nur Funktionen implementieren, die die Mehrheit Ihrer Benutzer betreffen. In Wirklichkeit nutzen 80 % der Benutzer 20 % der Funktionen (die 80/20-Regel). Stellen Sie also sicher, dass jede neue Funktion sehr gefragt ist und dass 80 % Ihrer Benutzer davon profitieren würden, bevor Sie sie implementieren. Wenn Sie für jede angeforderte Funktion eine Einstellung erstellen, wird Ihr Plugin kompliziert und aufgebläht – und das will niemand.

Am besten machen Sie das Plugin codemäßig erweiterbar, damit andere es für ihre eigenen Bedürfnisse erweitern oder modifizieren können.

In diesem Artikel erfahren Sie, warum es eine gute Idee ist, Ihr Plugin erweiterbar zu machen. Ich werde auch ein paar Tipps geben, wie ich gelernt habe, dies zu tun.

Mehr nach dem Sprung! Lesen Sie unten weiter ↓

Was macht ein Plugin erweiterbar?

Kurz gesagt bedeutet ein erweiterbares Plugin, dass es sich an den „O“-Teil der SOLID-Prinzipien der objektorientierten Programmierung hält – nämlich das Open/Closed-Prinzip.

Falls Sie mit dem Open/Closed-Prinzip nicht vertraut sind, bedeutet dies im Grunde, dass andere Personen Ihren Code nicht bearbeiten müssen, um etwas zu ändern .

Wenn man dieses Prinzip auf ein WordPress-Plugin anwendet, würde dies bedeuten, dass ein Plugin erweiterbar ist, wenn es Bestimmungen enthält, die es anderen ermöglichen, sein Verhalten zu ändern. Es ist genauso, wie WordPress es Leuten ermöglicht, sich in verschiedene Bereiche von WordPress „einzuklinken“, aber auf der Ebene des Plugins.

Ein typisches Beispiel für ein Plugin

Mal sehen, wie wir ein erweiterbares Plugin erstellen können, beginnend mit einem Beispiel-Plugin, das es nicht ist.

Angenommen, wir haben ein Plugin, das ein Seitenleisten-Widget generiert, das die Titel der drei letzten Posts anzeigt. Das Herzstück des Plugins ist eine Funktion, die einfach die Titel dieser drei Posts in Listen-Tags umschließt:

 function get_some_post_titles() { $args = array( 'posts_per_page' => 3, ); $posts = get_posts( $args ); $output = '
    '; foreach ( $posts als $post ) { $ausgabe .= '
  • ' . $post->post_title . '
  • '; } $ausgabe .= '
'; $Ausgabe zurückgeben; }

Während dieser Code funktioniert und die Arbeit erledigt, ist er nicht ganz erweiterbar.

Warum? Da die Funktion auf ihre eigene Weise festgelegt wird, gibt es keine Möglichkeit, ihr Verhalten zu ändern, ohne den Code direkt zu ändern.

Was ist, wenn ein Benutzer mehr als drei Posts anzeigen oder vielleicht Links zu den Titeln der Posts hinzufügen möchte? Mit dem obigen Code geht das nicht. Der Benutzer ist fest mit der Funktionsweise des Plugins verbunden und kann nichts daran ändern.

Das Einbeziehen von hundert Einstellungen ist nicht die Antwort

Es gibt eine Reihe von Möglichkeiten, das obige Plugin zu verbessern, damit Benutzer es anpassen können.

Eine solche Möglichkeit wäre, viele Optionen in den Einstellungen hinzuzufügen, aber selbst das erfüllt möglicherweise nicht alle Möglichkeiten, die Benutzer von dem Plugin erwarten würden.

Was wäre, wenn der Benutzer eines der folgenden Dinge tun wollte (Szenarien, auf die wir später zurückkommen):

  • Anzeige von WooCommerce-Produkten oder Beiträgen aus einer bestimmten Kategorie;
  • Zeigen Sie die Elemente in einem Karussell an, das von einem anderen Plugin bereitgestellt wird, anstatt als einfache Liste;
  • Führen Sie eine benutzerdefinierte Datenbankabfrage durch und verwenden Sie dann die Beiträge dieser Abfrage in der Liste.

Wenn wir unserem Widget hundert Einstellungen hinzufügen würden, könnten wir die oben genannten Anwendungsfälle abdecken. Was aber, wenn sich eines dieser Szenarien ändert und der Nutzer nun nur noch WooCommerce-Produkte anzeigen möchte, die gerade auf Lager sind? Das Widget würde noch mehr Einstellungen benötigen, um dies zu berücksichtigen. Ziemlich bald würden wir eine Unmenge von Einstellungen haben.

Außerdem ist ein Plugin mit einer riesigen Liste von Einstellungen nicht gerade benutzerfreundlich. Weichen Sie nach Möglichkeit von dieser Route ab.

Wie würden wir also vorgehen, um dieses Problem zu lösen? Wir würden das Plugin erweiterbar machen.

Hinzufügen unserer eigenen Hooks, um es erweiterbar zu machen

Wenn wir den obigen Code des Plugins studieren, sehen wir einige Operationen, die die Hauptfunktion ausführt:

  • Es ruft Beiträge mit get_posts .
  • Es generiert eine Liste von Beitragstiteln.
  • Es gibt die generierte Liste zurück.

Wenn andere Leute das Verhalten dieses Plugins ändern würden, würde ihre Arbeit höchstwahrscheinlich diese drei Operationen beinhalten. Um unser Plugin erweiterbar zu machen, müssten wir Hooks um diese herum hinzufügen, um sie für andere Entwickler zu öffnen.

Im Allgemeinen sind dies gute Bereiche, um Hooks zu einem Plugin hinzuzufügen:

  • um und in den Hauptprozessen,
  • beim Erstellen von Ausgabe-HTML,
  • zum Ändern von Post- oder Datenbankabfragen,
  • bevor Werte von einer Funktion zurückgegeben werden.

Ein typisches Beispiel für ein erweiterbares Plugin

Mit diesen Faustregeln können wir die folgenden Filter hinzufügen, um unser Plugin erweiterbar zu machen:

  • füge myplugin_get_posts_args hinzu, um die Argumente von get_posts zu ändern,
  • myplugin_get_posts hinzufügen, um die Ergebnisse von get_posts zu überschreiben,
  • fügen myplugin_list_item hinzu, um die Generierung eines Listeneintrags anzupassen,
  • fügen myplugin_get_some_post_titles hinzu, um die zurückgegebene generierte Liste zu überschreiben.

Hier ist noch einmal der Code mit allen hinzugefügten Hooks:

 function get_some_post_titles() { $args = array( 'posts_per_page' => 3, ); // Let other people modify the arguments. $posts = get_posts( apply_filters( 'myplugin_get_posts_args', $args ) ); // Let other people modify the post array, which will be used for display. $posts = apply_filters( 'myplugin_get_posts', $posts, $args ); $output = '
    '; foreach ( $posts als $post ) { // Lassen Sie andere den Listeneintrag ändern. $ausgabe .= '
  • ' . apply_filters( 'myplugin_list_item', $post->post_title, $post ) . '
  • '; } $ausgabe .= '
'; // Lassen Sie andere Leute unsere Ausgabeliste ändern. return apply_filters( 'myplugin_get_some_post_titles', $output, $args ); }

Sie können den obigen Code auch im GitHub-Archiv abrufen.

Ich füge hier viele Hooks hinzu, was unpraktisch erscheinen mag, weil der Beispielcode ziemlich einfach und klein ist, aber es veranschaulicht meinen Standpunkt: Durch das Hinzufügen von nur vier Hooks können andere Entwickler das Verhalten des Plugins jetzt auf alle möglichen Arten anpassen.

Namespace und Kontext für Hooks

Bevor Sie fortfahren, beachten Sie zwei wichtige Dinge zu den von uns implementierten Hooks:

  • Wir benennen die Hooks mit myplugin_ .
    Dadurch wird sichergestellt, dass der Name des Hooks nicht mit dem Hook eines anderen Plugins in Konflikt steht. Dies ist nur eine gute Übung, denn wenn ein anderer Haken mit demselben Namen aufgerufen wird, kann dies zu unerwünschten Effekten führen.
  • Wir übergeben auch einen Verweis auf $args in allen Hooks für den Kontext.
    Ich tue dies, damit andere, wenn sie diesen Filter verwenden, um etwas im Codefluss zu ändern, diesen $args Parameter als Referenz verwenden können, um eine Vorstellung davon zu bekommen, warum der Hook aufgerufen wurde, damit sie ihre Anpassungen entsprechend vornehmen können.

Die Wirkung unserer Haken

Erinnern Sie sich an die einzigartigen Szenarien, über die ich zuvor gesprochen habe? Lassen Sie uns diese noch einmal durchgehen und sehen, wie unsere Hooks sie möglich gemacht haben:

  • Wenn der Benutzer WooCommerce-Produkte oder Beiträge aus einer bestimmten Kategorie anzeigen möchte, kann er entweder den Filter myplugin_get_posts_args , um seine eigenen Argumente hinzuzufügen, wenn das Plugin Beiträge abfragt, oder er kann myplugin_get_posts verwenden, um die Beiträge vollständig mit seiner eigenen Liste zu überschreiben.
  • Wenn der Benutzer die Elemente in einem Karussell anzeigen möchte, das von einem anderen Plugin bereitgestellt wird , anstatt als einfache Liste, dann kann er die gesamte Ausgabe der Funktion mit myplugin_get_some_post_titles und stattdessen ein Karussell von dort ausgeben.
  • Wenn der Benutzer eine benutzerdefinierte Datenbankabfrage durchführen und dann die Posts dieser Abfrage in der Liste verwenden möchte, kann er ähnlich wie im ersten Szenario myplugin_get_posts verwenden, um seine eigene Datenbankabfrage zu verwenden und das Post-Array zu ändern.

Viel besser!

Ein kurzes Beispiel für die Verwendung unserer Filter

Entwickler können add_filter verwenden, um sich in unsere obigen Filter einzuklinken (oder add_action für Aktionen verwenden).

In unserem ersten obigen Szenario kann ein Entwickler einfach Folgendes tun, um WooCommerce-Produkte mit dem von uns erstellten myplugin_get_posts_args -Filter anzuzeigen:

 add_filter( 'myplugin_get_posts_args', 'show_only_woocommerce_products' ); function show_only_woocommerce_products( $args ) { $args['post_type'] = 'product'; return $args; }

Wir können auch Aktionshaken verwenden

Neben der Verwendung von apply_filters können wir auch do_action verwenden, um unseren Code erweiterbar zu machen. Der Unterschied zwischen den beiden besteht darin, dass der erste es anderen ermöglicht, eine Variable zu ändern, während der letztere es anderen ermöglicht, zusätzliche Funktionen in verschiedenen Teilen unseres Codes auszuführen.

Wenn wir Aktionen verwenden, legen wir im Wesentlichen den Ablauf des Plugins anderen Entwicklern offen und lassen sie andere Dinge gleichzeitig ausführen.

In unserem Beispiel ist es vielleicht nicht sinnvoll (weil wir nur einen Shortcode anzeigen), aber in anderen wäre es hilfreich. Bei einem erweiterbaren Backup-Plug-in könnten wir beispielsweise ein Plug-in erstellen, das die Backup-Datei auch auf einen Drittanbieterdienst wie Dropbox hochlädt.

"Toll! Aber warum sollte ich mich darum kümmern, mein Plugin erweiterbar zu machen?“

Nun, wenn Sie immer noch nicht von der Idee überzeugt sind, hier sind ein paar Gedanken dazu, warum es eine gute Idee ist, anderen Leuten zu erlauben, das Verhalten Ihres Plugins zu ändern.

Es eröffnet dem Plugin weitere Anpassungsmöglichkeiten

Jeder hat andere Bedürfnisse. Und es besteht eine große Chance, dass Ihr Plugin nicht alle erfüllt, noch können Sie sie vorhersehen. Das Öffnen Ihres Plugins, um Änderungen an Schlüsselbereichen des Verhaltens Ihres Plugins zu ermöglichen, kann Wunder bewirken.

Es ermöglicht Benutzern, Änderungen vorzunehmen, ohne den Code des Plugins zu berühren

Andere Entwickler werden nicht gezwungen, die Dateien Ihres Plugins direkt zu ändern. Dies ist ein großer Vorteil, da das direkte Ändern der Datei eines Plugins im Allgemeinen eine schlechte Praxis ist. Wenn das Plugin aktualisiert wird, werden alle Ihre Änderungen gelöscht.

Wenn wir unsere eigenen Hooks für andere Leute hinzufügen, können die Modifikationen des Plugins an einem externen Ort abgelegt werden – sagen wir, in einem anderen Plugin. Auf diese Weise wird das ursprüngliche Plugin überhaupt nicht berührt, und es kann frei aktualisiert werden, ohne etwas zu beschädigen, und alle Änderungen im anderen Plugin bleiben intakt.

Fazit

Erweiterbare Plugins sind wirklich großartig und geben uns Raum für viele Anpassungsmöglichkeiten. Wenn Sie Ihr Plugin erweiterbar machen, werden Ihre Benutzer und andere Entwickler Sie dafür lieben.

Schauen Sie sich Plugins wie WooCommerce, Easy Digital Downloads und ACF an. Diese Plugins sind erweiterbar, und Sie können dies leicht erkennen, da zahlreiche andere Plugins im Plugin-Verzeichnis von WordPress ihnen Funktionen hinzufügen. Sie bieten auch eine breite Palette von Aktions- und Filter-Hooks, die verschiedene Aspekte der Plugins modifizieren. Die Faustregeln, die ich oben aufgezählt habe, sind bei meinem Studium davon aufgetaucht.

Hier sind ein paar Tipps, um Ihr Plugin erweiterbar zu machen:

  • Beachten Sie das Open/Closed-Prinzip. Andere Personen sollten Ihren Code nicht bearbeiten müssen, um etwas zu ändern.
  • Um Ihr Plugin erweiterbar zu machen, fügen Sie an diesen Stellen Hooks hinzu:

    • um und in großen Prozessen,
    • beim Erstellen des Ausgabe-HTML,
    • zum Ändern von Post- oder Datenbankabfragen,
    • bevor Werte von einer Funktion zurückgegeben werden.

  • Benennen Sie die Namen Ihrer Hooks mit dem Namen Ihres Plugins, um Namenskonflikte zu vermeiden.
  • Versuchen Sie, andere Variablen zu übergeben, die sich auf den Hook beziehen, damit andere Leute einen Kontext davon bekommen, was im Hook passiert.
  • Vergessen Sie nicht, die Hooks Ihres Plugins zu dokumentieren, damit andere davon erfahren können.

Weiterführende Lektüre

Hier sind einige Ressourcen, wenn Sie mehr über das Erweitern von Plugins erfahren möchten:

  • So machen Sie Ihr WordPress-Plugin erweiterbar, GitHub
    Der gesamte Beispielcode in diesem Artikel.
  • „Nützliche Tipps für den Einstieg in WordPress Hooks“, Thomas Maier, Smashing Magazine
  • „Wie man ein WordPress-Plugin erstellt“, Daniel Pataki, Smashing Magazine
  • „Hooks“, Plugin-Handbuch, WordPress.org