Was lange währt …

Geschafft: Seit heute läuft gunnart.de mit Wordpress 2.1 - Sollte irgendetwas vorübergehend nicht richtig funktionieren, bitte ich um Nachsicht, da einige Eigenbau-Funktionen im Theme noch nicht optimal an Wordpress 2.1 angepasst sind.

Das Upgrade war diesmal mit etwas mehr Gefriemel als gewohnt verbunden. Nachdem ich bei den ersten Versuchen zunächst mit Fehlermeldungen regelrecht zugeschmissen worden bin - immerhin lief gunnart.de vorher noch mit Version 1.52 - bin ich den Umweg gegangen, Wordpress 2.1 zunächst auf einer Subdomain zu installieren - und die 1.52er-Datenbank vorm Ausführen des Upgrade-Skriptes manuell “vorzubereiten”.

Vor-Arbeiten

Auf der alten Seite hieß der Admin nicht mehr “admin”, das hatte ich direkt in der Datenbank geändert. Solche Spielereien sollte man vorm Upgrade rückgängig machen.

Ebenso hat man es einfacher, wenn das Tabellen-Präfix bei der neuen Installation dasselbe wie bei der alten Installation bleibt - Bei meinem ersten Versuch “durfte” ich zwar in den Admin-Bereich, konnte jedoch weder Voreinstellungen noch Beiträge oder Seiten bearbeiten.

Und diesen Umstand finde ich ärgerlich - bei anderen CMS braucht man beim Seiten-Portieren nur ein paar Config-Dateien anzupassen - bei Wordpress muss man in der Datenbank rumsuchen, bis man alles gefunden hat.

Letztendlich geklappt hat das Update erst, nachdem ich alle Einträge in der Tabelle “meinpraefix_options” auf die Subdomain angepasst hatte. Bevor man sich alle “option_values” durchklickt nimmt man dazu am Besten eine MySQL-Abfrage. Bei mir sah die folgendermaßen aus:

UPDATE gunnart_options SET option_value = replace(option_value, 'www.gunnart.de', 'wordpress21.gunnart.de');

… und dann erst gab’s beim Ausführen der “upgrade.php” keine Fehlermeldungen mehr. Damit lag die alte Seite wie gehabt auf http://www.gunnart.de, eine mehr oder weniger funktionstüchtige neue Seite auf http://wordpress21.gunnart.de … Dann einloggen, mit dem neuen “Privatsphäre”-Menü verhindern, dass die Test-Aktionen bei Google oder irgendwelchen Ping-Services auftauchen - und so kann man in Ruhe an seinem Theme arbeiten und seine liebgewonnenen PlugIns nach und nach installieren.

Läuft noch nicht ganz? Meine Fehlerquellen:

  1. ausrangierte Template-Tags
    Bei Wordpress 2.1 hat sich Einiges geändert …
  2. Kategorien-Auflistung - “operator[] not supported for strings”
    Man erhält nicht nur im Front-End laufend Fehlermeldungen à la “operator[] not supported for strings … tralala classes.php” - Auch im Admin-Bereich fällt die Kategorien-Verwaltung komplett aus.
    Lösung: In der wp-config.php ist vermutlich der Cache aktiviert. Datei entsprechend anpassen und Cache-Ordner löschen.
    Schade, schade, kein Cache. Jedenfalls nicht für mich …
  3. Startseite funktioniert nicht
    Beim Aufruf der Blog-Adresse bleibt das Browser-Fenster leer und es wird “endlos” geladen.
    Lösung: Wordpress 2.1 verträgt sich scheinbar nicht mit dem PlugIn “Permalink-Redirect”, jedenfalls sofern man eine Statische Seite als Startseite festgelegt hat. Also PlugIn entsprechend anpassen

Lösungen

Zu 1) Cache ausschalten

In der Datei “wp-config.php” die Zeile

define('ENABLE_CACHE', true);

löschen oder auskommentieren - sofern vorhanden.

Leider hab ich das Cache-System auch mit viel Liebe nicht zum Laufen überreden können, aber vielleicht finde ich ja doch noch einen Weg …? Für Hinweise und entsprechende Kommentare bin ich auf jeden Fall dankbar.

Zu 2) Permalink-Redirect bearbeiten

Die Funktion execute(); darf nur dann ausgeführt werden, wenn in den Wordpress-Optionen festgelegt wurde, dass eine Statische Seite als Startseite fungieren soll und wenn man sich gleichzeitig auf dieser Startseite befindet.

In der Version 0.6.1 von Permalink-Redirect dreht es sich um die Zeilen 52 bis 91:


