Diese Methode unterscheidet sich kaum von den sogenannten Custom Post Types, nur dass diese auf Seiten angewendet wird und keine Modifizierung der functions.php benötigt.

Attributfeld

Attributfeld

Beim Erstellen einer Seite wird dem einen oder anderen schon das Feld „Attribute“ aufgefallen sein. Hier kann man zum Beispiel auch auswählen, welcher Seite die neu erstellte Seite untergeordnet sein soll. Bei genauerer Betrachtung des Attributfeldes fällt der Punkt „Template“ ins Auge. Bei den meisten kann man dort nur „Standardtemplate“ auswählen. Dies soll hier nun geändert werden.

Zu erst muss man wissen, das Standardtemplate ist die page.php des benutzten Themes. Also klingt es nur logisch, dass das neue Template ebenfalls auf dieser Datei basiert. Dazu wird die page.php einfach kopiert und zur page-beispiel.php. Nun muss darin noch eine kleine Änderung vorgenommen werden, damit wir auch einen Templatenamen zur Auswahl haben.

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* The template for displaying all pages.
*
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages
* and that other 'pages' on your WordPress site will use a
* different template.
*
* Template Name: Beispiel
* @package WordPress
* @subpackage ppfeufer
* @since ppfeufer 1.0
*/

Man achte hier auf die Zeile „Template Name“. Hier wird der Name des Templates angegeben. Es empfiehlt sich hier den selben zu nehmen, der auch schon der Datei angehängt wurde. Also für page-beispiel.php den Template Name „Beispiel„. So behält man einfach die Übersicht. Alle anderen Zeilen, also @package, @subpackage und @since können einfach so beibehalten werden. Diese geben lediglich zu Zugehörigkeit zu WordPress und dem verwendeten Theme an. Auch der Rest der Datei bleibt weitestgehend unberührt. Bis auf eine Kleinigkeit. Natürlich  muss das Template nun auch wissen, welche Unterseiten es auflisten soll. An dieser Stelle wird es etwas „tricky“.

Als erstes wird ganz normal eine Seite erstellt und gespeichert. Diese Seite braucht nur einen Titel, keinen Inhalt, da dieser nach dem Eingriff nicht mehr angezeigt wird, aber dazu später mehr. Nachdem die Seite abgespeichert ist, wird die ID dieser Seite benötigt. Diese wird gebraucht, um die späteren Unterseiten aus der Datenbank herauszuholen. Die ID erfährt man über den „Bearbeiten“-Link der Seite in der Seitenübersicht. Dieser hat folgenden Aufbau: http://eureseite.de/wp-admin/post.php?post=2102&action=edit (ID hier fett markiert).

Mit der ID bewaffnet geht es nun wieder an die post-beispiel.php. Hier wird nun der Loop etwas „manipuliert“ damit er nur die Unterseiten anzeigen, welche auch zu ID der Hauptseite gehören. Dies wird mit einem kleinen Codeschnipsel erreicht.

1
2
3
4
5
6
7
8
<?php
query_posts(array(
    'post_parent' => 2102 ,
    'post_type' => 'page',
    'post_status' => 'publish',
    'paged' => get_query_var('paged')
));
?>

Zur Erklärung:
post_parent ist die Übergeordnete Seite, also die, die gerade erstellt wurde. Hier muss die ID zugeordnet werden.
post_type ist der Typ, in diesem Falle ‚page‘ für Seite.
post_status der Status. Hier ‚publish‘, damit auch wirklich nur Unterseiten angezeigt werden, die veröffentlicht sind.
paged sorgt dafür, das auch eine Seitenschaltung vorhanden ist und es somit keine unnötig lange Seite wird, sollten es mal mehr Unterseiten werden.

Nun zurück zu der Seite, welche das Template verwenden soll. Diese wird editiert und in der Attributbox bei Template das neue Template eingetragen. Wenn nun Unterseiten erstellt werden, werden diese nun aufgelistet.

Daraus ergeben sich natürlich eine Menge Möglichkeiten, diese herauszufinden, ist ganz eurer Phantasie überlassen. Auch kann man hier die Unterseiten gleich verlinken, so dass diese mit einem Klick auch einzeln angezeigt werden, genau so wie bei Blogeinträgen.

Besonderheiten:

Wie ich weiter oben schon erwähnte, wird jeder Text, der in der Hauptseite eingegeben wird einfach weggelassen. Dies kann man natürlich umgehen in dem man das Template etwas erweitert. Auch hierfür gibt es zwei Möglichkeiten. Entweder man nutzt WordPress dafür aus, oder man schreibt den Text selbst ins Template.

Möglichkeit 1: WordPress nutzen

Hier muss nur etwas im Template selbst kopiert werden. Um weitere verwirrende Erklärungen zu sparen, gebe ich den benötigten Code hier einfach mit.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php if(have_posts()) while(have_posts()) : the_post(); ?>
      <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
          <?php if(is_front_page()) { ?>
              <h2 class="entry-title"><?php the_title(); ?></h2>
          <?php } else { ?>
              <h1 class="entry-title"><?php the_title(); ?></h1>
          <?php } ?>

          <div class="entry-content">
              <?php the_content(); ?>
          </div><!-- .entry-content -->
      </div><!-- #post-## -->
<?php endwhile; ?>

Dieser Code muss direkt ÜBER die erste Modifikation, also über:

1
2
3
4
5
6
7
8
<?php
query_posts(array(
    'post_parent' => 2102 ,
    'post_type' => 'page',
    'post_status' => 'publish',
    'paged' => get_query_var('paged')
));
?>

Der Nachteil hierbei:

Nutzt ihr Plugins wie den Twitter-Button oder ähnliches, was unter den Artikeln angezeigt wird, wird das auch hier drunter angezeigt und dann erst kommt die Auflistung der Unterseiten. Kann etwas unschön aussehen.

Möglichkeit 2: Text selbst ins Template schreiben

In der Template-Datei finden sich die Zeilen:

1
2
<div id="container">
    <div id="content" role="main">

Direkt unter diesen könnt ihr euren Text einsetzen.
Als Beispiel:

1
2
3
4
5
6
7
8
9
<div class="entry-content">
    <h2 class="entry-title">Beispielseite</h2>
    <p>
        Dies ist euer Text.
    </p>
    <p>
        Und dies der zweite Absatz.
    </p>
</div>

Nachteil hierbei:

Da der Text nun fest im Template steht, kann es nur für diesen einen Zweck, den der Text beschreibt, verwendet werden.

Beispiele:

Werft einfach mal einen Blick in die Referenzen hier im Blog. Genau dort wird diese Vorgehensweise verwendet.

Also, viel Spass und habt ruhig etwas Mut damit herum zu experimentieren :-)

5 Meinungen zu “WordPress: Auflistung von Unterseiten mittels eines Templates

  1. Hallo, H.-Peter,
    ich bin froh, dass ich Deinen Blog gefunden habe, viele wertvolle Tips und Hinweise….
    Eine kurze Frage: Kann ich das oben beschriebene Template auch benutzen, wenn ich in meinen
    Blog eine Seite integrieren möchte, die ohne die Header-Grafik angezeigt werden soll. Sie soll einfach nur einspaltig sein mit weissem Hintergrund und dem Text, sonst nichts.
    Vielen Dank für Deinen Tip im voraus.
    Grüße von Sabine Güntsche

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>