it-swarm.com.de

Objektive Best Practices für die Plugin-Entwicklung?

Starten eines Community-Wikis zum Sammeln vonZielBest Practices für die Plugin-Entwicklung. Diese Frage wurde inspiriert von @ EAManns Kommentaren zu wp-Hackern .

Die Idee ist, gemeinsam an den objektiven Best Practices zu arbeiten, damit wir sie eventuell in einem Überprüfungsprozess für die Zusammenarbeit in der Community verwenden können.

UPDATE: Nachdem wir die ersten Antworten gesehen haben, wird klar, dass wir nur eine Idee/einen Vorschlag/eine bewährte Methode pro Antwort benötigen. Die Leute sollten die Liste überprüfen, um sicherzustellen, dass es vor dem Posten keine Duplikate gibt.

131
MikeSchinkel

Aktionen und Filter verwenden

Wenn Sie der Meinung sind, dass Personen einige Daten hinzufügen oder ändern möchten: Geben Sie apply_filters () an, bevor Sie zurückgeben.

P.S. Eine Sache finde ich ein bisschen enttäuschend und dass Ihre Fragenadressen der Prozentsatz der Plugins sind, die nur für Endbenutzer gedacht sind, d. H. Die keine eigenen Hooks haben. Stellen Sie sich vor, WordPress wäre wie die meisten Plugins gestaltet? Es wäre unflexibel und eine sehr Nischenlösung.

Vielleicht wäre es anders, wenn WordPress die Möglichkeit hätte, Plugins automatisch zu installieren, von denen andere Plugins abhängen? In der Regel muss ich einen Großteil der Funktionen, die ich benötige, von Grund auf neu schreiben, da die Clients bestimmte Anforderungen erfüllen und die verfügbaren Plugins zu 90% nicht die Flexibilität bieten, die verbleibenden 10% zu aktualisieren.

Ich wünsche mir wirklich, dass diejenigen, die die WordPress-Community anführen, einen Weg finden, um sicherzustellen, dass Plugins für das Befolgen von Best Practices (wie das Hinzufügen von Hooks für andere Entwickler) belohnt werden, ähnlich wie gute Antworten auf einer StackExchange-Site belohnt werden.

Nehmen wir ein Beispiel aus eine andere Frage :

Beispiel: Ich möchte etwas in meinem Plugin tun, wenn jemand einen Artikel retweetet. Wenn es einen benutzerdefinierten Hook in dem beliebten Retweet-Plugin geben würde, an den ich mich anschließen und von dem ich abfeuern könnte, wäre das großartig. Da dies nicht der Fall ist, kann ich das Plugin ändern, um es einzuschließen, aber das funktioniert nur für meine Kopie, und ich möchte nicht versuchen, das weiterzugeben.

Verbunden

69
Arlen Beiler

Laden Sie Skripte/CSS mit wp_enqueue_script und wp_enqueue_style

Plugins sollten keine doppelten Versionen von JS/CSS-Dateien laden/versuchen, insbesondere keine jQuery- und anderen JS-Dateien, die in WP Core enthalten sind.

Plugins sollten beim Verknüpfen von JS- und CSS-Dateien immer wp_enqueue_script und wp_enqueue_style verwenden und niemals direkt über <script>-Tags.

Verbunden

53
Rick Curran

I18n-Unterstützung

Alle Ausgabezeichenfolgen sollten mit einer geeigneten Textdomäne verknüpft werden, um die Internationalisierung durch interessierte Parteien zu ermöglichen, auch wenn der Entwickler kein Interesse daran hat, sein eigenes Plug-In zu übersetzen.

Beachten Sie, dass es sehr wichtig ist, die Sprachdateien während der Aktion init zu laden, damit sich der Benutzer an der Aktion beteiligen kann.

Siehe den Codex: I18n für WordPress-Entwickler

Und auch dieser Artikel: Lade WP Sprachdateien korrekt .

Seit WordPress 4.6+

In WP 4.6 wurden die Ladereihenfolge und die überprüften Speicherorte geändert, was Entwicklern und Benutzern die Arbeit erheblich erleichtert hat.

