Update Prüfung für Themes entfernen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 14 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WP Adventskalender 16
Ich hatte das Thema hier schon mehrfach (und in Türchen Nr. 12) – der Update-Check von WordPress ist nicht in jedem Fall sinnvoll und kann Last kosten, die man anders gebrauchen kann. Ich klemme je nach Anforderung den Cron ab und via Hook sorge ich dafür, dass das Update auf diverse Themen nicht mehr läuft.

Mark Jaquith stellt zwei sehr schöne Lösungen vor, wie man in Plugins und Themes als Autor den Update-check abklemmt. Viele Blogs nutzen Themes, welche selbst geschrieben sind, oder welche kein Update erhalten können. Insofern ist vor allem die Lösung für die Themes sehr nützlich.

Sie ist schnell in die functions.php des jeweiligen Themes integriert und so muss man sich nicht mehr in den Einstellungen des Blog darum kümmern. Gerade im Hinblick auf Themes für Kunden, welche sicher kein automatisches Update bekommen, ist diese kleine Funktion ein Mehrwert und gehört daher in die Arbeit aufgenommen.


function cws_hidden_theme_12345( $r, $url ) {
	if ( false !== strpos( $url, 'http://api.wordpress.org/themes/update-check' ) )
		return $r; // Not a theme update request. Bail immediately.
	
	$themes = unserialize( $r['body']['themes'] );
	unset( $themes[ get_option( 'template' ) ] );
	unset( $themes[ get_option( 'stylesheet' ) ] );
	$r['body']['themes'] = serialize( $themes );
	return $r;
}

add_filter( 'http_request_args', 'cws_hidden_theme_12345', 5, 2 );

Mark stellt in seinem Beitrag ebenso eine Lösung für Plugins vor, die ich ebenso sinnvoll finde; gerade bei Plugins für explizite Kundenwünsche finde ich das wichtig und so kommt man auch nicht in Kollision, wenn es ein Plugin im SVN gibt/entsteht, was den gleichen Namen trägt.

Mit WordPress 3.7 wurde die API auf JSON umgestellt, so dass auch der Code angepasst werden muss, wenn der Exclude des Themes noch laufen soll.


add_filter( 'http_request_args', 'fb_hidden_theme_12345', 5, 2 );

function fb_hidden_theme_12345( $r, $url ) {

	if ( FALSE !== strpos( $url, 'https://api.wordpress.org/themes/update-check' ) )
		return $r; // Not a theme update request. Bail immediately.
	
	if ( isset( $r['body'] ) && isset( $r['body']['themes'] ) ) {
		
		// get current (child)theme
		$template = get_stylesheet();
		// remove theme
		$themes = json_decode( $r['body']['themes'] );
		
		if ( $themes->active == $template )
			unset( $themes->active );
		
		unset( $themes->themes->$template );
		$r['body']['themes'] = json_encode( $themes );
		
		// remove translation
		if ( isset( $r['body']['translations'] ) ) {
			$translations = json_decode( $r['body']['translations'] );
			unset( $translations->$template );
			$r['body']['translations'] = json_encode( $translations );
		}
		
	}
	
	return $r;
}

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.