German (Deutsch) translation by Valentina (you can also view the original English article)
WordPress ist die größte Blogging-Plattform, die heute im Internet verfügbar ist. und mit der offiziellen Veröffentlichung von Version drei gleich um die Ecke wird es nur noch größer. Daher werden wir in den nächsten eigenständigen Tuts die Vor- und Nachteile der Entwicklung von WordPress-Plugins kennenlernen, beginnend mit der Erstellung unseres ersten einfachen Plugins, "Simple Optimization".
Schritt 0 Bevor wir beginnen
In diesem Tutorial wird davon ausgegangen, dass Sie mindestens Anfänger mit PHP und der WordPress-Syntax vertraut sind. Obwohl wir alles behandeln werden, helfen Ihnen einige Kenntnisse im Voraus dabei, die Konzepte viel einfacher zu verstehen. Ich gehe auch davon aus, dass Sie ein WP-Blog-Setup haben ud bereit sind.
Schritt 1. Was unser Plugin macht
Der allererste Schritt beim Schreiben eines WP-Plugins besteht darin, alles zu bestimmen, was es tun soll. Da dies unser erstes Plugin ist, werden wir nichts zu drastisches tun. Lassen Sie uns etwas erstellen, das unseren Blog beschleunigt. Unsere Seiten werden schneller gerendert, und wir werden auch ein wenig SEO betreiben, um unseren Suchrang und unsere Auffindbarkeit zu verbessern.
"Erstellen Sie immer eine Liste der Aufgaben, die Ihr Plugin tatsächlich ausführen soll, bevor Sie Code schreiben!"
Entfernen Sie nutzlose Meta-Tags:
- "rsd_link" - Wirklich einfacher Erkennungslink
- "wlwmanifest_link" - Windows Live Writer-Link
- "wp_generator" - WordPress-Versionsnummer
Entfernen Sie unnötige Filter:
- "wptexturize" - Geschweifte Anführungszeichen
- "wp_filter_kses" - HTML in Benutzerprofilen
SEO:
- Fügen Sie Post-Tags als Schlüsselwörter in <head > ein
- Fügen Sie als Beschreibung einen Post-Auszug in <head > ein
Schritt 2. Grundsteinlegung
Navigieren Sie zunächst zu Ihrem Plugins-Ordner ("/wp-content/plugins/") und erstellen Sie einen neuen Ordner. Wir nennen unsere "einfache Optimierung". Als nächstes müssen wir in diesem Ordner zwei Dateien erstellen. Die erste ist die eigentliche Plugin-Datei (mit dem Namen "main.php") und die zweite ist die obligatorische README-Datei ("readme.txt"). Wir werden readme.txt vorerst leer lassen; Öffnen Sie also main.php in Ihrem bevorzugten Texteditor und kopieren Sie den folgenden Code.
<?php /* Plugin Name: Name Of The Plugin Plugin URI: https://URI_Of_Page_Describing_Plugin_and_Updates Description: A brief description of the Plugin. Version: The Plugin's Version Number, e.g.: 1.0 Author: Name Of The Plugin Author Author URI: http://URI_Of_The_Plugin_Author License: A "Slug" license name e.g. GPL2 . Any other notes about the plugin go here . */ ?>
Dieser Text ist das absolute Minimum, das erforderlich ist, damit ein Plugin im WordPress-Plugin-Verzeichnis angezeigt wird. Sie müssen natürlich jedes Teil nach Belieben füllen.
Schritt 3. Hinzufügen der Funktionen
Die ersten beiden Funktionen, die wir implementieren werden, sind auch die einfachsten. Standardmäßig fügt WordPress dem Abschnitt <head > Ihres Blogs mehrere Meta-Tags hinzu. Die einfache Tatsache ist jedoch, dass diese Meta-Tags überhaupt keinen Wert haben. Also werden wir WordPress einfach daran hindern, sie hinzuzufügen. Jedes Mal, wenn WordPress eine Aktion ausführt, wird sie entweder als Filter oder als Aktion bezeichnet, und wir können diese Filter und Aktionen entweder entfernen oder bearbeiten (eine Liste aller Filter finden Sie hier und alle Aktionen hier). In diesem Fall möchten wir die verschiedenen Aktionen entfernen, die diese Meta-Tags hinzufügen.
Dazu verwenden wir eine sehr einfache Funktion namens "remove_action ('action', 'function')". Diese Funktion entfernt die im zweiten Parameter deklarierte Funktion aus der Aktion, dem ersten Parameter.
// Clean up wp_head // Remove Really simple discovery link remove_action('wp_head', 'rsd_link'); // Remove Windows Live Writer link remove_action('wp_head', 'wlwmanifest_link'); // Remove the version number remove_action('wp_head', 'wp_generator');
Das gleiche genau gleiche Prinzip gilt für die beiden Filter, die wir entfernen werden:
// Remove curly quotes remove_filter('the_content', 'wptexturize'); remove_filter('comment_text', 'wptexturize'); // Allow HTML in user profiles remove_filter('pre_user_description', 'wp_filter_kses');
Schritt 4. SEO
Nachdem wir dieses Aufblähen beseitigt haben, stellen wir sicher, dass unser Blog über einige grundlegende SEO-Funktionen verfügt. Stellen Sie also sicher, dass wir Schlüsselwörter pro Seite haben, die dieser Seite entsprechen, und ändern Sie die Beschreibung, um sie besser an den Artikel anzupassen. Für unsere Keywords greifen wir auf die Tags der aktuellen Seite/des aktuellen Beitrags zu. Dies wird durch die Funktion "wp_get_post_tags()" sehr einfach gemacht. wp_get_post_tags gibt ein Array von Tags aus dem aktuellen Beitrag zurück. Wir können dieses Array dann einfach in eine Zeichenfolge formatieren und in unseren Header einfügen (innerhalb der Funktion "wp_head()", die jedes Thema bereits enthalten sollte), indem wir unsere Funktion an die Aktion wp_head anhängen.
Beginnen wir mit der Erstellung einer neuen Funktion, tags_to_keywords(), und innerhalb dieser Funktion schreiben wir eine einfache if-Anweisung, die überprüft, ob die aktuelle Seite ein einzelner Beitrag oder eine einzelne Seite ist (mithilfe der WP-Funktionen: is_single() und is_page()). Als Nächstes erstellen wir in dieser if-Anweisung eine Variable mit dem Namen $tags und setzen ihren Inhalt auf die Funktion wp_get_post_tags(). Damit diese Funktion funktioniert, müssen wir jedoch den Parameter "post_id" übergeben. Der einfachste Weg, dies zu erreichen, besteht darin, die WP-Variable $post zu globalisieren, die die Post-ID enthält ($post->ID, $post ist ein Objekt, weshalb wir seine Werte so nennen).
// SEO // add tags as keywords function tags_to_keywords(){ global $post; if(is_single() || is_page()){ $tags = wp_get_post_tags($post->ID); } }
Als Nächstes filtern wir mit einem foreach durch die $tags-Daten und erstellen ein neues Array mit nur den gewünschten Informationen ($tag_array). Anschließend implodieren wir das Array in eine Zeichenfolge und trennen jedes Element durch ein Komma und ein Leerzeichen ($tag_string) vom Array. Dann erstellen wir eine weitere if-Anweisung, die überprüft, ob $tag_string einen Wert hat (dh, haben wir Tags für den Beitrag), und wenn dies der Fall ist, wird der endgültige HTML-Code wiedergegeben.
function tags_to_keywords(){ global $post; if(is_single() || is_page()){ $tags = wp_get_post_tags($post->ID); foreach($tags as $tag){ $tag_array[] = $tag->name; } $tag_string = implode(', ',$tag_array); if($tag_string !== ''){ echo "<meta name='keywords' content='".$tag_string."' />\r\n"; } } }
Das Letzte, was wir jetzt tun müssen, ist, unsere neue Funktion mit der Aktion wp_head zu verknüpfen. Dazu rufen wir add_action('action', 'function') auf und übergeben ihm die Parameter "wp_head" und "tags_to_keywords" (in dieser Reihenfolge).
add_action('wp_head','tags_to_keywords');
Um unsere SEO weiter zu verbessern, werden wir unsere Beschreibungs-Metadaten ebenfalls zum Header hinzufügen, wobei wir dieselbe Methode wie die Schlüsselwörter verwenden. Sobald wir die if-Anweisung neu geschrieben haben, erstellen wir eine neue Variable $all_post_content und füllen sie mit der WP-Funktion wp_get_single_post() (und übergeben den Parameter $ post->ID). Dadurch erhalten wir ein Objekt, das alle Daten zu unserem Beitrag enthält. Mit dieser Variablen können wir eine Beschreibung mit dem tatsächlichen Inhalt des Beitrags erstellen, aber wir werden sie mit der Funktion substr ($excerpt) auf einhundert Zeichen kürzen. Und dann geben wir einfach den HTML-Code mit dem darin geschriebenen Auszug wieder. (Optional können Sie auch eine else-Anweisung hinzufügen und Ihre Blog-Beschreibung mit der Funktion get_bloginfo ('description') wiedergeben.)
// add except as description function excerpt_to_description(){ global $post; if(is_single() || is_page()){ $all_post_content = wp_get_single_post($post->ID); $excerpt = substr($all_post_content->post_content, 0, 100).' [...]'; echo "<meta name='description' content='".$excerpt."' />\r\n"; } else{ echo "<meta name='description' content='".get_bloginfo('description')."' />\r\n"; } } add_action('wp_head','excerpt_to_description');
Schritt 5. Optimieren der Datenbank
Die letzte Funktion für unser Plugin ist die Optimierung unserer Datenbanktabellen durch Entfernen von Overhead (nutzlose/überschüssige Daten in einer SQL-Tabelle, die durch Manipulieren der Datenbank erstellt wurde). Zunächst erstellen wir eine neue Funktion (optimize_database) und rufen darin die globale WPDB-Variable ($wpdb) auf. Auf diese Weise können wir mit der Datenbank interagieren, ohne unsere Authentifizierungsdetails erneut eingeben zu müssen. $wpdb verfügt über mehrere Methoden, mit denen Sie interagieren und Informationen aus der Datenbank abrufen können (Vollständige Liste hier). Wir werden jedoch nur eine verwenden, get_results. Wenn Sie get_results mit den Parametern "SHOW TABLES" und "ARRAY_A" verwenden, erhalten Sie ein assoziatives Array aller Tabellennamen in der Datenbank. An diesem Punkt können wir einen foreach verwenden, um jeden der Array-Werte zu durchlaufen (mithilfe von array_values, um den Tabellennamen zu erhalten, da er von der Funktion überlagert wird) und eine andere $wpdb-Methode verwenden, um den Optimierungsbefehl Abfrage auszuführen ("TABELLE OPTIMIEREN _____ ").
//Optimize Database function optimize_database(){ global $wpdb; $all_tables = $wpdb->get_results('SHOW TABLES',ARRAY_A); foreach ($all_tables as $tables){ $table = array_values($tables); $wpdb->query("OPTIMIZE TABLE ".$table[0]); } }
Während diese Funktion funktioniert, wird sie niemals ausgeführt, da WordPress keine Möglichkeit hat, sie auszuführen. Glücklicherweise hat WordPress eine Funktion namens cron, die Funktionen so plant, dass sie in bestimmten Intervallen (täglich, wöchentlich usw.) ausgeführt werden. Dies ist perfekt für uns, da wir unsere Datenbank häufig optimieren möchten. Um Cron zu verwenden, erstellen wir eine neue Funktion (simple_optimization_cron_on) und füllen sie mit einem weiteren Funktionsaufruf von wp_schedule_event(). Um zu arbeiten, benötigt wp_schedule_event drei Dinge: eine Ausführungszeit, ein Intervall zwischen den einzelnen Ausführungen und eine aufzurufende Funktion; Also übergeben wir ihm die Parameter: 'time()' (wir gehen davon aus, dass jedes Mal, wenn das Cron-Ereignis erstellt wird, ein guter Zeitpunkt ist, um die Funktion aufzurufen), 'daily', 'optimize_database' in dieser Reihenfolge.
function simple_optimization_cron_on(){ wp_schedule_event(time(), 'daily', 'optimize_database'); }
Großartig, jetzt wird unsere Funktion optimize_database zur WP-Cron-Liste hinzugefügt, oder wir würden die Funktion simple_optimization_cron_on aufrufen. Es ist wirklich unsicher und es ist eine schlechte Praxis, eigene Funktionen zum Hinzufügen von Ereignissen aufzurufen, da dies durch ein beliebiges Ereignissystem dazu führen kann, dass die Funktion mehrmals aufgerufen wird. WordPress hat zufällig eine Reihe spezifischer Hooks für Plugins, um dieses Problem zu lösen: register_activation_hook und register_deactivation_hook. Diese Funktionen werden aufgerufen, wenn ein Plugin aktiviert (aktiviert) und deaktiviert (deaktiviert) wird. Auf diese Weise kann unsere Cron-Funktion nur einmal hinzugefügt werden. Jetzt können wir das Cron-Ereignis entfernen, wenn das Plugin nicht mehr verwendet wird. Um zu funktionieren, benötigen diese Funktionen zwei Informationen: die URL zu der Datei mit den Aktivierungs- und Deaktivierungsfunktionen (99% der Zeit funktioniert "__FILE__" hier einwandfrei) und den Namen der Aktivierungs- und Deaktivierungsfunktion. Wir erstellen auch eine neue Funktion (simple_optimization_cron_off) und füllen sie mit einem Aufruf einer anderen Funktion (wp_clear_scheduled_hook ('optimize_database')), um unser Cron-Ereignis zu löschen.
function simple_optimization_cron_off(){ wp_clear_scheduled_hook('optimize_database'); } register_activation_hook(__FILE__,'simple_optimization_cron_on'); register_deactivation_hook(__FILE__,'simple_optimization_cron_off');
Schritt 6. ReadMe ausfüllen
Als letztes müssen wir für unser neues Plugin die Datei readme.txt ausfüllen. Die Datei readme.txt wird vom WordPress-Plugin-Verzeichnis verwendet, um alle Informationen anzuzeigen, die Sie zu Ihrem Plugin bereitstellen. Der beste Weg, um zu lernen, wie man eine effektive readme.txt-Datei schreibt, besteht darin, die Standardeinstellung von WP herunterzuladen und sie entsprechend Ihrem Plugin zu ändern. Da unsere so simpel war, habe ich persönlich Folgendes erreicht:
=== Simple Optimization === Contributors: Jonathan Wolfe Plugin link: http://net.tutsplus.com/ Tags: simple, optimization, keywords, tags, description, SEO, optimize, database Requires at least: 2.5.1 Tested up to: 2.9.2 Stable tag: trunk Silently adds several optimizing functions to the WordPress back-end to make your blog or site run faster. == Description == Simple Optimization adds several functions to WordPress that help trim the fat from the system and also clean up after itself a little bit all leading to a faster loading time for your blog or website. **Features** _Remove useless meta tags:_ * "rsd_link" - Really Simple Discovery Link * "wlwmanifest_link" - Windows Live Writer link * "wp_generator" - WordPress version number _Remove useless filters:_ * "wptexturize" - currly quotes * "wp_filter_kses" - HTML in user profiles _SEO:_ * Insert post tags into <head> as keywords _Routinely optimize the database_ == Installation == 1. Download, unzip and upload to your WordPress plugins directory 2. activate the plugin within you WordPress Administration
Das ist es!
Sie haben gerade erfolgreich Ihr erstes WordPress-Plugin geschrieben, das funktioniert und für das WP Plugins Directory bereit ist. Unterwegs lernten Sie Filter und Aktionen, die Verwendung globaler WP-Objekte, viel über die WordPress-Nomenklatur, die Interaktion mit der Datenbank, Cron-Ereignisse und Aktivierungs-/Deaktivierungs-Hooks. Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar und ich werde so schnell wie möglich antworten.
Der endgültige Code:
<?php /* Plugin Name: Simple Optimization Plugin URI: http://net.tutsplus.com Description: A super-simple plugin to improve your blog Version: 1.0 Author: Jonathan Wolfe Author URI: http://fire-studios.com License: GPL2 . This plugin written for NETTUTS at http://net.tutsplus.com . */ // Clean up wp_head // Remove Really simple discovery link remove_action('wp_head', 'rsd_link'); // Remove Windows Live Writer link remove_action('wp_head', 'wlwmanifest_link'); // Remove the version number remove_action('wp_head', 'wp_generator'); // Remove curly quotes remove_filter('the_content', 'wptexturize'); remove_filter('comment_text', 'wptexturize'); // Allow HTML in user profiles remove_filter('pre_user_description', 'wp_filter_kses'); // SEO // add tags as keywords function tags_to_keywords(){ global $post; // Get access to the $post object if(is_single() || is_page()){ // only run on posts or pages $tags = wp_get_post_tags($post->ID); // get post tags foreach($tags as $tag){ // loop through each tag $tag_array[] = $tag->name; // create new array with only tag names } $tag_string = implode(', ',$tag_array); // convert array into comma seperated string if($tag_string !== ''){ // it we have tags echo "<meta name='keywords' content='".$tag_string."' />\r\n"; // add meta tag to <head> } } } add_action('wp_head','tags_to_keywords'); // Add tags_to_keywords to wp_head function // add except as description function excerpt_to_description(){ global $post; // get access to the $post object if(is_single() || is_page()){ // only run on posts or pages $all_post_content = wp_get_single_post($post->ID); // get all content from the post/page $excerpt = substr($all_post_content->post_content, 0, 100).' [...]'; // get first 100 characters and append "[...]" to the end echo "<meta name='description' content='".$excerpt."' />\r\n"; // add meta tag to <head> } else{ // only run if not a post or page echo "<meta name='description' content='".get_bloginfo('description')."' />\r\n"; // add meta tag to <head> } } add_action('wp_head','excerpt_to_description'); // add excerpt_to_description to wp_head function //Optimize Database function optimize_database(){ global $wpdb; // get access to $wpdb object $all_tables = $wpdb->get_results('SHOW TABLES',ARRAY_A); // get all table names foreach ($all_tables as $tables){ // loop through every table name $table = array_values($tables); // get table name out of array $wpdb->query("OPTIMIZE TABLE ".$table[0]); // run the optimize SQL command on the table } } function simple_optimization_cron_on(){ wp_schedule_event(time(), 'daily', 'optimize_database'); // rdd optimize_database to wp cron events } function simple_optimization_cron_off(){ wp_clear_scheduled_hook('optimize_database'); // remove optimize_database from wp cron events } register_activation_hook(__FILE__,'simple_optimization_cron_on'); // run simple_optimization_cron_on at plugin activation register_deactivation_hook(__FILE__,'simple_optimization_cron_off'); // run simple_optimization_cron_off at plugin deactivation ?>