Bei einem aktuellen Projekt sollte wieder einmal WordPress als Mini-CMS eingesetzt werden. Wie meistens geht das nicht ohne Bastelarbeiten. Diesmal war auf den einzelnen Seiten die Möglichkeit eines zweiten Contentbereiches gefragt, in dem zum jeweiligen Seiteninhalt zusätzliche Informationen angezeigt werden sollen. Ich habe das relativ elegant gelöst – der zusätzliche Content wird als Extra-Seite angelegt und mit einem Spezialfeld und einem zweiten Loop in die ursprüngliche Seite eingebunden. Und so gehts:
Im folgenden ist mit „Hauptseite“ die Seite gemeint, in die der zusätzliche Content eingebunden werden soll (den ich als „Subseite“ bezeichne).
Vorbereitungen im Administrationsbereich:
- Hauptseite mit Inhalt anlegen: man legt auf übliche Art eine neue Seite mit dem gewünschten Inhalt an.
- Subseite anlegen: Der Inhalt des zusätzlichen Content-Bereichs wird ebenfalls als neue Seite angelegt. Wichtig dabei ist, daß diese Seite eine übergeordnete Seite zugewiesen bekommt, damit sie nicht in der Navigation auftaucht. Danach Seite speichern.
- ID der Subseite herausfinden: nach dem Speichern der Subseite auf „Vorschau“ klicken. Die Zahl nach „page_id=“ in der Adressleiste ist die gewünschte ID.
- ID der Subseite als Spezialfeld der Hauptseite anlegen: Zu jedem Artikel und zu jeder Seite lassen sich in WordPress Spezialfelder speichern. Diese verwenden wir hier zum Speichern der ID der gewünschten Subseite. Daher die Hauptseite erneut zum Bearbeiten öffnen. Neues Spezialfeld mit dem Namen „Subseite“ anlegen (ohne Anführungszeichen). Als Wert kommt die vorher ermittelte ID der Subseite rein. Seite speichern.
Anpassung des Templates:
- Im Ordner der verwendeten Seitenvorlage eine neue Datei mit dem Namen „subseite.php“ anlegen. Der Inhalt dieser Datei soll sein:
$subseite = get_post_meta($post->ID, "Subseite", TRUE);
if($subseite != "") {
query_posts("page_id=$subseite");
while (have_posts()) : the_post();
the_content('');
endwhile;
wp_reset_query();
}
?>
- In der Vorlage für die Seite selbst wird diese Datei per Include() an passender Stelle eingebunden. Wichtig dabei ist lediglich, daß dieser Code nicht innerhalb des Haupt-Loops liegt!
include('/serverpfad/zu/wordpress/wp-content/themes/themename/subseite.php'); ?>
- Im Anschluss kann man natürlich die Styles innerhalb von div#subseite noch getrennt zum restlichen Content per CSS anpassen.
Das Ergebnis kann man auf der Website der Wissenswerkstatt bewundern – rechts unten ist der zusätzliche Content-Bereich.
- Rezension vs. Rezession - Mi. 27.12.2023
- Was Corona und Lotto gemeinsam haben - Di. 9.11.2021
- Heute vor 20 Jahren hat das große Abenteuer Segeln für mich begonnen :-) - Mi. 28.4.2021
Hi, hab’s gerade ausprobiert und bekomme die Fehlermeldung:
Parse error: syntax error, unexpected $end in /…/subseite.php on line 8
So – jetzt sollte es funktionieren. Da natürlich im Original der subseite.php einige Dinge mehr drinnenstehen, die ich für das dort verwendete Theme brauche, war ein PHP-Endtag zu viel, der wurde nun korrigiert. Sorry!
Wunderbar, jetzt klappt es. Genau was ich brauchte. Dankeschön!
Hallo,
tolles Tutorial, genau das kann ich gebrauchen.
Allerdings bekomme auch ich einen Fehler der mich etwas stutzig macht: „Fatal error: Call to undefined function: get_post_meta()“
Hast Du eine Idee?
Vielen Dank!
Tja, kann an vielen Dingen liegen:
– WordPress-Version am letzten Stand?
– Kopier- oder Schreibfehler im Template?
– Pfade in der Vorlage angepasst?
Oft liegt es schlicht an einem nicht standardkonformen Template – einfach mal ausprobieren, ob der Einbau in eines der mitgelieferten Standard-Templates funktioniert. Viel Erfolg!
Danke für Deine Antwort! An alledem liegt es nicht. Irgendwie hat mein WordPress ein include-Problem. Wie dem auch sei, wenn ich keine extra subseite.php anlege, sondern den entsprechenden Code in die page.php schreibe, dann klappt es.
Vielen Dank!
Das klingt aber tatsächlich danach, als wäre der Include-Pfad nicht genau auf die Location auf deinem Server angepasst worden. Aber natürlich kann der Code auch direkt verwendet werden, auch eine Lösung.
hmmm. wenn der include-Pfad nicht stimmen würde, wie würde dann php wissen, dass die datei mit der funktion get_post_meta() startet? anders ausgedrückt: dass ein fehler in zeile 1 gezeigt wird, zeigt doch, dass die datei gefunden wird?
Ich habe übrigens die gleiche Fehlermeldung bei einem eigenen Script in WordPress und keine Erklärung,,,,
Die Datei wird offenbar bei ihm zwar gefunden, aber die Einbindung erfolgt VOR dem Einbinden der für WordPress nötigen Funktionsaufrufe, weshalb die Funktion nicht gefunden wird. Das heisst, diese werden entweder zu spät oder gar nicht aufgerufen. Kann an vielem liegen.
Hi,
evtl. auch recht interessant ist das WordPress Plugin Flutter alias Fresh Page: Problemstellung und ein kleines Demovideo auf http://great-solution.de/2009/news/flutter-mehr-wordpress-cms/ (bitte entwerten – will hier nicht spamen!)
Grüsse
@Carsten: Danke für den Tipp, sieht sehr brauchbar aus und bietet eine Menge an Möglichkeiten. Vor allem aber kann man die benutzerdefinierten Felder endlich so einsetzen, dass auch ein Durchschnitts-User damit zurecht kommt.