WordPress als CMS: Tipps & Tricks #3
Weiter geht’s mit meiner kleinen Artikelserie ![]()
Nebenbei bemerkt: Dieser Energiegetränk-Siff aus dem regionalen Supermarkt ist echt keine Alternative zu den Top 5 auf dem Markt. Mich schüttelts immer noch vom Geschmack .. grk.
The_Loop: Auslesen von Eintragsdaten außerhalb der großen Schleife
Warum das? Ich habe einen kleinen Hack speziell für Polyglot geschrieben – um die Übersetzungslinks auch außerhalb von Posts nutzen zu können. Dieser Hack funktioniert wie folgt (unter Zuhilfenahme von The Loop > Multiple Loops Example 3: Plugins):
<?php if(is_page() && have_posts()) :
while(have_posts()) : the_post();
$_post_permalink = get_permalink();
if(substr($_post_permalink, -1) != '/') {
$_post_permalink .= '/';
}
endwhile;
?>
<li>
<ul class="page-translate">
<li><a href="<?php echo $_post_permalink; ?>lang/de/"><img src="<?php echo $polyglot_settings['path_to_flags'] . $polyglot_settings['flags']['de']; ?>" alt="Deutsch" /> Deutsch</a></li>
<li><a href="<?php echo $_post_permalink; ?>lang/en/"><img src="<?php echo $polyglot_settings['path_to_flags'] . $polyglot_settings['flags']['en']; ?>" alt="English" /> English</a></li>
</ul>
</li>
<?php endif; ?>
Tipp: Widget-Container statt Sidebar
In einigen Themes schon gut zu sehen – z.B. Mimbo Pro – sind “Sidebars” als Widget-Container. Ich persönlich finde den Begriff “Sidebar” ja deutlich irreführend. Es hängt nämlich nur von der Position und vom CSS-Quelltext ab, was aus der Sidebar entsteht. Das ist i.d.R. tatsächlich nur eine Sidebar – egal ob links oder rechts – manchmal aber auch z.B. ein Website-Einleitung, eine Flash-basierte Galerie oder ein Bereich innerhalb des Footers, den man beliebig ausstaffieren kann mit allen möglichen Widgets. Und da viele Plugins inzwischen auch automatisch Widgets mitliefern, hat man hierfür natürlich viel mehr Auswahl als früher.
Im CMS-Bereich ist sowas natürlich sehr willkommen – ich mache bestimmte Bereiche widget-fähig, und mein Kunde kann dort dann selbständig eben solche nach seinem Gutdünken “reinwerfen”. Denkbar wäre auch ein “Edit here”-Bereich – ein entspr. Plugin gibt es ja bereits, allerdings ist dessen Entwicklung noch nicht allzuweit vorangeschritten – so dass man bestimmte Teile statisch belassen, andere wiederum einfach bearbeitbar machen kann. So, wie man es eben von weitaus populärereren CMSen bzw. CMS-Frameworks kennt.
Entwicklung: Einfaches Verzeichnis
Ein sehr einfach gestaltetes Verzeichnis – z.B. Liste aller im Firmenteam befindlichen Personen – lässt sich mittels einem sehr praktischen Theme-Template erstellen. Dazu muss man eine Elternseite und darunter (logischerweise) mehrere Kindseiten anlegen. Die Elternseite nutzt angesprochenes Template, die Kindseiten verwenden das Standardtemplate (normalerweise page.php). Heraus kommt eine hübsche Liste an verlinkten Seiten, die man auf Wunsch auch noch in Kombination mit etwas Quellcode-Zauberei und TimThumb erweitern kann
Folgend einerseits die benötigte Funktion bzw. Methode und, als Nr. 2, der wichtigste Teil des Templates (z.B. team.php) für die Elternseite:
class ThemeHelper (nur der wichtige Part):
class ThemeHelper {
var $arrPageList = array();
var $arrChildPages = array();
var $oWPQuery = '';
function __construct() {
$this->oWPQuery =& new WP_Query();
}
function getChildPages($iParentPageID) {
$return = array();
$this->arrPageList = $this->oWPQuery->query('post_parent=' . $iParentPageID . '&post_type=page&numberposts=-1');
if(sizeof($this->arrPageList) > 0) {
foreach($this->arrPageList as $iCount => $oPage) {
$this->arrChildPages[$iCount] = &$oPage;
}
$return = $this->arrChildPages;
}
return $return;
}
}
Nachtrag: Der letzte Teil des obigen Quelltexts ist natürlich völliger Quark. Die korrigierte, funktionstüchtige Fassung sieht wie folgt aus:
function getChildPages($iParentPageID) {
$return = array();
$this->childPagesList = get_pages('child_of='. $iParentPageID. '&parent=' . $iParentPageID);
if(sizeof($this->childPagesList) > 0) {
$return = $this->childPagesList;
}
return $return;
}
Template team.php
<div id="content">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?>
</a></h2>
<?php the_content(); ?>
<?php edit_post_link('Bearbeiten', '', ''); ?>
<?php endwhile;
endif; ?>
<?php $result = $themehelper->getChildPages(get_the_id());
if(sizeof($result) > 0) : ?>
<ul>
<?php foreach($result as $entry) : ?>
<li><a href="<?php echo get_permalink($entry->ID) ?>"><?php echo $entry->page_title; ?></a><br />
<?php echo $entry->post_title; ?></li>
<?php endforeach; ?>
<?php endif; ?>
</div>

