WordPress Tabelle mit benutzerdefinierten Feldern

Mit benutzerdefinierten Feldern kann man aus seinen WordPressblog als Datenbank nutzen. Die Eingabe der Daten erfolgt in jedem Artikel separat. Dafür stehen bei WordPress die benutzerdefinierten Felder zur Verfügung (unterhalb des Artikels). Hier kann man irgendwelche Felder definieren und dazu Werte eingeben. Diese Daten wiederum kann man als Tabelle ausgeben. Wie man benutzerdefinierte Felder anlegt und wieder ausliest haben wie kürzlich im Artikel WordPress – benutzerdefinierte Felder gezeigt. Hier geht es nun darum diese Felder in einer schicken Tabelle auszugeben und die Tabelle zu sortieren.

Ausgabeseite anlegen
In unserem Beispiel haben wir für Notebook-Tests verschiedene benutzerdefinierte Felder angelegt (Name, Display, CPU, Preis). Die relevanten Artikel befinden sich alle in der Kategorie Notebook. Suchen Sie zunächst unter Artikel Kategorien im WordPress-Adminbereich nach dieser Kategorie und klicken Sie auf editieren. In der URL steht nun die ID dieser Kategorie in der Form wp-admin/categories.php?action=edit&cat_ID=29. Die ID ist also 29. Das brauchen wir noch später. Nun benötigen Sie noch eine Seite im Theme, die Sie bearbeiten können. Normalerweise können Sie hierfür die index.php verwenden. Speichern Sie eine Kopie dieser Seite beispielsweise unter dem Namen notebooktest.php auf dem Server ab. Nun geben Sie dieser Seite einen Template Namen indem Sie in die erste Zeile diesen Code einfügen:

<?php
/* Template Name: Notebooktest
*/
?>

Nun erzeugen Sie eine Seite mit WordPress – keinen Artikel – eine Seite, und weisen dieser das neue Design zu. Siehe Artikel: WordPress individuelles Seitendesign.

Tabelle ausgeben
Für die Tabelle müssen Sie zunächst angeben welche Artikel hierfür in Frage kommen. In diesem Fall alle Artikel aus der Kategorie Notebook (ID 29). Vor dem Loop (Zeile 2) fügen Sie die erste Zeile Quelltext ein, die die Abfrage steuert.

query_posts(‚orderby=date&cat=29&posts_per_page=99‘);

if (have_posts()) : while (have_posts()) : the_post();

In Worten bedeutet das: Suche mir alle Artikel aus der Kategorie 29, sortiere nach Datum und gib bis zu 99 Zeilen aus. Sie können mehrere Kategorien per Komma getrennt angeben, oder sagen alle außer Kategorie 15 und 20 – dafür wäre dann -15,-20 zu notieren. Denkbar wäre auch alle Artikel mit dem Tag notebook auszugeben. Statt cat=29 wäre dann zB tag=notebook zu notieren, bzw die entsprechende tag_id.
Dann müssen Sie die benutzerdefinierten Felder abfragen:

$name = get_post_meta($post->ID, ‚Name‘, true);
$preis = get_post_meta($post->ID, ‚Preis‘, true);

Das geschieht hinter dem Loop. Hier basteln Sie beispielsweise eine Tabelle. So dass Ihr Loop dann so aussieht:

<table>
<?php
if (have_posts()) : while (have_posts()) : the_post();
$name = get_post_meta($post->ID, ‚Name‘, true);
$display = get_post_meta($post->ID, ‚Display‘, true);
$cpu = get_post_meta($post->ID, ‚CPU‘, true);
$preis = get_post_meta($post->ID, ‚Preis‘, true);
?>
<tr>
<td><?php echo $name;?></td>
<td><?php echo $display;?></td>
<td><?php echo $cpu;?></td>
<td><?php echo $preis;?></td>
</tr>
<?php endwhile; ?>
</table>

Somit haben Sie nun eine Tabelle erzeugt, die Sie über die entsprechende Seite in WordPress abrufen können. Natürlich können/sollten Sie diese noch entsprechend erweitern und designen. Im nächsten Schritt sehen Sie wie man eine solche Tabelle beliebig sortieren kann. Ein Beispiel für eine solche Tabelle ist unsere Notebook-Übersicht.

Warum IDs statt Namen verwenden
Man kann in der Abfrage auch den Namen der Kategorie angeben. Das ist sicher einfach, birgt jedoch auch einen Nachteil. Wenn Sie später mal die Kategorie ändern funktioniert die Abfrage nicht mehr.

Weiterführende Artikel:

Share this post:

1339

Ein Kommentar

  1. Phil says:

    Hallo,

    super Tipp. Hab ich gerade mal getestet, funktioniert einwandfrei.

    Eine Frage noch: Kennen Sie eine Möglichkeit nach bestimmten Daten zu filtern? Also zB „zeige alle Notebooks mit X GB“ ?

    Falls ja, wäre das grandios. Vielen Dank!

Hinterlassen Sie Ihren Kommentar