In Anbetracht eines Plugins mit einer Textdomäne 'my-plugin' sucht WordPress nun ZUERST nach einer Übersetzungsdatei in:
/wp-content/languages/plugins/my-plugin-en_US.mo

Wenn es dort keinen findet, sucht es dort, wo das Plugin es anweist (normalerweise im Ordner pluigns 'language', wenn es dem Codex folgt):
/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo

Wenn keine Sprachdatei gefunden wird, wird der Standardspeicherort von überprüft:
/wp-content/languages/my-plugin-en_US.mo

Die erste Prüfung wurde in 4.6 hinzugefügt und gibt den Benutzern einen definierten Ort zum Hinzufügen einer Sprachdatei, da sie, bevor sie wissen mussten, wo der Entwickler die Sprachdatei hinzugefügt hat, nur die Textdomäne des Plugins kennen müssen:/wp -content/languages ​​/ plugins/TEXTDOMAIN-LOCAL.mo


Unten ist der alte Weg (Nicht relevant seit WP 4.6+)

[...]
Abschließend möchte ich darauf hinweisen, dass es wichtig ist, benutzerdefinierte Benutzersprachdateien aus WP_LANG_DIR zu laden, bevor Sie die mit dem Plugin gelieferten Sprachdateien laden . Wenn mehrere Mo-Dateien für dieselbe Domain geladen werden, wird die zuerst gefundene Übersetzung verwendet. Auf diese Weise dienen die vom Plugin bereitgestellten Sprachdateien als Ersatz für Zeichenfolgen, die nicht vom Benutzer übersetzt wurden.

public function load_plugin_textdomain()
{
    $domain = 'my-plugin';
    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );

    load_textdomain( 
            $domain, 
            WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo' 
    );
    load_plugin_textdomain( 
            $domain, 
            FALSE, 
            dirname( plugin_basename(__FILE__) ) . '/languages/' 
    );
}
49
EAMann

Stellen Sie sicher, dass Plugins mit WP_DEBUG keine Fehler generieren

Testen Sie Ihre Plugins immer mit WP_DEBUG und lassen Sie sie idealerweise während Ihres gesamten Entwicklungsprozesses aktivieren. Ein Plugin sollte keine Fehler mit WP_DEBUG auslösen. Dies schließt veraltete Hinweise und ungeprüfte Indizes ein.

Um das Debuggen zu aktivieren, bearbeiten Sie Ihre wp-config.php-Datei so, dass die WP_DEBUG-Konstante auf true festgelegt ist. Weitere Informationen finden Sie im Codex on Debug .

47
John P Bloch

Verwenden Sie zunächst vorhandene Funktionen in WordPress Core

Wenn Sie: vorhandene Funktionen des WordPress-Kerns verwenden können , anstatt Ihre eigenen zu schreiben. Entwickeln Sie benutzerdefinierte PHP - Funktionen nur, wenn es in WordPress Core keine entsprechende bereits vorhandene Funktion gibt.

Ein Vorteil ist, dass Sie "veraltete Benachrichtigungen protokollieren" verwenden können, um Funktionen, die ersetzt werden sollten, einfach zu überwachen. Ein weiterer Vorteil ist, dass Benutzer die Funktionsdokumentation im Codex anzeigen und besser verstehen können, was das Plugin tut, auch wenn sie kein erfahrener PHP Entwickler sind.

Verbunden

41
kaiser

Bei der Deinstallation sollten alle Daten eines Plugins entfernt werden

Nach dem Entfernen von einer WordPress-Installation sollte ein Plugin alle Dateien, Ordner, Datenbankeinträge und Tabellen löschen die es erstellt hat, sowie die Optionswerte die es erstellt hat.

Plugins bieten möglicherweise eine Option zum Exportieren/Importieren von Einstellungen, sodass Einstellungen vor dem Löschen außerhalb von WordPress gespeichert werden können.

Verbunden

33

Verhindern Sie SQL Injection mit Eingabedaten

Ein Plugin sollte bereinigt alle Benutzereingaben, die direkt oder indirekt abgerufen wurden (z. B. über $_POST oder $_GET), bevor Eingabewerte zum Abfragen der MySQL-Datenbank verwendet werden.

