Heute kommt, so der Terminplan eingehalten wird, die neue WordPressversion 2.3 raus. Neben einigen eher für Plugin-Programmierer interessanten Änderungen der Datenbankstruktur dürfte sich der WordPressnutzer mehr für die neuen Funktionen intessieren. Was es so an Neuerungen gibt, kann man im WP-Deutschland-Blog nachlesen, da wären z.B. Tags nebst Tagwolke, SEO-Verbesserungen und Updatebenachrichtigung.
Letzteres sorgt aber bereits jetzt für Unmut in der WP-Welt, denn diese durchaus sinnvolle Funktion überträgt beim Überprüfen der Versionsinformationen auch Daten, die dafür nicht erforderlich wären, so z.B. die Adresse (URL) des Blogs. Im WP-Forum wird bereits darüber diskutiert und das eine oder ander Blog berichten darüber. Es gibt auch schon Plugins, welche die Updatebenachrichtigungsfunktionen deaktivieren, nur dann werden gar keine Updateinformationen mehr angezeigt.
NEU: Jetzt auch als Plugin.
Ich beschreibe im Folgenden eine Möglichkeit, wie man die Versionsüberprüfung beibehalten kann, ohne aber die eigene Blog-URL an wordpress.org zu übertragen. Dafür kommt mal wieder meine Lieblingskind, die my-hacks.php zum Einsatz. Falls diese Datei im WordPress-Wurzelverzeichnis nicht existiert, legt man sie neu an. Dann kommt der folgende Code dort hinein:
<?php // Namen der Update- und Check-Funktion define('PLW_PLG_FUNC', 'wp_update_plugins'); define('PLW_VER_FUNC', 'wp_version_check'); // anonymisiert die URL function plw123_anon_url() { return "http://example.org"; } // "anonymisiert" aktive Plugins function plw123_no_active_plugins() { return "a:0:{}"; } // Ersetzt die originale 'wp_version_check' function plw123_anon_version_check() { if( function_exists( PLW_VER_FUNC ) ) { add_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); call_user_func( PLW_VER_FUNC ); remove_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); } } // Ersetzt die originale 'wp_update_plugins' function plw123_anon_update_plugins() { if( function_exists( PLW_PLG_FUNC ) ) { add_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); add_filter( 'pre_option_active_plugins', 'plw123_no_active_plugins', 99999 ); call_user_func( PLW_PLG_FUNC ); remove_filter( 'pre_option_active_plugins', 'plw123_no_active_plugins', 99999 ); remove_filter( 'pre_option_home', 'plw123_anon_url', 99999 ); } } // Versionschek entfernen und durch eigene Funktion ersetzen if( function_exists( PLW_VER_FUNC ) ) { remove_action( 'init', PLW_VER_FUNC ); add_action( 'init', 'plw123_anon_version_check' ); } // Plugin-Update entfernen und durch eigene Funktion ersetzen function plw123_change_update_plugins () { if( function_exists( PLW_PLG_FUNC ) ) { remove_action( 'load-plugins.php', PLW_PLG_FUNC ); add_action( 'load-plugins.php', 'plw123_anon_update_plugins' ); } } add_action( 'admin_menu', 'plw123_change_update_plugins' ); ?>
Download: my-hacks.php (als ZIP)
Der Trick besteht darin, das man während der Ausführung der wp_version_check und wp_plugin_updates Funktion ein Filter installiert, welches nicht die URL sondern einen beliebigen anderen Text zurückgibt. Diesen kann man in der Funktion plw123_anon_url festlegen, im Beispiel wird http://example.org zurückgegeben. Danach wird das Filter wieder entfernt. Um den Funktionsaufruf so „einrahmen“ zu können, werden die originalen Funktionen mit remove_action entfernt und statt dessen die eigenen Funktionen mit add_action installiert.
Nachtrag (24.09.2007 15:10): Ich habe nun noch zusätzlich die „Anonymisierung“ der aktiven Plugins eingebaut., das heißt, es wird keine Information mehr übertragen, welche Plugins auch tatsächlich aktiv sind.
Und dann gäbe es noch ein klassisches Henne-Ei-Problem, wenn der Code in einem Plugin verpackt wäre (was natürlich auch möglich ist). Um das Plugin zu aktvieren, muß man im Adminbereich die Pluginseite aufrufen und schwupps werden die Daten ersteinmal an WordPress gesendet. Beim Update von einer älteren Version ist das kein Problem, da kann man das Plugin vor dem Update einspielen und aktivieren. Bei einer Neuinstallation hat man aber so keine Chance. Deshalb ist das in der my-hacks.php besser aufgehoben. Dann muß diese aber auch bei „Einstellungen“ -> „Verschiedenes“ aktiviert werde (vor dem Update):
[x] Die veraltete my-hacks.php-Datei unterstützen.
Bei einer Neuinstallation muß man, wenn man ganz Sicher gehen will, die entsprechende my-hacks.php gleich mit kopieren und unmittelbar nach den WP-Installationsschritten vor dem ersten Aufruf zunächst direkt in der Datenbank die My-Hacks-Option aktvieren. Dazu in der Tabelle wp_options den Datensatz mit dem option_name hack_file suchen und den Wert für option_value zu 1 ändern.
Ein Problem gibt es allerdings. Sollten sich die Funktionsnamen oder der Ablauf der Versionskontrolle in zukünftigen WordPressversionen ändern, dann funktioniert der Hack nicht mehr und muß angepaßt werden.