Sidebar
ein-/ausblenden

WordPress benutzerdefinerte Felder (Custom Fields)

Plugin für WordPress SEO

Anzeige

Das ich WordPress für ein flexible und mächtige Applikation halte, ist sicher bekannt. WordPress kann mehr als nur Weblogpublishing. In letzter Zeit kamen vermehrt Fragen bezüglich bestimmter Anwendungswünsche und ob man dafür ein Plugin kennt oder erstellen könnte.

Deshalb auch der Artikel hier. Es gibt innerhalb des Schreibens eines Beitrags/ Seite in WordPress die Möglichkeit benutzerdefinierte Felder anzulegen und mit Werten zu füllen. Mit diesen Werten und Feldern kann man arbeiten und eine Menge an Anforderungen lösen, „ohne Plugin”. Allerdings will ich eines nicht verschweigen, das einfache und unkomplizierte Auslesen eines Wertes zu einem Schlüssel funktioniert nur innerhalb des Loop. Deshalb dazu im Folgenden eine kleine, einfache Lösung zum Anpassen.

Custom Fields

Will man innerhalb des Loop einen Schlüssel auslesen, dann genügt folgender Syntax, innerhalb des Templates. Im ersten Beispiel wird der Link zu einem Bild zum Schlüssel image_des_beitrags gespeichert und nachfolgend mit HTML ausgegeben.


<?php $image = get_post_meta($post->ID, 'image_des_beitrags', true); ?>

<a href="<?php the_permalink() ?>"><img src="<?php echo $image; ?>" alt="<?php the_title(); ?>" /></a>

Will man nicht den kompletten Link als Wert speichern, kann man das natürlich anpassen. Denkbar ist beispielsweise, wenn die Bilder immer im uploads-Ordner von WordPress gespeichert werden, dass man nur den Bildnamen speichert und den Rest immer im Quellcode des Templates hat.


<?php $image = get_post_meta($post->ID, 'image_des_beitrags', true); ?>

<a href="<?php the_permalink() ?>"><img src="<?php get_option('siteurl'); ?>wp-content/uploads/<?php echo $image; ?>" alt="<?php the_title(); ?>" /></a>

Ähnliche Anwendungen kann man natürlich auch mit einer Reihe anderer Inhalte und Anforderungen machen.

Außerhalb des Loop

Möchte man aber an einzelne Felder außerhalb des Loop kommen, so reichen die mitgegebenen Mittel von WordPress nicht aus um ein einzelnes Feld auszulesen. Dazu empfehle ich das Ablegen eines kleinen Plugins, welches das jeweilige Feld ausliest und die Daten in einer Funktion übergibt. Die einfachste Form könnte beispielsweise wie folgt aussehen. Dieses nutze ich, um im PhotoBlogFB Theme die EXIF-Daten der Bilder auszulesen.

<?php
/*
Plugin Name: MetaKey
Plugin URI: http://bueltge.de/
Description: Benutzerdefiniertes Feld auslesen
Version: 1.0
Author: Frank Bueltge
Author URI: http://bueltge.de/
*/

// Meta-Key: image_des_beitrags
function fb_meta_image() {
	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 == 'image_des_beitrags' ) {
				return $value;
			}
		}
	}
}

?>

Entscheidend für die Funktion ist die Variable $key, die den Namen des Schlüssels übergeben bekommt und den Wert dann durch die Funktion übergibt.

$image = fb_meta_image();
if ($image != '') {
. . .
}

Der Wert wird im obigen Beispiel an die Variable $image übergeben und die prüfe ich dann, ob sie ungleich leer (ungleich !=) ist. Wenn sie nicht leer ist, dann soll weiteres damit gemacht werden.

Diesen Code legt man sich als php-Datei im Plugin-Verzeichnis von WordPress ab und aktiviert es. Danach steht die Funktion bereit und kann, wie im obigen kleinen Beispiel, genutzt werden.