Siehe: Formatieren von SQL-Anweisungen .

33
MikeSchinkel

Verwenden Sie einen klassen- und objektorientierten PHP5-Code

Es gibt keinen Grund, keinen sauberen, objektorientierten PHP5-Code zu schreiben. Die PHP4-Unterstützung wird nach dem nächsten Release (WP 3.1) eingestellt. Natürlich können Sie allen Funktionsnamen endlose_lange_Funktionsnamen_mit_Lots_of_underscores voranstellen, aber es ist viel einfacher, einfach eine einfache Klasse zu schreiben und alles darin zu bündeln. Fügen Sie Ihre Klasse außerdem in eine separate Datei ein und benennen Sie sie entsprechend, damit Sie sie problemlos erweitern und verwalten können:

// in functions.php
require 'inc/class-my-cool-plugin.php';
new MyCoolPlugin();

// in inc/class-my-cool-plugin.php
class MyCoolPlugin {
    function __construct() {
        // add filter hooks, wp_enqueue_script, etc.

        // To assign a method from your class to a WP 
        // function do something like this
        add_action('admin_menu', array($this, "admin"));
    }

    public function admin() {
        // public methods, for use outside of the class
        // Note that methods used in other WP functions 
        // (such as add_action) should be public
    }

    private function somethingelse() {
        // methods you only use inside this class
    }
}
30
Husky

Präfix Alle globalen Namespace-Elemente

Ein Plugin sollte ALLEN globalen Namespace-Elementen (Konstanten, Funktionen, Klassen, Variablen, sogar benutzerdefinierten Taxonomien, Beitragstypen, Widgets usw.) das richtige Präfix voranstellen. Erstellen Sie beispielsweise keine Funktion mit dem Namen init(). Nennen Sie es stattdessen so etwas wie jpb_init().

Normalerweise sollte ein Präfix mit drei oder vier Buchstaben vor dem Namen verwendet werden oder das PHP Namespace Feature verwendet werden. Vergleichen Sie: Präfix mit einem Buchstaben für PHP Klassenkonstanten?

Verbunden

29
John P Bloch

Die Deaktivierung sollte keinen Datenverlust hervorrufen

Ein Plugin sollte nicht löscht alle seine Daten beim Deaktivierung.

Verbunden

25
MikeSchinkel

Schließen Sie nur Dateien ein, die Sie benötigen ...

Wenn Sie sich im Front-End befinden, geben Sie keinen Code an, der sich auf den Administratorbereich bezieht.

23

Kündigen Sie Datenverlust bei der Deinstallation des Plugins an

Bei der Deinstallation ein Plugin sollte Fordern Sie einen Benutzer auf, seine Daten zu löschen und erhalten Sie eine Bestätigung, dass der Benutzer mit dem Löschen der Daten einverstanden ist, bevor Sie dies tun und ein Plugin sollte auch dem Benutzer die Möglichkeit geben, die Daten zu behalten bei der Deinstallation. (Diese Idee von @EAMann.)

Verbunden

21
MikeSchinkel

Verwenden Sie WordPress (eingebaut). Fehlerbehandlung

Nicht nur return;, wenn eine Benutzereingabe falsch war. Liefern Sie ihnen einige Informationen über wurde falsch gemacht.

function some_example_fn( $args = array() ) 
{
    // If value was not set, build an error message
    if ( ! isset( $args['some_value'] ) )
        $error = new WP_Error( 'some_value', sprintf( __( 'You have forgotten to specify the %1$s for your function. %2$s Error triggered inside %3$s on line %4$s.', TEXTDOMAIN ), '$args[\'some_value\']', "\n", __FILE__, __LINE__ ) );

    // die & print error message & code - for admins only!
    if ( isset( $error ) && is_wp_error( $error ) && current_user_can( 'manage_options' ) ) 
        wp_die( $error->get_error_code(), 'Theme Error: Missing Argument' );

    // Elseif no error was triggered continue...
}

Ein Fehler (Objekt) für alle

Sie können während des Bootstraps ein globales Fehlerobjekt für Ihr Theme oder Plugin einrichten:

function bootstrap_the_theme()
{
    global $prefix_error, $prefix_theme_name;
    // Take the theme name as error ID:
    $theme_data = wp_get_theme();
    $prefix_theme_name = $theme_data->Name;
    $prefix_error = new WP_Error( $theme_data->Name );

    include // whatever, etc...
}
add_action( 'after_setup_theme', 'bootstrap_the_theme' );

Später können Sie unbegrenzt viele Fehler hinzufügen:

function some_theme_fn( $args )
{
    global $prefix_error, $prefix_theme_name;
    $theme_data = wp_get_theme();
    if ( ! $args['whatever'] && current_user_can( 'manage_options' ) ) // some required value not set
        $prefix_error->add( $prefix_theme_name, sprintf( 'The function %1$s needs the argument %2$s set.', __FUNCTION__, '$args[\'whatever\']' ) );

    // continue function...
}

Dann können Sie sie alle am Ende Ihres Themas abrufen. Auf diese Weise unterbrechen Sie nicht das Rendern der Seite und können trotzdem alle Ihre Fehler für die Entwicklung ausgeben

function dump_theme_errors()
{
    global $prefix_error, $prefix_theme_name;

    // Not an admin? OR: No error(s)?
    if ( ! current_user_can( 'manage_options' ) ! is_wp_error( $prefix_error ) )
        return;

    $theme_errors = $prefix_error->get_error_messages( $prefix_theme_name );
    echo '<h3>Theme Errors</h3>';
    foreach ( $theme_errors as $error )
        echo "{$error}\n";
}
add_action( 'shutdown', 'dump_theme_errors' );

Weitere Informationen finden Sie unter this Q . Von dort aus wird ein entsprechendes Ticket zur Behebung des "Zusammenwirkens" von WP_Error und wp_die() verknüpft. Ein weiteres Ticket wird folgen. Kommentare, Kritik & so wird geschätzt.

19
kaiser

Lassen Sie den Ordnernamen des Plugins ändern

/ plugins/pluginname/{various}

Der für den Ordner verwendete "Pluginname" sollte immer änderbar sein.

Dies geschieht normalerweise durch die Definition von Konstanten und deren konsequente Verwendung im gesamten Plugin.

Unnötig zu erwähnen, dass viele beliebte Plugins Sünder sind.

Verbunden:

  • plugins_url() zum einfachen Verknüpfen mit Ressourcen, die im Plugin enthalten sind.
19
AndyBeard

Dem globalen Namespace hinzugefügte Namen minimieren

Ein Plugin sollte reduziert seine Auswirkungen so weit wie möglich durch minimiert die Anzahl der Namen, die es zum globalen Namespace hinzufügt .

Dies kann erreicht werden, indem die Funktionen des Plugins in eine Klasse eingekapselt werden oder indem die PHP Namespaces-Funktion verwendet wird. Das Präfixieren von allem kann ebenfalls helfen, ist aber nicht so flexibel.

Neben Funktionen und Klassen führt ein Plugin sollte nicht globale Variablen ein. Die Verwendung von Klassen macht diese normalerweise überflüssig und vereinfacht die Plugin-Wartung.

Verbunden

18
hakre

Kommentar mit PhpDoc

Best Practice kommt dem PhpDoc-Stil nahe. Wenn Sie kein IDE wie "Eclipse" verwenden, können Sie einfach einen Blick darauf werfen im PhpDoc-Handbuch .

Sie müssen nicht genau wissen, wie das funktioniert. Professionelle Entwickler können den Code trotzdem lesen und benötigen ihn nur als Zusammenfassung. Hobby-Programmierer und -Nutzer werden es vielleicht zu schätzen wissen, wie Sie es auf derselben Wissensstufe erklären.

17
kaiser

Verwenden Sie die Einstellungs-API vor add_option

Anstatt der Datenbank Optionen über die Funktion add_option hinzuzufügen, sollten Sie diese mit der API Settings , die alles für Sie erledigt, als Array speichern.

Verwenden Sie die API für Designänderungen, bevor Sie add_option ausführen

