WordPress als CMS: In einer Kategorie Beiträge und benutzerdefinierte Felder ausgeben und nach einem benutzerdefiniertem Feld ordnen.

Cocoon hatte eine Frage:“Wie kann ich Beiträge aus einer Kategorie und bestimmte benutzerdefinierte Felder als Tabelle ausgeben.“ Cocoon möchte Reisen auflisten und da diese Reisen auch eine Nummer haben, dachte ich mir, dass dies Beiträge auch nach der Reisenummer ausgegeben werden sollten und nicht nach dem Postdatum /Beitragsdatum wie sonst üblich.

Beiträge in einer Tabelle
Beiträge in einer Tabelle


Getestet habe ich meine Lösung mit WordPress 2.3.1.

  1. Du brauchst dazu einen Editor: WordPad geht auch und Zeit zum Lesen.
  2. Ich wünsche mir einen Kommentar von Dir, wenn es geholfen hat,ja ich bin da unverschämt :-)

Zuerst erstelle ich mir die Kategorie „Reisen“.

WordPress kann das „category.php“ Template anhand der ID einer Kategorie zuordnen. Also holte ich mir die ID der Kategorie „Reisen“.

Admincenter==>Verwalten==>Kategorien==>ID der Kategorie.

In meinem Beispiel hat die Kategorie Reisen die ID 19.

Öffnete das category.php Template des verwendeten Themes, archive.php geht auch, ebenso auch das index.php Template.

Löschte in dem Template alles bis auf:

<?php get_header(); ?>
<!--category-19.php-->

leer 
leer

<?php get_sidebar(); ?>


Ob Du da irgendwo ein div oder /div brauchst, weil es Dein Design so haben mag, weiß ich nicht.

Speichere dieses Template als category-19.php. Hätte Deine Kategorie die ID 22, müßtest Du das Template als category-22.php abspeichern.

Beiträge vorbereiten beim Tippen

 benutzerdefinierte Felder erstellen
benutzerdefinierte Felder erstellen

Wenn Du einen Beitrag schreibst für diese Kategorie, deren Beiträge nach benutzerdefinierten Feldern geordnet werden sollen. Musst Du diese benutzerdefinierten Felder auch schreiben.

Admincenter==>Schreiben==>Beitrag schreiben==>runterscrollen zu „Benutzerdefinierte Felder“. Das erste Mal musst Du bei „Schlüssel“ den Namen des benutzerdefinierten Feldes eingeben. Bei jedem weiteren Beitrag kannst Du dieses Feld dann aus dem Drop Down Menü auswählen.

Daneben den „Wert“.

In dem Fall waren die „Schlüssel“ für drei benutzerdefinierte Felder: reisenummer, reisedatum, reisestatus.

Achtung: ich empfehle immer die Namen für benutzerdefinierte Felder wirklich aussagekräftigst zu machen. Unter „rdtm“ vermutet niemand „reisedatum“. ;)

Was haben wir bis jetzt alles, damit wir Beiträge und benutzerdefinierte Felder als Tabelle ausgeben können?

  • Kategorie ist erstellt.
  • Template hat die ID der Kategorie.
  • Beiträge mit benutzerdefinierten Feldern gibt es auch bereits.

Annahme: Die Reisenummer ist eine fortlaufende Nummer und daher wäre es sehr geschickt, wenn WordPress die Beiträge nach dieser Nummer ordnet und nicht nach dem Postdatum wie üblich.

Daher brauchen wir auch nicht den Standard Loop von WordPress, sondern eben was eigenes. Damit geht es:



<?php if (is_category('19')) {
$pageposts = $wpdb->get_results("SELECT *
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'reisenummer'
ORDER BY meta_key DESC", OBJECT);


html und sonstiges....


<?php endforeach;?>
<?php endif; } ?>



Dieser Code bedeutet:

Liebe Datenbank von WordPress, wenn es die Kategorie 19 ist, dann hole mir die Beiträge, die den meta key „reisenummer“ haben und ordne sie nach diesem meta key. Kontrolliere ob der meta key auch zur ID des Beitrages passt.

Unter meta key speichert WordPress die benutzerdefinierten Felder.

Benutzerdefinierte Felder ausgeben

Damit man ein erstelltes benutzerdefiniertes Feld auch lesbar ausgeben kann, muss man folgendes verwenden:

<?php $key="reisedatum"; echo get_post_meta($post->ID, $key, true); ?>
 

Heißt das benutzerdefinierte Feld: „hausaufgaben“ würde dies so lauten:

ID, $key, true); ?>

Beiträge und benutzerdefinierte Felder als Tabelle ausgeben

Hier ist das gesamte Template category-19.php. Erst wenn die Tabelle die einzelnen Beiträge ausgeben sollte beginnt der benutzerdefinierte Loop, den ich oben geschrieben habe. Die Tabelle selber beginnt schon vorher.

Wieso diese Tabelle so aussieht wie sie aussieht, ersuche ich w3.org zu lesen oder bei mir Tabllen laut BITV, barrierefreie Tabellen.


<?php get_header(); ?>
<!--category19.php-->

 


<table summary="Alle Reisen aus dem Jahr 2008 im Überblick" id="tablereise" rules="all">
<caption>Reisen 2008</caption>

<colgroup>
<col width="10"  />
<col width="15"  />
<col width="40"  />
<col width="25"  />
</colgroup>

<!--tabellenkopf-->
<thead class="theadreise">
<tr class="treins">
<th  abbr="Reise 2008" id="nummer" class="nummer">Reisenr.</th>
<th scope="col" id="datum" class="datum">Reisedatum</th>
<th scope="col" id="name" class="name">Reisename</th>
<th scope="col" id="status" class="status">Reisestatus</th>
</tr>
</thead>
<!--tabellenkopf ende-->

