In dieser Serie behandeln wir die wichtigsten Dinge, die Sie beim Entwickeln eines WordPress-Plugins oder eines WordPress-Designs beachten sollten.
Dieser Leitfaden soll eine Reihe von bewährten Methoden bereitstellen, die sowohl für Anfänger als auch für Experten geeignet sind, die mit WordPress arbeiten
Aber warte! Wenn Sie seit einiger Zeit WordPress-Plugins entwickeln, sollten Sie einen Blick darauf werfen, bevor Sie entscheiden, dass dieses Handbuch nicht für Sie bestimmt ist. Ich bin sicher, du wirst bekommen etwas davon. Schließlich haben wir alle etwas Einzigartiges zu bieten.
Die meisten Erklärungen dieser Serie gibt es bereits im Codex, aber ich weiß, dass er so viele Informationen enthält, dass es schwierig sein kann, wo er anfangen soll.
Heute behandeln wir folgende Themen:
Die Serie soll so klar wie möglich sein und sowohl gute als auch grundlegende Beispiele enthalten, um ein Gefühl dafür zu geben, wie bestimmte Dinge aussehen sollte Arbeit beim Schreiben von WordPress-spezifischem Code.
Beachten Sie, dass nicht alles obligatorisch ist, um ein Plugin zu schreiben. Wenn Sie jedoch gerade erst anfangen, beginnen Sie mit dem rechten Fuß?
Ich werde versuchen, diese Serien lesbar zu machen. Ich werde einige gute und schlechte Codebeispiele hinzufügen. Nicht alles, was hier erklärt wird, ist zwingend, um ein Plugin zu schreiben. Wenn Sie jedoch mit der Wordpress-Entwicklung beginnen, beginnen Sie mit dem richtigen Weg. Sobald es zur Gewohnheit wird, wird es schwierig, es falsch zu machen.
Persönlich ist dies einer meiner größten Fehler, wenn ich Plugins entwickle. Wenn Sie Werkzeuge für WordPress entwickeln, sollten Sie einfach den WordPress-Codierungsstandards folgen. Codierungsstandards helfen, die Lesbarkeit von Code zu verbessernundhilft, häufige Codierungsfehler zu vermeiden.
WordPress ist ein kollaboratives CMS und so einfach, wie jeder Code auf dieselbe Weise schreibt, ist das Lesen, Schreiben und Verwalten des Codes für jeden einfacher. Am Anfang kann es schwierig sein, den Codierstil zu ändern, mit dem Sie arbeiten, aber irgendwann werden Sie feststellen, dass er zur zweiten Natur wird und Ihr Code sauberer wird und viel einfacher zu lesen ist.
Im WordPress-Handbuch sind die Standards in die vier Hauptsprachen unterteilt
Nachfolgend zeige ich Ihnen einige einfache Beispiele für PHP-Brace-Styles, damit Sie sich ein Bild machen können.
if (Bedingung) action0 ($ var); if (Bedingung) Aktion1 (); elseif (Bedingung2) Aktion2a (); action2b ();
if (Bedingung) Aktion0 ($ var); if (Bedingung) Aktion1 (); elseif (Bedingung2) Aktion2a (); action2b ();
Das zweite Beispiel ist viel einfacher zu lesen, oder? Das Handbuch zu Coding Standards enthält zahlreiche Beispiele, die Ihnen helfen, Ihren Code sauberer zu machen. Es ist leicht zu verblüffen, wie etwas so einfaches wie ein paar Leerzeichen und Registerkarten die Lesbarkeit des Codes verbessern können.
Während ich diesen Artikel schrieb, kaufte ich ein Thema für einen Kunden und als ich etwas Code editierte, war ich schockiert, wie schwer es war, dies zu tun.
Das meine ich damit:
>"title =""> ';?> '; foreach ($ categories als $ tag) $ tag_link = get_category_link ($ tag-> term_id); $ titleColor = categorys_title_color ($ tag-> term_id, "category", false); echo ''. $ tag-> name. ''; Echo "";?>Ein bisschen gruselig, richtig? Nachdem ich einige Minuten mit diesem Code gearbeitet hatte, schickte ich eine E-Mail mit einem Link zum Coding Standards Book an den Autor.
Vermeiden von Kollisionen mit Funktionsnamen
Namenskollisionen treten auf, wenn eine Funktion denselben Namen hat wie eine bereits definierte Funktion. Wenn Sie beispielsweise in Ihrem Thema eine Funktion aufgerufen haben
get_the_post_terms ()
und du installierst ein Plugin, das eine Funktion mit demselben Namen hat, bekommst du etwa:Schwerwiegender Fehler: get_the_post_terms () kann nicht erneut deklariert werden (zuvor in… deklariert.Leider passieren sie viel häufiger als sie sollten. Die Sache ist, es ist leicht zu vermeiden.
Um dies zu vermeiden, haben wir Optionen:
1. Stellen Sie Ihre Funktionen vor
Wenn der Name Ihres Plugins beispielsweise "WordPress Cool Plugin" ist, können Sie ein
wcc_
Präfix in all Ihren Funktionen.Im obigen Beispiel wird also unser Funktionsname stehen
wcc_get_the_post_terms ()
Ich empfehle Ihnen auch, Ihrem CSS ein Präfix hinzuzufügen oder zumindest zu versuchen, es eindeutiger zu gestalten, um zu vermeiden, dass andere Plugins-Stile geändert werden
2. Packen Sie Ihre Funktionen in eine Klasse ein
Möglicherweise ist Ihr Plugin so einfach, dass keine Klasse erforderlich ist. Sie können jedoch trotzdem eine erstellen, um die Dinge zu organisieren. Ich mag es besonders, das Singleton-Muster zu verwenden, aber das folgende Beispiel enthält eine einfache Klasse mit einer statischen Methode.
Klasse Wcc_Mailer statische Funktion send ($ post_ID) $ friends = '[email protected]'; mail ($ friends, "New post!", "Check my new post in". get_permalink ($ post_ID)); return $ post_ID; add_action ('publish_post', array ('Wcc_Mailer', 'send'));Wie Sie in diesem Beispiel sehen können, habe ich nur meinen Klassennamen vorangestellt, aber meine Funktion ist einfach "send". Dieser Methodenname ist jetzt vor dem globalen Namespace geschützt und kann nicht direkt aufgerufen werden. Um es anzurufen, muss ich Folgendes tun:
Wcc_Mailer :: send ($ post_id);Code kommentieren
Die Kommentare des Codes sind der beste Freund des Entwicklers. Es ist möglicherweise nicht notwendig, jede einzelne Funktion oder Variable, die Sie erstellen, zu kommentieren, aber vertrauen Sie mir, wenn Ihr Code wächst, insbesondere wenn er Beiträge von anderen erhalten hat, kann es schwierig werden, genau zu wissen, was zu tun ist.
Wie bereits gesagt, ist WordPress ein kollaboratives CMS. Viele Entwickler prüfen Ihren Code und gehen mit etwas Hilfe auf den richtigen Weg.
Ich persönlich benutze PHPDoc sintax, um meine Funktionen zu kommentieren. Mit Sublime + Docblockr ist das wirklich einfach.
Mal sehen, wie Wordpress-Jungs das kommentieren
wp_mail ()
Funktion befindet sich inWP-Includes / pluggable.php
/ ** * E-Mail senden, ähnlich der von PHP * * Ein wahrer Rückgabewert bedeutet nicht automatisch, dass der Benutzer die * E-Mail erfolgreich erhalten hat. Es bedeutet nur, dass die verwendete Methode die Anforderung * fehlerfrei verarbeiten konnte. * * Wenn Sie die beiden Hooks "wp_mail_from" und "wp_mail_from_name" verwenden, können Sie einen * aus einer Adresse wie 'Name' erstellen'wenn beide eingestellt sind. Wenn * nur 'wp_mail_from' eingestellt ist, wird nur die E-Mail-Adresse ohne * Namen verwendet. * * Der Standardinhaltstyp ist 'text / plain', was die Verwendung von HTML nicht zulässt. * Sie können jedoch den Inhaltstyp der E-Mail mithilfe des Filters * 'wp_mail_content_type' festlegen. * * Der Standardzeichensatz basiert auf dem im Blog verwendeten Zeichensatz. Der Zeichensatz * kann mit dem Filter 'wp_mail_charset' festgelegt werden. * * @since 1.2.1 * * @uses PHPMailer * * @param Zeichenfolge | Array $ an Array oder durch Kommas getrennte Liste der E-Mail-Adressen, an die die Nachricht gesendet werden soll. * @param string $ subject E-Mail-Betreff * @param string $ message Nachrichteninhalt * @param string | array $ header Optional. Zusätzliche Header. * @param string | array $ attachments Optional. Anzuhängende Dateien * @return bool Ob der E-Mail-Inhalt erfolgreich gesendet wurde. * / function wp_mail ($ to, $ subject, $ message, $ headers = ", $ attachments = array ()) […] // Senden! e) return false Wie Sie sehen, beschreiben sie, was die Funktion bewirkt, welche Parameter benötigt werden und was sie zurückgeben wird.
Ziemlich selbsterklärend, richtig?
Kommentare dürfen nicht nur mit PHP verwendet werden. In HTML zum Beispiel verwende ich gerne
Am Ende großer Codeblöcke gehe ich nicht so leicht verloren.
Für CSS verwende ich Kommentare, um meinen Code in verschiedene Abschnitte aufzuteilen.
Zum Beispiel :
/ ********************* ALLGEMEINE STYLES ********************* / body font- Familie: Arial; Farbe: # 333; / ************************************************* ****************** H1, H2, H3, H4, H5 STYLES ************************* ********************************************* / h1, .h1 Schriftgröße: 2.5em; Zeilenhöhe: 1em; Schriftfamilie: $ vag-fett; / ******************** NAVIGATIONSSTILLE ********************** / nav color :rot [… ]Teilen Sie uns Ihre kommentierenden Tricks mit!
Sicherheitstipps
Sicherheit muss sehr ernst genommen werden! Wenn Sie ein Plugin oder ein Thema populär machen, vertrauen Sie mir, Sie möchten nicht der Täter tausender Websites sein, die gehackt werden. Wenn Sie denken, ich übertreibe, werfen Sie einen Blick auf die Checkmarx-Recherche von 2013 zu den Top 50 WordPress-Plugins.
Nun sehen wir einige Sicherheitstipps für die Entwicklung von WordPress:
XSS-Sicherheitslücken
Um XSS zu verhindern, müssen wir zwei Dinge tun. Bereinigen Sie die Dateneingabe und die Bereinigung der Ausgabedaten. Abhängig von den Daten und dem verwendeten Kontext gibt es mehrere Methoden zur Bereinigung. In der Regel müssen Sie keinen Eingabedaten vertrauen und nicht den Daten, die ausgegeben werden sollen.
Für Eingabedaten können Sie beispielsweise verwenden
sanitize_text_field ()
das prüft auf ungültiges UTF-8, Convert single < characters to entity, strip all tags, remove line breaks, tabs and extra white space and strip octets. Depending on the context you are, there are different functions that will help you out sanitizing your data.Dasselbe passiert, wenn Sie Ihre Daten ausgeben. Überprüfen Sie das folgende Beispiel, wie Sie einen Link ausgeben:
">
esc_url
lehnt ungültige URLs ab, beseitigt ungültige Zeichen und entfernt gefährliche Zeichen
esc_html
kodiert < > & "'bei der Ausgabe von HTML.Abhängig von den Daten, die Sie haben, stehen Ihnen verschiedene Funktionen zur Verfügung. Für JavaScript könnten Sie verwenden
esc_js
.Vergessen Sie nicht, neben der Desinfektion auch Ihr Datum zu bestätigen.
Verhindern Sie direkten Zugriff auf Ihre Dateien
Die meisten Hosts erlauben den direkten Zugriff auf Dateien. In Ihrem Plugin bedeutet dies, dass höchstwahrscheinlich einige PHP-Fehler auftreten werden, die für Angreifer wertvolle Informationen sind.
Ein sehr einfacher Code, um dies zu verhindern, den Sie auf Ihr Skript setzen können, ist:
// Beenden, wenn direkt darauf zugegriffen wird if (! Defined ('ABSPATH')) exit;Dies verhindert grundsätzlich die Ausführung des Skripts, wenn wir nicht über WordPress darauf zugreifen.
Entfernen Sie alle Warnhinweise und Hinweise
Nicht nur PHP-Fehler helfen Angreifern - Hinweise und Warnungen enthalten auch viele wertvolle Informationen. Jedes Plugin sollte im DEBUG-Modus codiert werden. Dies hilft auch, veraltete Funktionen Ihres Plugins abzufangen. Ermöglichen
DEBUGGEN
Modus einfach diese Zeile auf Ihrem suchenwp-config.php
und ändern Sie es inWAHR
.define (WP_DEBUG, true);Zusammen mit diesem sollten Sie das großartige Debug Bar-Plugin ausprobieren. Durch das Hinzufügen dieser anderen einfachen Zeile können Sie auch alle Datenbankabfragen analysieren.
define ('SAVEQUERIES', wahr);Verwenden Sie Nonce-Werte
Nonce-Werte stehen für einmal verwendete Zahlen und werden zum Schutz vor fälschungsübergreifenden Anforderungsfälschungen (CSRF) verwendet, dh unerwarteten oder doppelten Anforderungen, die unerwünschte dauerhafte oder irreversible Änderungen an der Website und insbesondere an deren Website verursachen können Datenbank. All dies kann von einem Angreifer oder einfach durch einen Fehler eines vertrauenswürdigen Benutzers ausgeführt werden.
Je nachdem, wo Sie die Nonce benötigen, können Sie sie auf verschiedene Arten erstellen:
Um es für einen Link zu verwenden, verwenden Sie
wp_nonce_url ()
$ complete_url = wp_nonce_url ($ bare_url, 'trash-post', 'my_nonce');Um es in einem Formular zu verwenden, verwenden Sie
wp_nonce_field ()
wp_nonce_field ('trash-post', 'my_nonce');Verwenden Sie zur Verwendung an einem anderen Ort
wp_create_nonce ()
wp_localize_script ('my-script', 'my-var-name', array ('nonce' => wp_create_nonce ('trash-post', 'my_nonce'));Wenn Sie mein Beispiel oben überprüfen, werden Sie sehen, wie ich es benutze
wp_localize_script
(worüber ich im nächsten Artikel sprechen werde), um meine Nonce in einen JavaScript-Codeblock aufzunehmen. Ich mache das, weil ich vorhabe, jQuery zu verwenden, um später eine AJAX-Anfrage auszuführen, und Sie sollten immer AceX-Aufrufe in Ihre AJAX-Aufrufe einschließen.Dann geben Sie in Ihrem Skript zur Bestätigung der Lücke den folgenden Code ein
if (! wp_verify_nonce ('trash_post', 'my_nonce')) die ('Busted!');Verwenden Sie WordPress-Funktionen und -Bibliotheken
Prüfen Sie immer, ob das, was Sie versuchen, mit den Kernfunktionen und -bibliotheken von WordPress möglich ist. Auf diese Weise sind Ihre Skripten weniger anfällig für Sicherheitslücken. Wenn einige auftreten, werden sie von den Hauptteilnehmern von WordPress korrigiert, und Sie müssen sich keine Sorgen machen, um alle Ihre Kunden zu kontaktieren.
Das bekannteste Beispiel hierfür ist die TimThumb-Bibliothek, die bis vor wenigen Jahren von Tausenden von Plugins und Themes verwendet wurde. Eines Tages, im Jahr 2011, wurde die Schwachstelle aufgedeckt. Seitdem können wir das eingebaute verwenden
add_image_size ()
Funktion für diesen Zweck.Andere gebräuchliche Funktionen werden in WordPress-Funktionen wie eingeschlossen
cURL
das kann leicht durch ersetzt werdenwp_remote_get
undwp_remote_post
Das wird nicht nur die Daten verschlüsseln, sondern auch Fallbacks anbieten, wenncURL
schlägt fehl.Ein anderes Beispiel wird die Verwendung von sein
get_template_part ()
anstatt diebenötigen()
oderumfassen()
PHP-Funktionen. Während sie im Wesentlichen gleich sind, weiß der vorherige bereits, wo sich das Design befindet, und sucht nach der angeforderten Datei in diesem Verzeichnis. Es wird keine Warnung oder ein schwerwiegender Fehler ausgegeben, wenn die angeforderte Datei nicht vorhanden ist Suche nach anderen geeigneten Dateien, wenn die angeforderte nicht gefunden wird und über untergeordnete Themen und übergeordnete Themen informiert ist.WordPress Core enthält viele Skripte, die wir in unseren Plugins oder Themes verwenden können. Schauen Sie also immer nach, bevor Sie neue Bibliotheken hinzufügen.
Was kommt als nächstes?
Ich hoffe, Sie haben aus diesem Artikel viel herausgeholt. Wie ich anfangs erwähnt habe, sind die meisten dieser Informationen bereits im Codex enthalten, der Ihre erste Station sein sollte, nachdem Sie mit Ihrem WordPress-Entwicklungsabenteuer angefangen haben.
Als ich vor ein paar Jahren mit WordPress begann, wünschte ich mir, ich hätte einen Leitfaden mit allen Informationen zusammen. Das ist der Hauptgrund, warum ich mich entschlossen habe, diese Serie zu schreiben.
Im nächsten Artikel werde ich die folgenden Themen erläutern:
- So fügen Sie JavaScript und Stylesheets in Ihr Plugin ein
- So verwenden Sie Ajax korrekt in WordPress
- Lassen Sie Ihre Benutzer Änderungen mit Hooks durchführen
Bitte zögern Sie nicht, Ihre Kommentare oder Vorschläge zu den beiden verbleibenden Artikeln dieser Serie zu hinterlassen.