Die Modifications API ist ein ziemlich einfaches Konstrukt und eine sichere Methode, mit der Optionen hinzugefügt und abgerufen werden können. Alles wird als serialisierter Wert in Ihrer Datenbank gespeichert. Einfach, sicher und einfach.

17
kaiser

Schützen Sie die Privatsphäre der Plug-in-Benutzer

(Vorher: Anonyme API-Kommunikation)

Wenn ein Plug-in mit einem externen System oder einer externen API (z. B. einem Webservice) kommuniziert, sollte dies anonym erfolgen oder dem Benutzer eine anonyme Option zur Verfügung gestellt werden, mit der sichergestellt wird, dass keine Daten, die sich auf den Benutzer des Plug-ins beziehen, unkontrolliert an Dritte weitergegeben werden.

16
EAMann

Bereitstellen der Zugriffssteuerung mithilfe von Berechtigungen

In vielen Fällen möchten Benutzer möglicherweise nicht, dass jeder Zugriff auf Bereiche hat, die von Ihrem Plug-in erstellt wurden, insbesondere bei Plug-ins, die mehrere komplexe Vorgänge ausführen. Eine einzige Überprüfung der fest codierten Funktionen ist möglicherweise nicht ausreichend.

Lassen Sie sich zumindest die verschiedenen Verfahren, für die Ihr Plugin verwendet werden kann, auf ihre Leistungsfähigkeit prüfen.

15
eddiemoya

Host Plugins auf WordPress.org

Verwenden Sie das SVN repository auf WordPress.org zum Hosten von Plugins. Dies erleichtert das Aktualisieren der Benutzererfahrung und wenn Sie SVN noch nie zuvor verwendet haben, werden Sie in der Lage sein, es tatsächlich zu verstehen, indem Sie es in einem Kontext verwenden, der es rechtfertigt.

14
pixeline

Organisieren Sie Ihren Code

Es ist immer schwer, Code zu lesen, der nicht in der Reihenfolge geschrieben ist, in der er ausgeführt wird. Zuerst include/require, define, wp_enqueue_style & _script usw., dann die Funktionen, die das Plugin/Theme benötigt, und zuletzt der Builder (zB Admin-Bildschirm, in das Theme integrierbares Material usw.).

Versuchen Sie, Dinge wie CSS und JS in ihren eigenen Ordnern zu trennen. Versuchen Sie dies auch mit Funktionen, die nur als Hilfsmittel dienen, wie z. B. Array-Reduzierungen und Ähnliches. Die "Haupt" -Datei so sauber und leicht lesbar wie möglich zu halten, hilft Benutzern, Entwicklern und Ihnen, wenn Sie versuchen, in einem Jahr eine Aktualisierung durchzuführen und den Code längere Zeit nicht mehr gesehen haben.

Es ist auch gut, eine Struktur zu haben, die Sie oft wiederholen, damit Sie immer den richtigen Weg finden. Das Entwickeln einer bekannten Struktur für verschiedene Projekte gibt Ihnen Zeit, um sie zu verbessern, und selbst wenn Ihr Kunde zu einem anderen Entwickler wechselt, werden Sie nie hören, dass "er ein Chaos hinterlassen hat". Dies stärkt Ihren Ruf und sollte ein langfristiges Ziel sein.

12
kaiser

Plugin-Einstellungen importieren/exportieren

Es ist bei Plugins nicht so verbreitet, aber wenn Ihr Plugin (einige) Einstellungen hat, wird es sollte Import/Export von Daten wie Konfiguration und Benutzereingaben bereitstellen.

Import/Export verbessert die Benutzerfreundlichkeit eines Plugins.

Ein Beispiel-Plugin mit einer solchen Import- und Exportfunktion (und einem entsprechenden Rückgängig-Mechanismus) ist Breadcrumb NavXT (Wordpress-Plugin) (vollständige Offenlegung: ein kleiner Code von mir, der größte Teil wurde von mtekk erstellt) .

Verbunden

12
hakre

Stirb mit Stil

auf anständige Weise sterben Alle Plugins (und sogar Themes) sollten wp_die() an kritischen Stellen verwenden, um dem Benutzer ein wenig Information darüber zu geben, was passiert ist. PHP-Fehler sind ärgerlich und wp_die kann dem Benutzer eine nette Nachricht darüber geben, was das Plugin (oder sie) falsch gemacht hat. Wenn der Benutzer das Debuggen deaktiviert hat, bricht das Plugin einfach ab.

