Für Menschen · Seien Sie begeistert und Sie werden begeistern !
Immer wieder kommt es zu Anfragen und Hilferufen auf meinem Blog. Oft werden nur kleine Funktionserweiterungen für die Seite gesucht. Die meisten gibt es schon, das Umfeld an WP-Plugins ist riesig und kaum noch zu überschauen. Trotzdem kommt es eben zu Wünschen und die sollte man mit Hilfe der Pluginschnittstelle realisieren. Natürlich könnte man auch die Core-Dateien von WP verändern, aber beim nächsten Update macht man es dann gegebenenfalls nochmal.
Um den Einsteiger und Leihen zum Thema Plugins erstellen unter WordPress einen kleinen Einstieg zu bieten, schreibe ich diesen Artikel. Ich hoffe, dass meine Schritte und die Überlegungen nachvollziehbar sind und wünsche mir, dass damit der Weg für den einen oder anderen ein wenig leichter fällt, seine Wunschfunktion in WP zu integrieren, denn ich halte WP für ein ausgeklügeltes und tolles Werkzeug, mit dem man eine Menger Spass im Netz haben kann.
Trotzdem die Bitte, ich bin auch nur leihe und betreibe WP als Hobby - damit gebe ich leine Garantie auf Vollständigkeit, Richtigkeit und 100%tige Funktionsfähigkeit.
Als Hinweis, während diese Zeilen entstehen, arbeite ich parallel an diesem Plugin um alle Schritte gleichzeitig zu machen und somit nicht allzuviel zu überspringen und gegebenenfalls Fehler und Probleme besser zu verstehen und zu erörten. Falls also dem einen oder anderen Fehler auffallen oder Fehler entdeckt werden, so freue ich mich über diesen Hinweis per eMail oder Kommentar. Außerdem wird der Artikel im Laufe der Zeit wachsen. Dieser soll nur den ersten Abschnitt einläuten und den Tutorialbeteiligten Zeit zum spielen geben. Also ein wenig Geduld, es geht weiter.
Über Feedback und Wünsche würde ich mich freuen.
Während diese Zeilen entstehen, ist mir aufgefallen, dass es bei potenziellen Anwendern Probleme mit Grundlagen zum Theme Plugin für WP gibt, so dass ich den Teil 0 vorgeschoben habe. Viel Spass damit.
Als Beispiel möchte folgende Idee aufgreifen, die ich mit einem lieben Leser "Enrique Bergemann" per eMail erörtert habe.
Wenn man sich den Quellcode eines Beitrags näher anschaut und dabei die SEO-Regeln im Hinterkopf hat, so fällt mehr oder weniger auf, dass die META-Description nicht sonderlich zum Inhalt des Beitrags passen. Hm - woran liegt das? Nun, die Ausgabe ist natürlich abhängig vom verwendeten Theme. Je nach Codierung des Themes sind diese Meta-Daten händisch gepflegt oder werden mit Hilfe des Tags bloginfo('description') ausgelesen. Diese Beschreibung wird über das Admin-Panel gepflegt, im Bereich Optionen --> Allgemein.
Ganz klar, dies kann nie zum jeweiligen Thema des Beitrags passen.
Die Überlegung ist nun so, dass wir für diese Funktion eine benutzerdefiniertes Feld (en: Custom Fields) benutzen wollen und dieses mit dann im Header ausgeben. Dafür bringt WP an sich schon eine Funktion mit the_meta(), allerdings kenne ich keine Möglichkeit einzelne Schlüssel aus der Tabelle _postmeta, in der die Metaangaben hinterlegt werden, auszulesen. Die Funktion the_meta() gibt alle Felder in einer Liste aus. Dies wollen wir natürlich in unserem Fall nicht.
Außerdem eignet sich dieses Beispiel sehr gut, da die gewünschte Funktion außerhalb von the loop liegt und damit ist das Schreiben des Plugins ein wenig aufwändiger. Prinzipiell soll es aber rein zum Erlernen der Plugin-Schnittstelle dienen.
Nun werden einige schlaue Köpfe auf diverse Plugins hinweisen, die dieses Problem schon erkannt haben und Abhilfe schaffen. Das könnte ich jetzt hier auch tun, aber ich möchte ja anhand dieses Problems erklären, wie wir nun zu unserem ersten eigenen Plugin kommen. Außerdem bringen die meisten Plugins dann wieder derart viele Zusatzfunktionen und Einträge in der Datenbank mit sich, dass sich vielleicht die Entwicklung eines eigenen Plugins lohnt - und, nicht zu vergessen, der Spass daran etwas neues zu lernen.
Nun gut der Vorrede - es geht los.
Zuerst müssen wir uns in unserem Test-Blog einen Beitrag, oder Seite, einrichten die ein Benutzerdefiniertes Feld besitzt. In meinem Fall erstelle in also ein Feld mit Schlüssel (en: Key) description und Wert (en: Value) Test description.