<!--tabellenfuss muss nicht sein -->
<!--tabellenfuss ende-->

<!--tabellen datenbereich-->
<?php if (is_category('19')) {
$pageposts = $wpdb->get_results("SELECT *
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'reisenummer'
ORDER BY meta_key DESC", OBJECT);

if ($pageposts) : foreach ($pageposts as $post): setup_postdata($post); ?>
<tbody class="tbodyreise">
<tr class="trreise">
<td scope="row" headers="nummer datum name status" class="tdeins">
<?php $key="reisenummer"; echo get_post_meta($post->ID, $key, true); ?>
</td>
<td class="tdzwei">
<?php $key="reisedatum"; echo get_post_meta($post->ID, $key, true); ?>
</td>
<td class="tddrei">
<a id="post-<?php the_ID(); ?>" href="<?php the_permalink() ?>" rel="bookmark" title=" '<?php the_title(); ?>'">
<?php the_title(); ?></td>
<td class="tdvier">
<?php $key="reisestatus"; echo get_post_meta($post->ID, $key, true); ?>
</td>
</tr>
 </tbody><!--tabellen datenbereich ende-->

<?php endforeach;?>
<?php endif; } ?>

</table>

<p class="top"><a href="#topp" title="zum Seitenanfang">Top</a></p>

</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>




Zur Gestaltung für diese Tabelle, die sowohl die benutzerdefinierten Felder, wie den Beitragstitel ausgibt und auch noch nach einem benutzerdefiniertem Feld geordnet wird habe ich ganz viele css ids und class vergeben. Sie sind oben im Code nachlesbar. Sicher sind nicht soviele wirklich nötig, aber gerade ungübte Tabellenersteller tun sich damit sicher leichter.

Viel Freude mit Deiner Tabelle, und wenn dieser Artikel für Dich hilfreich war freue ich mich wirklich über ein Bookmark oder einen Link.
5

5 Beiträge zu “WordPress als CMS: In einer Kategorie Beiträge und benutzerdefinierte Felder ausgeben und nach einem benutzerdefiniertem Feld ordnen.

  1. Kommentar Autor
    Martin Speis
    Kommentar

    Super Monika. Vielen Dank für die schnelle und super ausführliche Beschreibung. Ich hoffe ich kann mich da mal revangieren!

    Muß nicht der -Tag außerhalb der foreach-Schleife liegen?

    Kann ich eigentlich Deinen Code auch als Seitentemplate verwenden?

    Code:

    Tagesfahrten 2008

    Unsere Tagesfahrten 2008.

    Nr.
    Datum
    Fahrt
    Status

    get_results(„SELECT *
    FROM $wpdb->posts, $wpdb->postmeta
    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
    AND $wpdb->postmeta.meta_key = ‚Tagesfahrtnummer‘
    ORDER BY meta_key DESC“, OBJECT); ?>

    ID, $key, true); ?>
    ID, $key, true); ?>
    <a href=““ rel=“bookmark“ title=“ ““>
    ID, $key, true); ?>

    Weiterer Text

    Die Tagesfahrten sind unter der Kategorie-ID 3 abgespeichert.
    Jede Tagesfahrt hat drei benutzerdefinierte Felder: Tagesfahrtnummer, Reisedatum, Reisestatus.
    Die Tabelle wird mit dem JavaScript tablesort.js von frequency-decoder.com behandelt.

    In dem Zusammenhang: Wie kann ich jeder zweiten Tabellenreihe eine bestimmte Klasse mitgeben: ?

  2. Kommentar Autor
    Monika
    Kommentar

    Hallo Martin

    freut mich, wenns hilft und wie man sich bei mir revanchieren kann schrieb ich oben ;)

    klar geht das auch als Seitentemplate, Du musst dem Template nur einen Namen geben,

    ganz oben im Template:

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

    Darunter der nötige Code ..

    dann in den Theme Ordner laden,
    Admincenter==>Schreiben==>Seite schreiben
    dort nur mehr einen Titel angeben,
    rechts kann man dann das Template auswählen

    so kannst Du die Farben wechseln,

     
    class=" <?=($i%2)?"color1":"color2";$i++;?>  ">
    
    
    

    tr ist die Zeile, td sind die Zellen,
    wo Du dies dann einfügst ist das Deine ;)

    zb

    
    
    class="tdzwei  <?=($i%2)?"color1":"color2";$i++;?>"> 
    
    

    Einfach mal nachmachen was ich oben machte, dann siehst du wie es aussieht, was was macht,
    dies erleichtert das Verstehen sehr

    lg

  3. Kommentar Autor
    Marcel
    Kommentar

    Hi,

    wirklich sehr schön ausführlich. Hast Du vielleicht ein Beispiel, wo ich mir den Output ansehen kann, wie er im Live-Betrieb aussehen würde. Ich versuche gerade WordPress als kleines CMS zu nutzen, habe aber auch das Gefühl, dass WP hier nicht wirklich stabil läuft. Teilt dieses Gefühl jmd. oder ist es nur Einbildung? Bis zu einer welchen Anzahl von Seiten, kann denn WP als CMS empfohlen werden?

    Besten Dank

  4. Kommentar Autor
    Monika
    Kommentar

    hi Marcel ich habe kein Live zum Herzeigen
    für meine Beispiele,
    doch was haben benutzerdefinierte Abfragen mit tausenden von statischen Seiten zu tun und wieso sollt es da nicht rund laufen
    dies entzieht sich meiner Vorstellung
    lg

  5. Kommentar Autor
    360
    Kommentar

    Hey, danke für diesen Informativen Beitrag war sehr interessant.

    Viele Grüße
    Alex vom