Die Verwendung von wp_die() hilft auch dabei, dass Ihre Plugins/Themes mit der wordpress testsuite kompatibel sind.

11
kaiser

Stellen Sie Hilfebildschirme für Benutzer bereit

Es ist schöner, RTFM (auf Hilfe klicken) als Antwort zu sagen, als die Frage immer wieder beantworten zu müssen.

/**
  * Add contextual help for this screen
  * 
  * @param $rtfm
  * @uses get_current_screen
  */ 
  function ContextualHelp( /*string*/ $rtfm) 
  { 
     $current_screen = get_current_screen();
     if ($current_screen->id == $this->_pageid) 
     {
        $rtfm .= '<h3>The WordPress Plugin - Screen A</h3>';
        $rtfm .= '<p>Here are some tips: donate to me ' .
     }
     return $rtfm; 
  }
add_action('contextual_help', array($this,'ContextualHelp'),1,1);

update/note: (siehe Kommentare von kaiser): das obige Beispiel soll in einer Klasse verwendet werden

11
edelwater

Angebot erweiterbarer Formulare

Wenn ein Plugin die Möglichkeit bietet, Daten einzugeben, sollte es immer einen Haken am Ende haben, kurz vor der Schaltfläche "Senden" und/oder "Zurücksetzen", damit Entwickler das Formular problemlos nicht nur mit Feldern, sondern auch mit Schaltflächen erweitern können.

Siehe: Einstellungen API

Verbunden

10
kaiser

funktion immer über Hook einbinden, nicht direkt.

Beispiel:

  • Verwenden Sie nicht für die Klasse des Plugins via new without hook

  • Verwenden Sie den Hook plugins_loaded

    // add the class to WP                                   
    function my_plugin_start() {                                                               
        new my_plugin();   
    }                                                        
    add_action( 'plugins_loaded', 'my_plugin_start' );
    

Update: ein kleines Live-Beispiel: Plugin-Svn-Trunk-Seite und ein Pseudo-Beispiel

//avoid direct calls to this file where wp core files not present
if (!function_exists ('add_action')) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
}

if ( !class_exists( 'plugin_class' ) ) {
    class plugin_class {

        function __construct() {
        }

    } // end class

    function plugin_start() {

        new plugin_class();
    }

    add_action( 'plugins_loaded', 'plugin_start' );
} // end class_exists

Sie können auch über mu_plugins_loaded bei Multisite-Installation laden. Siehe den Codex als Referenz für die Aktion: http://codex.wordpress.org/Plugin_API/Action_Reference Auch hier sehen Sie, wie Sie wP mit diesem Hook einbinden: http://adambrown.info/p/wp_hooks/hook/plugins_loaded?version=2.1&file=wp-settings.php Ich benutze dies sehr oft und es ist nicht so schwer und früh, besser als eine harte neue Klasse ();

9
bueltge

Ihre Plugin-Beschreibung sollte die Funktionen Ihres Plugins genau beschreiben. Es gibt 10 vorgestellte Post-Plugins. Alle von ihnen zeigen vorgestellten Beiträge, aber viele haben unterschiedliche Funktionen. Es sollte einfach sein, Ihr Plugin mit ähnlichen Plugins zu vergleichen, indem Sie die Beschreibung lesen.

Sie sollten nicht damit angeben, wie einfach Ihr Plugin ist, es sei denn, es ist wirklich sehr einfach. Sie sollten nützliche Links in die Beschreibung aufnehmen, wie zB den Link zu den Einstellungen.

8
Greg

Lizenz-Plugins unter einer GPL-kompatiblen Lizenz

Plugins und Themes sollten unter einer WordPress-kompatiblen Lizenz lizenziert sein. Dies ermöglicht es ihnen, mit WordPress als "Programm" neu verteilt zu werden. Eine empfohlene Lizenz ist die GPL . Stellen Sie sicher, dass alle im Plug-In enthaltenen Codebibliotheken mit derselben Lizenz kompatibel sind.