Nun lasst das php-Plugin laufen, z.B. Exec-PHP, laufen und gebt dieses Feld schonmal im Beitrag mit aus, nur zum Überprüfen. Im weiteren Verlauf wird uns diese Überprüfung sich als sehr nützlich erweisen.
Meta-Ausgabe: <?php the_meta(); ?>
Schaut euch nun die Seite mit eurem Beitrag an. Wer die Funktion mit php eingebunden hat, bekommt nun den Schlüssel und Wert ausgegeben. In meinem Fall sieht es so aus.
Meta-Ausgabe:Nun wollen wir ja nur den Schlüssel description auslesen, dazu schauen wir uns mal die Funktion the_meta() an. Die findet man in der template-functions-post.php in wp-includes. Darin steht:
function the_meta() {
global $id, $post_meta_cache;
if ( $keys = get_post_custom_keys() ) {
echo "<ul class='post-meta'>\n";
foreach ( $keys as $key ) {
$values = array_map('trim', get_post_custom_values($key));
$value = implode($values,', ');
echo "<li><span class='post-meta-key'>$key:</span> $value</li>\n";
}
echo "</ul>\n";
}
}
Nach dem wir uns den Code nun zu Gemüte geführt haben, ist ersichtlich, die foreach-Schleife sorgt dafür dass alle vorhanden Schlüssel ($key) mit ihrem Wert ($value) ausgegeben werden.
Jetzt kommen wir zum Kern, ein Plugin erstellen. Im Editor unserer Wahl erzeugen wir eine neue php-Datei. In diese Datei kopieren wir den Code von the_meta(), denn alle notwendigen Eigenschaften sind schon dabei. Nun die Datei speichern, ich nenne sie fb_meta_description.php und sie beinhaltet folgenden Code. Aufpassen, den Namen der Funktion müssen wir ändern, denn es darf natürlich keinen Kollisionskonflikt geben. Deshalb nenne ich die Funktion nun fb_meta_description. Warum das alles und was noch so wichtig ist beim coden eines Plugins erwähnte ich bereits im Beitrag WP - Hinweise für das Schreiben eines WordPress-Plugins.
<?php
function fb_meta_description() {
global $id, $post_meta_cache;
if ( $keys = get_post_custom_keys() ) {
echo "<ul class='post-meta'>\n";
foreach ( $keys as $key ) {
$values = array_map('trim', get_post_custom_values($key));
$value = implode($values,', ');
echo "<li><span class='post-meta-key'>$key:</span> $value</li>\n";
}
echo "\n";
}
}
?>
Wenn ihr diese Datei in euren Plugin-Ordner (/wp-content/plugins) kopiert, dann ist dieses Plugin nicht für WP zu erkennen und damit auch nicht im Admin-Panel ersichtlich. Dazu müssen wir noch einige Kommentare hinzufügen, nach WP-Standard. Folgendes Beispiel zur Hilfe. Die letzten drei Zeilen sind optional, sie sind dazu da, damit das Plugin Installer (auch dazu hier mehr) unterstützt.
/*
Plugin Name: Meta Description
Plugin URI: http://bueltge.de/
Description: Benutzerdefiniertes Feld Description auslesen
Version: 1.0
Author: Frank Bueltge
Author URI: http://bueltge.de/
Update Server: http://bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/
Das Plugin sollte nun folgenden Code haben:
<?php
/*
Plugin Name: Meta Description
Plugin URI: http://bueltge.de/
Description: Benutzerdefiniertes Feld Description auslesen
Version: 1.0
Author: Frank Bueltge
Author URI: http://bueltge.de/
Update Server: http://bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/
function fb_meta_description() {
global $id, $post_meta_cache;
if ( $keys = get_post_custom_keys() ) {
echo "<ul class='post-meta'>\n";
foreach ( $keys as $key ) {
$values = array_map('trim', get_post_custom_values($key));
$value = implode($values,', ');
echo "<li><span class='post-meta-key'>$key:</span> $value</li>\n";
}
echo "\n";
}
}
?>
Testen wir das ganze, das Plugin in eurer Plugin-Verzeichnis (/wp-content/plugins) kopieren und im Admin-Panel aktivieren. In euren Beitrag zurück und dort noch ein wenig mehr php-Code hinzu bringen.
Meta-Ausgabe: <?php fb_meta_description(); ?>
Den Beitrag wieder ansehen, aktualisieren nicht vergessen, und siehe da, die selben Daten wie bei the_meta() - Logisch.
Nun wollten wir aber nur die Ausgabe des Schlüssels description. Dazu ändern wir den Code in unserem Plugin:
<?php
/*
Plugin Name: Meta Description
Plugin URI: http://bueltge.de/
Description: Benutzerdefiniertes Feld Description auslesen
Version: 1.0
Author: Frank Bueltge
Author URI: http://bueltge.de/
Update Server: http://bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/
function fb_meta_description() {
global $id, $post_meta_cache;
if ( $keys = get_post_custom_keys() ) {
foreach ( $keys as $key ) {
$values = array_map('trim', get_post_custom_values($key));
$value = implode($values,', ');
if ( $key == 'description' ) {
echo "$value";
}
}
}
}
?>
Download des Beispiels:
Download als phps-Datei: fb_meta_description_1.phps - 680 Byte
Test, Beitrag wieder mal aktualisieren und nun sollte nur noch der Wert des Schlüssels description ausgegeben werden - Test description
the loopSo weit so gut, bauen wir nun die php-Anweisung <?php fb_meta_description(); ?> in die header.php eures Themes ein. Das muss dann so im Header stehen:
<meta name="description" content="<?php echo fb_meta_description(); ?>" />
</meta>
Nun die Seite neu laden. Schaut euch den Quellcode an! Nun, der Bereich content enthält leider keinen Inhalt. Warum ? - wir befinden uns außerhalb von the loop und damit stehen uns nicht alle Informationen zur Verfügung. Um die Daten in den Meta-Tag zu bekommen, müssen wir eine weitere Funktion schreiben, oder die bestehende erweitern.
Ich bin urlaubsreif, ersticke in Arbeit und damit auch für die Leser des Weblogs nicht zu erreichen. Bitte geduldet euch ein wenig mit Supportanfragen.
Leider muss ich die Kommentarfunktion deaktivieren, ansonsten würde ich weiter in Arbeit ersticken oder die Anfragen nicht nach bestem Gewissen beantworten.
Vielen Dank für das Verständnis!
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 854 Beiträge, 15037 Kommentare in 14 Kategorien und 450 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet.
Design und Code ist unter Copyright
© 2001 - 2010 bueltge.de [by:ltge.de]
9. August 2006 um 13:51
Da den Beitrag hier (leider) noch niemand kommentiert hat: Chapeau ! - Frank hat sich (mal wieder) sehr viel Mühe gegeben. Selbst wenn man die der Beschreibung zugrunde liegende Funktion (Meta-Description und Meta-Keywords) auf diesem Wege nicht realisieren möchte, der Beitrag vermittelt Grundkenntnisse und Einblicke in die Funktionsweise der Wordpress-Schnittstelle.
"So weit so gut, mehr beim nächste Teil - wenn gewünscht ?" - Ja, bitte!
17. August 2006 um 23:59
Denn hau mal rein
24. August 2006 um 13:48
31. August 2006 um 23:39
Danke für den nächsten Teil!
18. November 2006 um 04:15
31. Januar 2007 um 11:23
15. Oktober 2007 um 14:22
4. Dezember 2007 um 21:37
5. Mai 2008 um 10:05
und wie bekomm ich nun das zeug in die metatags?
((
7. Mai 2008 um 10:58
@moep: Das Plugin holt die Daten aus den benutzerdefinierten Feldern. Der Text verdeutlicht es. Die Funktion des Plugins muss in den head des Themes.
24. Mai 2008 um 15:16
9. Januar 2010 um 10:28
ich bin leider völliger wordpress neuling, mit php hatte ich schon etwas zu tun. was hältst du von dieser kürzeren und schnelleren version der funktion:
function meta() {global $id, $post_meta_cache;
if ($keys=get_post_custom_values("description"))
echo $keys[0];
}
danke für dieses und deine anderen brillianten tutorials !
lg
gnarf
11. Januar 2010 um 13:10
@gnarf: jein; dein Code liest das Feld aus und gibt den ersten Schlüssel des Array zurück. Insofern wird es reichen, man muss aber Arrays verstehen und die Abfrage verkürzt lesen können. Einziger Hinweis: Variablen gehören nach WP Codex nach rechts, sonst alles OK.