WordPress als CMS: Tipps & Tricks #1

Geschrieben von am 08. Juli 2009 um 10:58 Uhr 0 Kommentare
Wordpress Hosting

Inzwischen habe ich seit ca. einem Jahr fast nur noch mit WordPress als CMS zu tun. Für Entwickler ist WordPress aus rein struktureller Sicht natürlich ein Grauen (z.B. Wrapper-Funktionen binden Klassen, u.ä. “Freuden”), aus Anwendersicht ist es allerdings recht benutzerfreundlich, außerdem stehen dem geneigten Webdesigner wie auch privaten Benutzer tonnenweise brauchbare Plugins und Themes für die verschiedensten Einsatzzwecke zur Verfügung.

Deshalb fange ich hiermit mal eine lose Reihe an Tipps & Tricks für WordPress an – nicht unbedingt geordnet, hauptsächlich orientiert an den Projekten, an denen ich zum jeweiligen Zeitpunkt arbeite. Ich hoffe aber dennoch, dass sich einiges an Nützlichem darunter befindet ;-)

Seitennavigation: Highlight der Elternseite

Bei einem meiner Projekte habe ich eine reine Parent Only-basierte Seitennavigation (Seiten = “Pages”) eingebaut. Die Unterseiten werden in diesem Fall als einfache Einträge für eine Liste bzw. Verzeichnis genutzt, sind daher auch nicht weiter relevant für die Hauptnavigation.

Habe ich als Benutzer nun aber eine solche Unterseite ausgewählt, würde nun in einer Navigation, in der auch Unterseiten angezeigt werden, der Verweis auf die aktuell aufgerufene Seite mit der Klasse “current_page_item” erweitert, welche man normalerweise mittels CSS als Highlight benutzt.


#navigation li.current_page_item a:link, #navigation li.current_page_item a:visited {
	color: #000;
	background-color: #fd3;
	font-weight: bold;
	text-decoration: none;
}

In unserem Fall gibt es aber keine solche Struktur, weshalb wir auf die Klassen “current_ancestor_page” (= aktuelle Vorfahren-Seite) und “current_parent_page” ausweichen. Diesen geben wir dasselbe Highlight wie auch der Klasse “current_page_item” – und schon wird auch künftig die richtige Hauptseite in der Navigation hervorgehoben.


#navigation li.current_page_item a:link, #navigation li.current_page_item a:visited,
#navigation li.current_page_ancestor a:link, #navigation li.current_page_ancestor a:visited,
#navigation li.current_page_parent a:link, #navigation li.current_page_parent a:visited
{
	color: #000;
	background-color: #fd3;
	font-weight: bold;
	text-decoration: none;
}

Mehrsprachigkeit: Shortcodes und Polyglot

Mittels der in WordPress 2.5 eingeführten Shortcodes und dem Plugin Polyglot kann man recht schnell und einfach seine Einträge und Seiten mehrsprachig verfassen.

Ein Nachteil allerdings: Der Übersetzungs-Verweis des Plugins funktioniert nur innerhalb von The Loop – schlechte Karten also, wenn man z.B. einen globalen Menüpunkt “Deutsch – Englisch” einfügen möchte.

Eine Lösung dafür habe ich bereits in Arbeit, in der Form eines eigenständigen Plugins, dass die Funktion von Polyglot nachbildet, aber eben auch außerhalb von der Post-Verarbeitungs-Schleife einsetzbar ist. Mehr dazu in Kürze.

Derweil könnte folgende, mehrteilige Lösung helfen, die allerdings nur im Footer (oder alternativ mit etwas zusätzlichem JavaScript-Budenzauber) funktioniert:

Teil #1: Diesen fügen wir innerhalb von The_Loop ein, z.B. ganz ans Ende.


if(is_single() || is_page()) {
$strMyPermalink = get_permalink();
}

Teil #2: Übernimmt den Permalink und gibt die nötigen Verweise aus.


if(isset($strMyPermalink) != false) {
?>
<div class="page-translation" id="footer-page-translation">
<ul>
<li><a href="<?php echo $strMyPermalink; ?>/lang/de/">Deutsch</a></li>
<li><a href="<?php echo $strMyPermalink; ?>/lang/en/">English</a></li>
</ul>
</div>
<?php
}