(Dies war ein Problem und ernst Diskussionspunkt sowohl in der Vergangenheit als auch Gegenwart .)

8
EAMann

Minimieren Sie die Nebenwirkungen von Remote-Datenquellen und Webservices

Ein Plugin sollte Cache/Shield-Webservice und/oder XMLRPC/SOAP-Anforderungen über eine CachingDatenprovider-Ebene -/wenn Sie sie verwenden, um Front-Requests nicht warten zu lassen ( langsame) Webservice-Antwort.

Dies beinhaltet den Download von RSS-Feeds und anderen Seiten. Gestalten Sie Ihre Plugins so, dass sie Daten im Hintergrund abfragen.

Ein möglicher SCHRITT ist (Beispiel für das Posten auf ping.fm): Erstellen Sie eine Puffertabelle, sagen wir: ping_fm_buffer_post (Datum, Uhrzeit, Nachricht, Submitted_time, Status)

  1. Fügen Sie jedes Mal, wenn Sie ein Update an ping.fm senden möchten, dieses zu dieser Tabelle hinzu.
  2. Jetzt müssen wir ein Plugin erstellen, um diese Daten zu verarbeiten. Dieses Plugin wird über crontab ausgeführt, um nach jedem Update zu suchen, das noch nicht übermittelt wurde
  3. Da wir diese Tabelle haben, können wir auch jede an ping.fm übermittelte Nachricht auflisten und den Status jedes Beitrags überprüfen. Falls es ein Problem auf der Seite von ping.fm gibt, können wir es erneut einreichen.
7
hakre

Testen Sie Ihr Plugin

Wir sollten definitiv einige Testtools in unserer Plugin-Entwicklungsumgebung haben.

Basierend auf dieser Antwort von Ethan Seifert auf eine Testfrage, sind dies gute Praktiken, die befolgt werden sollten:

  • Ihr Unit-Test sollte das kleinste Verhalten testen, das eine Klasse ausführen kann.
  • Wenn Sie die Ebene der Funktionstests erreicht haben, können Sie hier Ihren Code mit Wordpress-Abhängigkeiten testen.
  • Abhängig davon, was Ihr Plugin macht - erwägen Sie die Verwendung von Selenium-basierten Tests, die mithilfe von IDs das Vorhandensein von Daten im DOM überprüfen
7
Fernando Briano

Verwenden Sie die richtigen Namen

Nennen Sie Hooks und Filter (Klassen, Funktionen und Variablen), damit die Leute sie auch in einem Jahr identifizieren können , wenn sie sich nicht mehr erinnern, woher dieses Stück Kuchen oder Code kommt. Es spielt keine Rolle, ob Hook-/Filternamen lang werden. Ex. IhrEinheitsname_Hook/Filter_Waswird gemacht.

  • Wenn Ihre Datei eine Klasse mit dem Namen "dbdbInit" enthält, sollte die Datei, die die Klasse enthält, den Namen "dbdbInit.class.php" haben.
  • Wenn Sie in Ihre dbdbInit- Klasse eine Funktion aufgenommen haben, die ex registriert. custom_post_types, dann nenne es register_custom_post_types().
  • Wenn Sie ein Array haben, das die Namen für custom_post_types enthält, rufen Sie die Variable auf, der das Array $custom_post_type_names zugewiesen ist.
  • Wenn Sie eine Funktion haben, die ein Array verarbeitet, schreiben Sie function array_handler( $array ) { // handle the array} ..
  • Versuchen Sie einfach, die Dinge so zu benennen, dass Sie wissen, was das Zeichen tut/wo es hingehört, und zwar anhand seines Namens.

Eine andere Sache: Wenn Sie Sachen debuggen müssen, erhalten Sie in 99% aller Fälle alle Ihre Nachrichten nicht nur für Ihren Code, sondern auch für WordPress. Versuchen Sie also, dasselbe Präfix ex zu verwenden. "dbdb" für Ihre Klassen, öffentlichen Funktionen und Variablen/Objekte. Auf diese Weise können Sie sie problemlos zwischen Hunderten von Dateien finden. (Wordpress lädt 64 Dateien vor Ihrem Theme und ca. 1.550 Funktionen, ohne Hooks und Filter.)

6
kaiser

Kümmere dich um zukünftige WordPress & Theme Versionen

Hinweis: Nachdem ich diesen Rat erneut gelesen habe, gehe ich jetzt von dieser Praxis zurück, da das Überprüfen jeder Funktion auf Existenz Ihre Site verlangsamen kann.

Überprüfe, ob Funktionen veraltet sind direkt in deinem Theme.

Dies ist ein "könnte so sein" Beispiel.

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'The function %1$s is deprecated. Please inform the author', TEXTDOMAIN ), "Theme: {$theme_data->Name}: Version {$theme_data->Version}" );

    // abort
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// else if no error - the function works and exists
wp_some_fn();

