WordPress Teaser für Unterseiten einer Seite

Es gibt Aufgaben, für die ist die Artikel / Blog Ausgabe von WordPress ggü. den WordPress CMS Seiten zu sehr unterlegen. Dazu gehört bspw. eine tiefere hierarchische Verschachtelung von Inhalten. Mit der Kategorisierung der Artikel lässt sich nur eine flache Hierarchie der Tiefe 2 realisieren. Mit WordPress CMS Seiten hingegen theoretisch unendlich tief.

Die WordPress CMS Seiten haben jedoch normalerweise den dummen Nachteil, dass jegliche Unterseiten nicht automatisch als Teaser in der jeweiligen Ebene angezeigt werden – wie das in den normalen Kategorien der Fall ist. Das lässt sich allerdings relativ einfach mit Hilfe von wpSEO ändern!

WordPress Unterseiten wie Artikel mit Teasern anzeigen lassen

Dazu einfach folgenden Code an die passende Stelle des pages.php Templates einfügen (z.B. unter die Auflistung des eigentlichen Contents der Seite):

<?php
/** Creating teaser of all childs of depth = 1
  Thisfor you have to set array('hierarchical' => 0, 
  'parent' => $post->ID) in get_pages()
  Using WP_SEO for getting teaser excerpt
  Author: Viktor Dite
**/
$pageChildren = get_pages(array('child_of'=> $post->ID,
'hierarchical' => 0, 'parent' => $post->ID));
if ( $pageChildren ) {
  foreach ( $pageChildren as $pageChild ) {
  echo '<a href="' . get_permalink($pageChild->ID) . '">
      <article id="post-<?php the_ID(); ?>" class="product_list">
        <header class="entry-header">
          <h2 class="entry-title">'.
           $pageChild->post_title.'</h2>
        </header>
        <div class="entry-content">';   
          if (has_post_thumbnail($pageChild->ID)){
            echo get_the_post_thumbnail($pageChild->ID, 'large');
          } 
          if(strlen($description = get_post_meta($pageChild->ID,
                    '_wpseo_edit_description', true))>5)
          {
            echo '<p>'.$description.'</p> ';
          }else{
            echo '<p>Leider keine Kurzbeschreibung
                  vorhanden</p>';
          }
  echo '</div>
        <div class="clearleft"></div>
      </article>
      </a>';
  }//foreach
}//if $pageChildren
?>

Zur Erklärung

$pageChildren = get_pages(array('child_of'=> $post->ID,
'hierarchical' => 0, 'parent' => $post->ID));

get_pages() holt mit dem Parameter child_of alle Unterseiten der aktuellen Seite. 'hierarchical' => 0, 'parent' => $post->ID bewirken zusammen, dass nur eine Ebene (die direkten Nachfolger (Siblings) in der Hierarchie in die Ausgabe kommen. Werden diese Optionen nicht angegeben, kommen alle Unterseiten, egal welcher Tiefe, als Teaser mit in die Ausgabe!

Der Rest des Codes holt sich dann einfach jedes Element und packt es in ein article Element, dass nur noch per CSS passend formatiert werden muss. Die Description des Teasers liefert dabei das manuell gesetzte Description Metatag von wpSEO, da WordPress von Haus aus kein “Auszug” Feld bei den Seiten mitliefert.

4 Kommentare » Schreibe einen Kommentar

  1. Geht bei mir nicht :(
    Zeigt immer nur die Geschwister an, nicht die Kinder der Seite

  2. Bist Du Dir sicher? Allein der Aufruf
    $pageChildren = get_pages(array(‘child_of’=> $post->ID,
    ‘hierarchical’ => 0, ‘parent’ => $post->ID));
    schließt dies eigentlich aus, weil dort das child_of aktuelle Seite Array geholt wird

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.


Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>