Sollten keine Kenntnisse im Bereich Plugin vorhanden sein, so habe ich auf einem älteren Artikel schon mal die Funktion und die wichtigen Hintergründe für das Funktionieren von Plugins erläutert - WP - Tutorial, wir schreiben ein WordPress Plugin - Teil 1. Dort werden unter anderem die Kommentare im Code, wozu und warum, erklärt. Auch eine umfangreicher Version des vorgestellten Code entsteht dort, so dass man ein wenig flexibler ist, wenn es sich um mehrere benutzerdefinierte Felder handelt.

Weiterführende Links

29 Kommentare und 12 Trackbacks zu „WordPress benutzerdefinerte Felder (Custom Fields)“

  1. 1
    Pingback von Benutzerdefinierte Felder in WordPress | Frank Bürger
  2. 2
    Kommentar von Micha

    Hey Frank,
    sehr schöner Artikel!
    Ich liebe ebenfalls diese custom fields. Es ist unglaublich, was man damit anstellen kann. Die Sortierung der Baudenkmale nach Epoche ist auch mit custom fields und wp_list_pages gelöst.

  3. 3
    Kommentar von Micha

    Der Link in dem Kommentar ist etwas schlecht zu sehen ;)
    Liebe Grüße
    Micha

  4. 4
    Trackback von PIXELGANGSTER :: the daily DesignBlog
  5. 5
    Pingback von Philipp Paulus | Webdesign - Photography » Benutzerdefinierte Felder
  6. 6
    Kommentar von Jared

    sehr coole idee die benutzerdefinierten felder zu verwenden! hab die idee das erste mal bei micha gefunden und muss sagen WordPress ist mächtiger als man zuerst denkt.

    kann man so eigentlich auch ein eigenes (etwas grösseres) plugin schreiben? also was sich auf benutzerdefnierte felder bezieht? wenn ja, dann wäre da eventuell die möglichkeit gegeben zu taggen

  7. 7
    Kommentar von Frank Bültge

    @Micha: Ich denke, ein Beitrag darüber wäre toll.

    @Jared: Jeromeys Keywords war so aufgebaut, es wurden die Felder zum Taggen genutzt. Ist seit WP 2.3 aber nicht mehr notwendig und dementsprechend auch schneller in der DB.

  8. 8
    Kommentar von Micha

    @Frank, gute Idee :) Werd ich in den nächsten Tagen machen!

  9. 9
    Pingback von peuster.org » links for 2007-10-17
  10. 10
    Pingback von WordPress Pages nach meta_value sortieren - dynamicinternet
  11. 11
    Kommentar von Jakob

    Ich stimme ein, mit Custom Fields kann man so wahnsinnig viel machen, das wird dem Customizing geradezu gerecht.

    Ich habe mit einem Freund zusammen eine Website erstellt, die zu einem immens großen Teil auf den Custom Fields beruht (detaillierter zu sehen z.B. hier und besonders hier). In den letzten beiden Beispielen sind so gut wie alle Felder auf Custom Fields aufgebaut. Teilweise rufen wir die Values auch über arrays ab, was Such- und Sortierfunktionen helfen kann.

    Sehr hilfreich sind übrigens folgende Plugins: Get Gustom Field Values und Custom Field GUI

  12. 12
    Pingback von Benutzerdefinierte Felder in WordPress nutzen » Brandt Aktuell
  13. 13
    Kommentar von bigh

    Super Beitrag. Hat mir viel Zeit erspart! Danke!

  14. 14
    Pingback von links for 2008-04-13 | unblogged|Artikelverzeichnis
  15. 15
    Pingback von Ein Bild pro Post | Lionstarrs Linux Blog
  16. 16
    Pingback von Feldstudie.net .::. Mein erstes Wordpress-Plugin .::. AdSense, Plugin, Werbung, Wordpress
  17. 17
    Pingback von Serie: Blogs, die ich lese - Bueltge | Lionstarrs Linux Blog
  18. 18
    Kommentar von Michaela

    Hallo Frank,

    ich nutze das Plugin "Custom Field Images", es funktioniert auch wunderbar. Leider erscheint der Text dann unterhalb des Bildes anstatt daneben.

    Seit WordPress 2.6 kann ich auch manuell eingefügte Bilder nicht mehr bearbeiten… bei rechtem Mouseklick und “edit” öffnet sich in allen Blogs die 404 Seite.

    Auch kann ich bei diesen manuell eingefügten Bildern in den Posts den Text nicht mehr neben den Bildern einfügen, er erscheint auch hier immer unter den Bildern. Vor WordPress 2.6 klappte alles einwandfrei. Hast Du einen Tipp?

    Danke Michaela

  19. 19
    Kommentar von Frank Bültge

    @Michaela: Sorry nein, kann allerdings deinen Angaben auch nicht folgen. Weis also nicht, was und wie dein Problem aussieht. Kenne aber das Plugin auch nicht, so dass ich es nicht nachvollziehen kann.

  20. 20
    Pingback von Wordpress benutzerdefinierte Felder : Webdesign & Programmierung Halle - Leipzig
  21. 21
    Pingback von Links vom 02. Dezember 2008-Der wilde Garten
  22. 22
    Kommentar von Mark Henckel

    Sehr gut. Vielen Dank! Sehr Gute Arbeit!

  23. 23
    Kommentar von Torsten Wenzel

    Ja, die Custom Fields sind schon eine nette Sache. Wir nutzen diese auch für diverse Zusatzfeatures auf unserem Magazin.

  24. 24
    Kommentar von Aneas

    image_des_beitrags

    Der Beitrag geht irgendwie an mir vorbei... Ich kapier den einfach nicht.
    Ichhabe eine Möglichkeit gesucht, wie ich in der Übersicht der Artikel im Blog ein thumbnail einsetzten kann. Ao dass man neben der Einleitung auch etwas visuelles hat ...

    Aber das scheint dann hier nicht der richtige Beitrag zu sein ... Was kann man denn nun mit dem machen was du hier vorstellst ??

  25. 25
    Kommentar von Frank Bültge

    @Aneas: ich habe einen Beitrag in Arbeit, der genau das erklärt, da WordPress aus meiner Sicht bessere Lösungen dafür bereit hält, als die Custom Fields, kommt hoffentlich in den nächsten Tagen.

  26. 26
    Kommentar von Carsten Tauber

    Wer komfortabel mit benutzerdefinierten Feldern arbeiten möchte (eindeutige Beschreibung und z.B. Uploadfunktion mit Verknüpfung zu Custom Fields) und Plugins gegenüber nicht negativ eingestellt ist, der kann sich das WordPress Plugin Flutter einmal ansehen: http://flutter.freshout.us

    Ich hatte dazu auch mal ein Demovideo sowie deutsche Übersetzung erstellt: http://great-solution.de/wordpress/screencast-wordpress-flutter-alias-fresh-page/

    Fairerweise sei gesagt: Das Ding KANN bei intensiver Nutzung Performance fressen!

  27. 27
    Kommentar von Aneas

    Nee, das ist keine Alternative... Es werden zu viele Tabellen in der DB angelegt (mehr als WP selbst braucht) und dann funktioniert das ganze nicht einmal ohne Probleme. Die Supportseite ist offline und das Ticketsystem gibt keine Lösungen und redet nur um den heissen Brei. Ausserdem kann man ohne das Plugin die Daten nicht benutzen ... da frage ich mich, ob ein solches Plugin Sinn macht. Nein, meiner Meinung nicht!

  28. 28
    Kommentar von apaju

    Super Lösung! Vielen Dank! Ein Problem das ich jetzt nur habe ist das wenn ich mein benutzerdefiniertes Feld nicht in jedem Beitrag verwenden möchte, habe ich den leeren image tag im Code mit drin. Da muss ich mir wahrscheinlich noch ne andere Vorlage für anlegen, oder gibt es eine Möglichkeit nur den kompletten IMG Code auszugeben wenn ich mein benutzerdefiniertes Feld nutze? Grüße

  29. 29
    Kommentar von Frank Bültge

    @apaju: dazu ist ja die Abfrage; du musst prüfen, ob es das Feld Inhalt enthält; bspw. mit isset()

  30. 30
    Kommentar von apaju

    Hm, das entzieht sich meinen programmiertechnischen Kenntnissen (=0). Ich glaube ich werde mir erstmal ein zweites Template anlegen. Hast mir aber schon sehr weitergeholfen! Danke!

  31. 31
    Kommentar von René

    Hallo, ich nutze solch ein Feld, um die Quelle eines Artikels anzugeben, ich muss also nur die URL hinterlegen, und dann erscheint unter dem Post ein Quelle-Link.

    Ich kann es bisher leider nicht 100%ig nachvollziehen, aber sendet es von dieser Art Link auch einen Pingback und wenn nicht, wie bekomme ich das hin?

  32. 32
    Kommentar von Frank Bültge

    @René: nein, ein Ping wird nur von URLs aus dem Content oder den extra Feld trackbacks getriggert, kann ich auch nicht sagen, ob das geht. Eventuell gibt es einen hook, der die beiden Felder einhängt und du müsstest dein Feld ergänzen.

  33. 33
    Kommentar von René

    Hallo, kurze Frage. Ich möchte Artikel nach PLZ sortieren. Im Loop sollte demzufolge eine variable eingetragen werden der nur die ersten beiden Ziffern einer PLZ. Mein Benutzerdef. Feld heißt in diesem Fall "plz" und beinhaltet immer die vollständige Nummer.

    Mein Loop sieht so aus:

    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('cat=72&showposts=10&orderby=modified'.'&paged='.$paged);

    Was muss ich hinzufügen das WordPress mir zum Beispiel nur den PLZ-Bereich "01" ausgiebt?

    Vielen herzlichen Dank
    René

  34. 34
    Kommentar von Frank Bültge

    @René: ja, WP kann das im Standard, direkt in meinem Beitrag zu finden, so muss ich hier nicht erklären.

  35. 35
    Kommentar von René

    Sehr schön. Besten Dank :)

  36. 36
    Kommentar von Robert Reinke

    Guter Artikel, aber ich suche eine Lösung, dafür, dass bestimmte Benutzerdefineirte Felder automatisch in jeden neuen Artikel eingefügt werden.

    Also ich drücke auf neuen Artikel erstellen und automatisch sind standardisierte Vorgaben als benutzerdefineirte Felder vorhanden.

    Habe mit meinen Suchbegriffen nichts gefunden.

    Evtl. hat ja hier jemand ne Idee.

    Danke vorab.

    RR

  37. 37
    Kommentar von Jordi

    Danke für die Tipps. Ich fange gerade erst man mit WordPress zu arbeiten. Jetzt versteh ich ein bisschen mehr, wofür diese Custom Fields da sind, bzw. was man alles damit machen kann :)

  38. 38
    Kommentar von LarsFischer

    Vielen Dank. Schön erklärt...

  39. 39
    Kommentar von ärdbaer

    Hallo,
    ich bin durch Google (mal wieder) auf deine Seite gestoßen und habe eine Frage.

    Momentan suche ich ein Widget für meine Sidebar, bei der ich die ID eines Artikels eingebe und somit dann automatisch bestimmte Custom Fields ausgelesen werden.
    Ist dir eventuell dafür auch eine Lösung bekannt?

    Kurz gesagt: Ich gebe in dem Widget eine Artikel ID ein und im Folgenden werden dann in der Sidebar die Custom Field-Werte ausgelesen und dargestellt.

    Über einen Tipp würde ich mich sehr freuen.

    Liebe Grüße,
    Björn

  40. 40
    Kommentar von Frank Bültge

    ärdbaer: nein, kein Widget dazu bekannt; ich nutze die auch wenig oder erstelle sie mir dann explizit.

  41. 41
    Kommentar von ärdbaer

    Schade, aber hätte ja sein können. :)
    Danke trotzdem für deine Antwort.

    Habe mir nun ein Widget mit einigen Eingabefeldern erstellt. Ist nicht ganz so komfortabel, aber tut es auch. Und für mein erstes Widget funktioniert es sogar recht gut. :)

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.