Informationen zur ordnungsgemäßen/bewährten Fehlerbehandlung finden Sie in folgender Antwort: link

Sie könnten sogar die $ cause in die Funktion eintragen. Auf diese Weise können Sie und Ihre Benutzer mit Funktionen oder Klassen in Ihrem Thema Schritt halten, die sich möglicherweise ändern.

6
kaiser

Verwenden Sie die Codierungsstandards von WordPress

http://codex.wordpress.org/WordPress_Coding_Standards

Sie wissen, wie viel einfacher es ist, den Code zu aktualisieren, an dem Sie gearbeitet haben, im Vergleich zu Code, den jemand anderes zusammengestellt hat? Codierungsstandards erleichtern Entwicklern, die an einem Projekt arbeiten, den Zugriff auf die aktuellen Entwicklungen.

Wir wissen, dass Ihr Plugin oder Thema Ihr eigenes ist, und die Art und Weise, wie Sie Ihre Zeilen durchbrechen und Ihre geschweiften Klammern hinzufügen, ist Ausdruck Ihrer Individualität. Jeder Gedankenstrich ist eine durchdachte Aussage. Aber mit Ihrem benutzerdefinierten Code tragen Sie zu WordPress bei, auch wenn sich Ihr Code nicht in der Kernanwendung befindet. Mithilfe von Codierungsstandards können Entwickler Ihren Code schnell auf den neuesten Stand bringen.

6
gabrielk

Abkoppeln vom WordPress-Kerncode

Ein Plugin sollte reduziert die Auswirkung der WordPress-API auf das erforderliche Minimum so trennt es den Plugin-Code vom WordPress-Code. Dies reduziert die Auswirkung von Änderungen in der WordPress-Codebasis auf das Plugin. Dies verbessert zusätzlich die versionsübergreifende Kompatibilität Ihres Plugin-Codes.

Dies bedeutet nicht, dass Sie keine WordPress-Funktionen verwenden (verwenden Sie diese, wie vorhandene Funktionen wiederverwenden vorschlägt), aber Ihren Code nicht zu sehr mit WordPress-Funktionen verzahnen, sondern die Geschäftslogik Ihrer Plugins trennen von der WordPress-Funktionalität.

6
hakre

Verwenden Sie die wp-Optionen für Plugin-Ausgabezeichenfolgen

Um das Plugin benutzerfreundlich und anpassbar zu machen, sollten alle Ausgabe-Strings modifizierbar sein. Verwenden Sie dazu am besten wp-options, um die Ausgabezeichenfolgen zu speichern und das Backend bereitzustellen, um die Standardwerte zu ändern. Das Plugin sollte keine angezeigten Zeichenfolgen verwenden, die mit dem Plugin-Backend nicht einfach geändert werden können.

Zum Beispiel: Gesellig - gibt Ihnen die Möglichkeit, den Satz zu ändern, der vor dem Symbolteil "Teilen und Genießen:" angezeigt wird.

5
hannit cohen

Benutze uninstall, aktiviere und deaktiviere Hooks

Hierfür gibt es drei verschiedene Haken:

  • register_uninstall_hook(); deinstallieren
  • Deaktivierung register_deactivation_hook();
  • Aktivierung register_activation_hook();

Eine detaillierte Anleitung mit einem Arbeitsbeispiel finden Sie hier. .

3
kaiser