Zwei Layouts mit einem Theme

Momentan arbeite ich an einem Projekt, bei dem es auf jeder Seite einen Knopf für eine “Druck-Ansicht” geben soll. Kurzerhand das PlugIn WP-Print von lesterchan installiert - was auch soweit prima funktioniert hat. Man kommt allerdings ein bisschen in Schwierigkeiten, wenn man unterschiedliche Page-Templates und Category-Templates gebastelt hat, die “automatisch” Inhalte zur Seite beisteuern.

Das heißt: In der Druck-Ansicht sieht man nur den Inhalt des Postings oder der Page. Aber nicht das, was zusätzlich programmiert worden ist.

Denn das “PlugIn” ist im Grunde genommen kein echtes PlugIn - Für Wordpress 1.52 arbeitet es folgendermaßen:

  • Im root-Ordner liegt die Datei “wp-print.php”
  • Die “wp-print.php” ist quasi ein eigenes Wordpress-Theme in einer einzelnen Datei
  • In sein “echtes” Wordpress-Theme fügt man für die “Drucken”-Links eine Adresse ein, die die aktuelle Seite mit dem wp-print-theme wiedergibt

Also hätte ich in meinem Fall vier verschiedene wp-print-Dateien basteln müssen, um auch eine vollständige Druck-Ansicht meiner Page-Templates zu haben. Wäre ja ärgerlich, wenn sich jemand eine Linkliste oder eine Inhalts-Übersicht ausdrucken möchte - aber in der Druck-Datei fehlt sie plötzlich, weil sie nicht zum “Posting” gehört, sondern automatisch generiert wird. Das macht die ganze Geschichte allerdings ein bisschen unübersichtlich …

Freund Zufall

Um ein (anderes) Problem zu lösen, hab ich mir im Test-Template

<?php print_r($_GET); ?>

anzeigen lassen. Und so kommt man ganz zufällig auf nette Ideen:

  • Bei aktivierter Permalink-Struktur hat $_GET immer komplett andere Werte als ohne. Allerdings funktionieren die “Nicht-Permalinks” bei “Permalink-Blogs” ja ebenfalls
  • So kann also eindeutig unterschieden werden, ob die aktuelle Seite durch einen Permalink oder durch einen Link nach dem Muster www.deinblog.de/index.php?p=188? aufgerufen wurde
  • Wenn man die header.php entsprechend umbaut, kann man bei einem Permalink-Aufruf die “normale” Seite anzeigen, nicht-Permalink-Aufruf die Druck-Ansicht.

Zur Demonstration hab ich das bei mir mal eingebaut - sonderlich hübsch ist die Druckansicht zwar (momentan) noch nicht - aber Kunde kommt zuerst.

Die nötigen Codeschnippsel:

<?php if (isset($_GET['p'])||isset($_GET['page_id'])) { ?>
<!--
	Hier das rein, was bei der "Druck-Ansicht"
	angezeigt werden soll
-->
<?php } ?>

… oder das Gegenteil:

<?php if (!isset($_GET['p'])&&!isset($_GET['page_id'])) { ?>
<!--
	Hier das rein, was bei der "normalen Ansicht"
	angezeigt werden soll. Zum Beispiel der Link
	zur "Drucken"-Seite
-->
<?php } ?>

Und der Aufruf der Druck-Ansicht über die “ungeschönte” Link-Konstruktion. Unterschieden wird dabei zwischen Posts und Pages:


<?php if(is_page()) { ?>
<p><a href="<?php bloginfo('url') ?>/index.php?page_id=<?=the_ID()?>">Seite Drucken</a></p>
<?php } else { ?>
<p><a href="<?php bloginfo('url') ?>/index.php?p=<?=the_ID()?>">Seite Drucken</a></p>
<?php } ?>
	

Dieser Tipp funktioniert nicht, wenn man das PlugIn Permalink-Redirect aktiviert hat.

Update: Hier gibt’s eine verbesserte Variante in Sachen “Druck-Ansicht”, mit der man Permalink-Redirect weiterhin benutzen kann.