Die Wordpress eigene Cache-Funktion verbessert die Performance deutlich - und der Einsatz ist wirklich empfehlenswert. Aktiviert wird das Caching mit einem Eintrag in der Datei “wp-config.php” - Dort muss folgende Zeile eingesetzt werden:

define('ENABLE_CACHE', true);

Bei Wordpress 2.1 tauchen dadurch jedoch oftmals Schwierigkeiten auf, die Kategorien-Auflistung funktioniert plötzlich nicht mehr. Statt einer Kategorien-Liste liest man Fehlermeldungen wie z.B.

Fatal error: [] operator not supported for strings in /blablabla/wp-includes/classes.php on line 402

… und im Admin-Bereich wird sogar die komplette Beitrags-Verwaltung außer Kraft gesetzt - Man kann sich seine Beiträge nicht mehr anzeigen lassen, weil diese nach Kategorien sortiert aufgelistet werden.

 

Lösung:

Nach einigen erfolglosen Probierereien bin ich bei WordPress trac fündig geworden: Zu ändern sind im Ordner “wp-includes” die Dateien “cache.php” , “classes.php” und “version.php”


1) Datei “cache.php”

a) Zeile 2 bis 6:

function wp_cache_add($key, $data, $flag = '', $expire = 0) {
	global $wp_object_cache;

	return $wp_object_cache->add($key, $data, $flag, $expire);
}
	

ändern in:

function wp_cache_add($key, $data, $flag = '', $expire = 0) {
	global $wp_object_cache;
	$data = unserialize(serialize($data));
	return $wp_object_cache->add($key, $data, $flag, $expire);
}
	

b) Zeile 36 bis 40:

function wp_cache_replace($key, $data, $flag = '', $expire = 0) {
	global $wp_object_cache;

	return $wp_object_cache->replace($key, $data, $flag, $expire);
}
	

ändern in:

function wp_cache_replace($key, $data, $flag = '', $expire = 0) {
	global $wp_object_cache;
	 $data = unserialize(serialize($data));
	return $wp_object_cache->replace($key, $data, $flag, $expire);
}
	

c) Zeile 42 bis 46:

function wp_cache_set($key, $data, $flag = '', $expire = 0) {
	global $wp_object_cache;

	return $wp_object_cache->set($key, $data, $flag, $expire);
}
	

ändern in:

function wp_cache_set($key, $data, $flag = '', $expire = 0) {
	global $wp_object_cache;
	$data = unserialize(serialize($data));
	return $wp_object_cache->set($key, $data, $flag, $expire);
}
	


2) Datei “classes.php”

Zeile 396 bis 402:

function walk($elements, $to_depth) {
	$args = array_slice(func_get_args(), 2); $parents = array(); $depth = 1; $previous_element = ''; $output = '';

	//padding at the end
	$last_element->post_parent = 0;
	$last_element->post_id = 0;
	$elements[] = $last_element;
	

ändern in:

function walk($elements, $to_depth) {
	$args = array_slice(func_get_args(), 2); $parents = array(); $depth = 1; $previous_element = ''; $output = '';

	if( !is_array($elements) )
		return false;  

	//padding at the end
	$last_element->post_parent = 0;
	$last_element->post_id = 0;
	$elements[] = $last_element;
	


3) Datei “version.php”

Zeile 6:

$wp_db_version = 4772;
	

ändern in:

$wp_db_version = 4773;
	

 

Upgrade?

Beim ersten Aufruf des Admin-Bereiches bekommt man eine Meldung, die Datenbank sei nicht mehr aktuell. Also einmal die Datei “wp-admin/upgrade.php” ausführen - und dann sollte alles wie gewünscht funktionieren.

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