function execute() {
	global $withcomments;

	$requested = @parse_url($_SERVER['REQUEST_URI']);
	if ($requested === false)
		return;

	$requested = $requested['path'];

	if (is_404() || is_trackback() || is_search() ||
	    is_comments_popup() || YLSY_PermalinkRedirect::is_skip($requested))
	    return;

	// Check whether we need to do redirect for FeedBurner.
	// NOTE this might not always get executed. For feeds,
	// WP::send_headers() might send back a 304 before template_redirect
	// action can be called.
	if (is_feed() && !is_archive() && !$withcomments) {
		$feedburner = get_settings('permalink_redirect_feedburner');
		if ($feedburner && !YLSY_PermalinkRedirect::is_feedburner()) {
			header('HTTP/1.1 302 Found');
			header('Status: 302 Found');
			header("Location: http://feeds.feedburner.com/$feedburner");
			exit(0);
		} else {
			return;
		}
	}

	$link = YLSY_PermalinkRedirect::guess_permalink();
	if (!$link)
		return;
	$permalink = @parse_url($link);
	if ($requested != $permalink['path']) {
		header('HTTP/1.1 301 Moved Permanently');
		header('Status: 301 Moved Permanently');
		header("Location: $link");
		exit(0);
	}
}

	

Dort muss eine Abfrage “drumherum” geschachtelt werden:


if ( (get_option('show_on_front')=='page') && !is_page(get_option('page_on_front')) ) {

//... execute ...

}

	

Die geänderte Funktion sieht folgendermaßen aus:


function execute() {

	if ( (get_option('show_on_front')=='page') && !is_page(get_option('page_on_front')) ) {

		global $withcomments;

		$requested = @parse_url($_SERVER['REQUEST_URI']);
		if ($requested === false)
			return;

		$requested = $requested['path'];

		if (is_404() || is_trackback() || is_search() ||
		    is_comments_popup() || YLSY_PermalinkRedirect::is_skip($requested))
		    return;

		// Check whether we need to do redirect for FeedBurner.
		// NOTE this might not always get executed. For feeds,
		// WP::send_headers() might send back a 304 before template_redirect
		// action can be called.
		if (is_feed() && !is_archive() && !$withcomments) {
			$feedburner = get_settings('permalink_redirect_feedburner');
			if ($feedburner && !YLSY_PermalinkRedirect::is_feedburner()) {
				header('HTTP/1.1 302 Found');
				header('Status: 302 Found');
				header("Location: http://feeds.feedburner.com/$feedburner");
				exit(0);
			} else {
				return;
			}
		}

		$link = YLSY_PermalinkRedirect::guess_permalink();
		if (!$link)
			return;
		$permalink = @parse_url($link);
		if ($requested != $permalink['path']) {
			header('HTTP/1.1 301 Moved Permanently');
			header('Status: 301 Moved Permanently');
			header("Location: $link");
			exit(0);
		}
	}
}

	

… und so sollte es klappen.

Fazit und Ausblick:

Nachdem mich die 2.0er-Versionen von Wordpress nicht überzeugen konnten, und ich bis gestern nur die 1.52 genutzt habe - bin ich mit dem jetzigen Upgrade bisher zufrieden. Endlich ein Upgrade, das ich nicht wieder rückgängig machen muss. Schade zwar, dass die Cache-Funktion aktuell noch so ihre Zicken macht, aber Wordpress 2.1 reagiert auch ohne Cache schön fix.

Erfreulich:

  • Beiträge und Seiten werden während des Schreibens automatisch “zwischengespeichert”.
  • Seiten können endlich auch als “Entwurf” gespeichert werden - Das spart etliche Verrenkungen, wenn man halbfertiges Zeug vor der Öffentlichkeit verstecken möchte
  • “Manage Me” funktioniert - Superpraktisch zum Massen-Editieren
  • Auch mit deaktivierter Cache-Funktion werden statische Seiten schnell angezeigt

An meinem Theme muss ich noch ein wenig arbeiten - ich kann mir sicherlich die ein oder andere Datenbank-Abfrage sparen - Mal sehen, was man noch so alles rausholen kann.

Bitte beachten Sie unbedingt die allgemeinen Hinweise zur Verwendung hier veröffentlichter Code-Beispiele!

 

Nachträge:

Thema Permalink-Redirect: Die aktuelle Version von Permalink-Redirect ist die 0.62 - Diese läuft unter Wordpress 2.1 auch ohne weitere Bearbeitung einwandfrei.

Thema Wordpress-Cache: Wie man die Cache-Funktion “reparieren” kann, ist in diesem Beitrag zu lesen.