Teil #3 ist optional: Mittels z.B. jQuery könnte ich jetzt die ID des neuen Übersetzungsmenüs auslesen und an meine globale Navigation drankleben, etwa so:


jQuery(function() { // dom-ready
jQuery("#header #navigation ul").append("#footer-page-translation");
});

BTW: Ich habe letzteres Beispiel nicht getestet. Müsste aber in etwa so funktionieren - am besten selber ausprobieren. Visual JQuery FTW! :D

Mehrsprachigkeit: Thickboxalize

Apropos Plugin: Schon seit einer geraumen Zeit - nämlich seit Anfang 2008 - gibt es von meiner Wenigkeit eine multilinguale Version von Thickbox namens Thickbox-DE. Inzwischen ist diese auch als eigenständiges Paket auf der Projektseite meiner Website zu finden. Im Gegensatz zu anderen Lösungen habe ich darauf verzichtet, die Texte selbst anzutasten, wodurch auch die Übersetzung in andere Sprachen als nur Deutsch und Englisch sehr einfach ermöglicht wird ;-)

Um mir fröhliche Theme-Fummelorgien zu ersparen, habe ich mir für's schnellere Einbinden in WordPress ein kleines Plugin namens Thickboxalize geschrieben, welches ich vor kurzem erst runderneuert in Version 1.0 herausgebracht habe. Dieses Plugin verwendet die jeweils aktuelleste Version meiner bereits erwähnten Thickbox-Variante. Geplant für die kommende Version sind bereits ein paar Einstellungen, z.B. die globale Festlegung der gewünschten Sprache, welche man in der aktuellen Version noch per Hand innerhalb des Quelltextes einstellen muß.

Entwicklung: WordPress-Framework einbinden

Und zum Schluß noch ein praktischer Hinweis für WordPress-Entwickler: Um das WordPress-Framework seperat in eine PHP-Datei einzubinden, reicht es aus, die Datei wp-config.php am Anfang des Scripts zu inkludieren und die Konstante ABSPATH zu setzen.

Ein praktisches Snippet, dass das automatisch erledigt, kann wie folgt aussehen:


if(!class_exists('wpdb)) {
	$px = explode('/', dirname(substr(__FILE__, 1)));
	$arrAbsolutePath = array_slice($px, 0, sizeof($px) - 3); // three steps back (../../../)
	define('ABSPATH', '/' . implode('/', $arrAbsolutePath) . '/');
	require_once('../../../wp-config.php');
}

Hierbei wird also als erstes überprüft, ob die Klasse wpdb nicht vorhanden ist, was logischerweise nur dann der Fall ist, wenn WordPress itself nicht aktiv ist. Hiermit vermeide ich etwaige Kollisionen, sollte ich oder jemand anderes aus irgendeinem Grund auf die Idee kommen, dieses Script in einem Plugin oder Theme zu inkludieren.

Mit den Zeilen 2 - 5 definiere ich den neuen ABSPATH, der für unser Script i.d.R. natürlich anders lautet muß - ausgenommen, es befindet sich in derselben Verzeichnisebene wie wp-config.php, was sicherlich eher seltener der Fall sein dürfte.

Die vorletzte Zeile schließlich inkludiert die WordPress-Konfigurationsdatei, welche von sich aus alle nötigen Dateien lädt, um das WordPress-Framework benutzen zu können.

Konkret setze ich dieses Snippet z.B. bei einem kleinen Thumbnail-Script ein, an welchem ich gerade arbeite. Dieses Thumbnail-Script orientiert sich weitestgehend an TimThumb, ist allerdings objektorientiert programmiert und verwendet ImageMagick statt der GDLib.

Autoreninfo: Fabian Wolf

Der "andere" Autor dieses Weblogs. Schreibt vorrangig fachspezifische Artikel zu Webdesign und -programmierung, beispielsweise über WordPress, Habari, jQuery oder OpenStreetMap, um nur ein paar Themen zu nennen.

Schreibe einen Kommentar: