dynamicinternet Webdesign

Das Blog

Themen, Tutorials sowie Tipps & Tricks über Webdesign, (X)HTML und CSS, Programmierung, WordPress und was uns sonst noch bewegt.

RSS abonnieren

WordPress Custom Fields in Action

In meinem Tutorial WordPress Custom Fields nutzen habe ich die Grundlagen der benutzerdefinierten Felder (Custom Fields) aufgezeigt. In einem aktuellen Projekt, über das ich irgendwann hier ausführlich berichten werde, verwende ich die Custom Fields in Verbindung mit statischen Seiten.

Bei diesen Seiten handelt es sich um die Beschreibung von Baudenkmalen. Da es sehr viele Seiten werden (so locker über 100), überlegte ich mir gleich zu Beginn, diese Objekte etwas zu strukturieren, obwohl ich noch nicht wußte, wie ich diese Struktur verwenden würde. Ich habe also jedem Objekt 4 benutzerdefinierte Felder hinzugefügt:

  • Objekt
  • Epoche
  • Baujahr
  • Lage

Da man ja die Schlüssel der benutzerdefinierten Felder nur einmal anlegen braucht, kann man sie bei jeder neuen Seite einfach aus der Combobox auswählen und muß nur den Wert eintragen.

Diese Metainformationen schreibe ich in dem Pagetemplate in eine Art Teaser zusammen mit der Seitenüberschrift, dem Autor und der Erstellungs- bzw. Aktualisierungszeit. Damit hat der Leser gleich alle wichtigen Daten schön übersichtlich angeordnet.

Die übergeodnete Seite dieser Baudenkmale listet alle Objekte auf. das ist sehr einfach zu realisieren:


<ul>
	<?php wp_list_pages('child_of=7&depth=1&title_li=0&sort_column=post_name'); ?>
</ul>

Jetzt wollte ich die Objekte auch nach Epoche sortieren, um dem Leser mehr Auswahlmöglichkeiten zu geben. Es sollte die Epoche als Überschrift erscheinen und die zugehörigen Links zu den Objekten darunter. Also zuerst mal ein Query, um die verschiedenen Epochen auszulesen und mit wp_list_pages() ausgeben:


<?php
$epochen = $wpdb->get_results("SELECT DISTINCT meta_value
	FROM $wpdb->postmeta
	WHERE meta_key ='Epoche'
	ORDER BY meta_value ASC");
foreach ($epochen as $epoche) { ?>
	<h4><?php echo $epoche->meta_value; ?></h4>
	<ul>
		<?php wp_list_pages('child_of=7&depth=1&title_li=0&meta_key=Epoche&meta_value='.$epoche->meta_value.'&sort_column=post_name'); ?>
	</ul>
<?php } ?>

Wie man sieht, hat man mit den benutzerdefinierten Feldern Möglichkeiten ohne Ende, Inhalte aufzubereiten. Wer weiß, was mir noch so alles einfällt …

Sollte jemand meiner werten Leser ebenfalls Erfahrungen mit den benutzerdefinierten Feldern gemacht haben, würde ich mich über ein Kommentar freuen.

6 Kommentare
  1. solv sagt:

    sehr gut, sehr gut. danke für diesen schönen Hint.

    jetzt hab ich nur noch eine Frage, auf dessen Antwort ich nicht komme: Ich habe 2 meta_keys, die ich in der selben foreach schleife abfragen möchte. Sprich: ich möchte in einer Zeile zb.


    meta_value; ?> und meta_value; ?>

    auslesen können. Kannst du mir auf die Sprünge helfen wie ich zwei verschiedene keys in ein foreach packe? geht das überhaupt? oder muss ich das mit while versuchen?
    Wenn ich zwei foreach verschachtelt schalte, bekomm ich das Ergebnis zwar, leider jedoch doppelt! :(

    Danke für die Hilfe!

  2. Micha sagt:

    Du kannst alle metas mit get_post_meta($post->ID) holen. Also
    $foo = get_post_meta($post->ID);
    echo $foo['name_des_ersten_keys'][0];
    echo $foo['name_des_zeiten_keys'][0];

    wenn du var_dump($foo); machst, siehst du,, was alles in dem Array drinsteht.

  3. solv sagt:

    Danke für die rasche Info!

    Stimmt, das weiß ich. Ich erklär kurz den Umstand:

    Ich habe ein musikseite, die auf der sidebar die “artists” anzeigt. jeder artist ist eine page. jede page hat ein haufen meta_keys.
    Dank deinem Code (und wp_list_pages) kann ich jetzt auf der sidebar jeden artists dynamisch anzeigen. den meta_key brauch ich zu einem für das Bandbild. Jetzt möchte ich aber noch das genre der Band anzeigen lassen.

    da in der sidebar kein post->Id zur verfügung steht -> ich ja alle pages (wp_list_pages(‘child_of=XX)) anzeige, muss ich die abfrage so machen, wie in deinem Post.

    Ich komm aber eben nur nicht drauf, wie ich zwei verschiedene meta_keys abfrage.

    Vielen Dank!

  4. Micha sagt:

    Jetzt versteh ich, was du machen willst. Das ist ne ziehmlich komplizierte Sache. Ohne es jetzt ausprobiert zu haben, würde ich sagen, du mußt dir alle Seiten holen, die die beide meta_keys haben und dann mit foreach die Seiten durchgehen und dabei die meta_values mit ausgeben.

  5. Basti sagt:

    Sehr coole Möglichkeit, mehrere Posts nach meta_value zu sortieren. Vielen Dank dafür.

    Ich nutze die Meta-Keys sehr intensiv, zB. bei einer Videothek oder einem Musikfestival.

    Auch für Shops / Kataloge sind die Custom Fields sehr hilfreich, um schnell und leicht viele Daten schön zu präsentieren. Mittels CSV – Import kann man nämlich relativ einfach große Datenmengen (incl. Custom Fields!!) in Wordpress einspielen.

    Vielleicht gibts ja bald ein paar Template Tags, welche die sehr mächtigen (und trotzdem leider selten genutzen) Metadaten besser unterstützen. Zum Beispiel ist es relativ tricky, ein Custom Field als Datum zu interpretieren und dann nach diesem Datum zu sortieren.

    Danke nochmal für die sehr genialen Beiträge!

  6. Daniel sagt:

    Gerade die Möglichkeit ein custom field mit Datum korrekt zu sortieren ist wirklich tricky…. Ich habe für eine Art Terminliste ein custom field mit Datum und möchte nun eine Liste mit: “Datum: Terminüberschrift” darstellen lassen.

    Muss ich das via SQL bzw. $wpdb->get_results() machen um korrekte Daten sortiert zu bekommen?

    Danke!
    Daniel

Einen Kommentar schreiben