<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schnurpsel &#187; WP (Wordpress)</title>
	<atom:link href="http://schnurpsel.de/themen/programmierung/wp_wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://schnurpsel.de</link>
	<description>Das Putzlowitsch Testblog für alles mögliche</description>
	<lastBuildDate>Sun, 05 Sep 2010 17:40:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=Vista 7</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Revierphone-Chart und Image-Map mit Shortcode</title>
		<link>http://schnurpsel.de/revierphone-chart-und-image-map-mit-shortcode-677/</link>
		<comments>http://schnurpsel.de/revierphone-chart-und-image-map-mit-shortcode-677/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 14:04:30 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Grafik]]></category>
		<category><![CDATA[Map]]></category>
		<category><![CDATA[reVierphone]]></category>
		<category><![CDATA[Shortcode]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/revierphone-chart-und-image-map-mit-shortcode-677/</guid>
		<description><![CDATA[Von einigen Nutzern meiner Revierphone-Charts tauchte auch die Frage auf, wie man die URLs der Grafik anklickbar machen kann. Das ist im Prinzip ganz einfach, mit einer image-map. :-)
Eine zum jeweils aktuellen Chart passende Map liegt im selben Verzeichnis wie die Grafik und hat den Namen top-10-map.txt. Dies Datei für Revierphone kann man ganz normal aufrufen und hineinsehen. Es steht ein Imagemap drin. Wichtig <a href='http://schnurpsel.de/revierphone-chart-und-image-map-mit-shortcode-677/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Von einigen Nutzern meiner <a href='http://schnurpsel.de/halt-stehenbleiben-revierphone-669/' title='Halt, stehenbleiben &#8211; reVierphone'>Revierphone</a>-Charts tauchte auch die Frage auf, wie man die URLs der Grafik anklickbar machen kann. Das ist im Prinzip ganz einfach, mit einer <a href='http://schnurpsel.de/was-bringen-links-in-image-maps-522/' title='Was bringen Links in Image-Maps?'>image-map</a>. :-)</p>
<p>Eine zum jeweils aktuellen Chart passende Map liegt im selben Verzeichnis wie die Grafik und hat den Namen <em>top-10-map.txt</em>. Dies <a href="http://chart.hbgf.de/revierphone/top-10-map.txt">Datei für Revierphone</a> kann man ganz normal aufrufen und hineinsehen. Es steht ein Imagemap drin. Wichtig ist dabei der Mapname, hier z.B. &#8216;gcmap-27&#8242;, mit dem die Map von der Grafik referenziert wird.</p>
<h3>Revierphone-Map mit Wordpress Shortcode</h3>
<p>Seit Wordperess Version 2.5 gibt es die <a href="http://codex.wordpress.org/Shortcode_API">Shortcodes</a> mit denen man spezielle Funktionen direkt in den Inhalt einer Seite oder eines Artikels einbinden kann. Ein Beispiel ist der seitdem existierende <a href="http://codex.wordpress.org/Gallery_Shortcode">gallery-Shortcode</a>, mit dem man die Bilder zu einem Beitrag als kleine Galerie im Artikel anzeigen kann.</p>
<p>Aber auch für eigene Erweiterungen ist die Shorcode-API wunderbar und vorallem einfach einsetzbar. Für das Einlesen der Revierphone-Image-Map sind nur wenige Zeilen PHP-Code in der <em>functions.php</em>-Datei des Themes erforderlich:</p>
<pre>function plw_get_chart_map( $atts, $content = null ) {
	extract( shortcode_atts( array(
		'name' => null,
	), $atts ) );

	if( is_null( $name ) )
		return '';

	$url = "http://chart.hbgf.de/$name/top-10-map.txt";
	$response = wp_remote_get( $url );
	if( is_wp_error( $response ) )
		return '';
	if( 200 != $response['response']['code'] )
		return '';

	return $response['body'];
}
add_shortcode( 'chartmap', 'plw_get_chart_map');</pre>
<p>Der Shortcode erwartet den Namen der Map als Parameter name. In diesem Fall ist es &#8216;revierphone&#8217;, alles klein geschrieben. Falls kein Name übergeben wurde, wird ein Leerstring zurück gegeben.</p>
<p>Dann wird die URL zusammengesetzt und die Map mit der Wordpress-Funktion wp_remote_get  eingelesen. Die Funktion gibt es erst seit <strong>Wordpress 2.7</strong>, deshalb funktioniert meine Funktion erst ab dieser Wordpress-Version. Man vermeidet durch Nutzung das Jonglieren mit den diversen Netzwerkfunktionen wie cURL, Streams und fsockopen. Wenn <a href='http://schnurpsel.de/wordpress-plugins/123-http-transport/' title='123 HTTP Transport'>die Konfiguration stimmt</a>, funktioniert das auch sehr gut, schließlich verwendet Wordpress die Funktion selbst für alle HTTP-Requests. :-)</p>
<p>Nach ein wenig gegebenenfalls erforderlicher Fehlerbehandlung wird vom Shortcode-Handler die eingelesene Map zurück gegeben.</p>
<h3>Revierphone-Chart mit klickbaren URLs</h3>
<p>Um die Image-Map im Wordpress-Artikel zu verwenden, muß an der gewünschen Stelle einfach der Shortcode mit dem map-Parameter eingegegen werden. Am besten dirket vor der Revierphone-Chart-Grafik selbst:</p>
<pre>&#91;chartmap name='revierphone'&#93;
&lt;img src="http://chart.hbgf.de/revierphone/top-10.png" alt="reVierphone Top-10" usemap="#gcmap-27"/&gt;</pre>
<p>Wichtig ist, damit es überhaupt funktioniert, beim img-Tag das Attribut <strong>usemap</strong>. Hier ist der Name der Map so wie im map-Tag angegeben mit einem vorangestellten Doppelkreuz einzutragen, also <strong>usemap=&#8221;#gcmap-27&#8243;</strong>.</p>
<p>Und so sieht das dann aus:<br />
<map name='gcmap-27'>
  <area shape='rect' coords='25,299,289,310' href='http://groups.google.de/group/revierphone/web/revierphone' alt='reVierphone - groups.google.de' title='http://groups.google.de/group/revierphone/web/revierphone'>
  <area shape='rect' coords='25,314,168,325' href='http://www.colour-crash.com/revierphone/' alt='reVierphone - www.colour-crash.com' title='http://www.colour-crash.com/revierphone/'>
  <area shape='rect' coords='25,329,199,340' href='http://revierphone.webdesign-berlin-1a.de/' alt='reVierphone - revierphone.webdesign-berlin-1a.de' title='http://revierphone.webdesign-berlin-1a.de/'>
  <area shape='rect' coords='25,344,277,355' href='http://www.mywebsolution.de/artikel/17/show_reVierphone.html' alt='reVierphone - www.mywebsolution.de' title='http://www.mywebsolution.de/artikel/17/show_reVierphone.html'>
  <area shape='rect' coords='25,359,165,370' href='http://twitter.com/revierphone2010' alt='reVierphone - twitter.com' title='http://twitter.com/revierphone2010'>
  <area shape='rect' coords='25,374,280,385' href='http://www.facebook.com/pages/ReVierPhone/148750171812552' alt='reVierphone - www.facebook.com' title='http://www.facebook.com/pages/ReVierPhone/148750171812552'>
  <area shape='rect' coords='25,389,416,400' href='http://dennisfarin.de/computer/seo/revierphone-seo-contest-handy-datentarif/2010/08/' alt='reVierphone - dennisfarin.de' title='http://dennisfarin.de/computer/seo/revierphone-seo-contest-handy-datentarif/2010/08/'>
  <area shape='rect' coords='25,404,102,415' href='http://revierphone.net/' alt='reVierphone - revierphone.net' title='http://revierphone.net/'>
</map>
<br />
<img src="http://chart.hbgf.de/revierphone/top-10.png" alt="reVierphone Top-10" title="reVierphone Top-10" width="500" usemap="#gcmap-27"/></p>
<p>Viel Spaß :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/revierphone-chart-und-image-map-mit-shortcode-677/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metaphysik und Müllabfuhr in Wordpress 2.9.x</title>
		<link>http://schnurpsel.de/metaphysik-und-muellabfuhr-in-wordpress-2-9-x-312/</link>
		<comments>http://schnurpsel.de/metaphysik-und-muellabfuhr-in-wordpress-2-9-x-312/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 09:39:24 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Kommentar]]></category>
		<category><![CDATA[Metadaten]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/metaphysik-und-muellabfuhr-in-wordpress-2-9-x-312/</guid>
		<description><![CDATA[Meta-stase
Durch diese kurze Meldung zu WPMU habe ich erst mitbekommen, daß es in Wordpress seit Version 2.9 eine neue Tabelle &#8216;wp_commentmeta&#8217; gibt. Für User und Posts gibt es ja schon länger die dazugehörigen Metadaten in wp_usermeta und wp_postmeta. Nun war ich natürlich neugierig, wofür diese neuen Kommentar-Metadaten in Wordpress verwendet werden.
Müllabfuhr
Ein wichtiger Punkt ist der seit WP 2.9 eingeführte Papierkorb (Trash). Hier werden Artikel, <a href='http://schnurpsel.de/metaphysik-und-muellabfuhr-in-wordpress-2-9-x-312/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Meta-stase</h3>
<p>Durch <a href="http://wpmu-tutorials.de/news/wordpress-mu-2-9-1-commentmeta-tabellen-einrichten/">diese kurze Meldung</a> zu WPMU habe ich erst mitbekommen, daß es in Wordpress seit Version 2.9 eine neue Tabelle &#8216;wp_commentmeta&#8217; gibt. Für User und Posts gibt es ja schon länger die dazugehörigen Metadaten in wp_usermeta und wp_postmeta. Nun war ich natürlich neugierig, wofür diese neuen Kommentar-Metadaten in Wordpress verwendet werden.</p>
<h3>Müllabfuhr</h3>
<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/01/muelltonnen.jpg'><img src='http://schnurpsel.de/wp-content/uploads/2010/01/muelltonnen-160x120.jpg' alt='Mülltonnen' title='Mülltonnen' class='rightimg' /></a>Ein wichtiger Punkt ist der seit WP 2.9 eingeführte Papierkorb (Trash). Hier werden Artikel, Seiten und auch Kommentare nicht sofort gelöscht, sondern landen zunächst im Papierkorb.</p>
<p>Genau dafür sind diese Metadaten wichtig. Der Trash-Status wird zwar direkt in den Tabellen wp_posts im Feld <em>post_status</em> als &#8216;trash&#8217; und wp_comments im Feld <em>comment_approved</em> als &#8216;trash&#8217; bzw. &#8216;post-trashed&#8217; vermerkt, zusätzlich aber auch in den Metadaten. Neben dem Status wird auch der Zeitpunkt des &#8220;Wegwerfens&#8221; in den Mülleimer festgehalten, und dafür gibt es keine Felder in den Post- und Kommentartabellen, dafür werden die Meta-Tabellen auf jeden Fall benötigt. Deshalb gibt es nun eine Tabelle für Comment-Metadaten.</p>
<p>Aber wen interessiert es, wann die Sachen in den Müll gewandert sind? Die Wordpress-Müllabfuhr. Die kommt einmal am Tag vorbei und nimmt alles mit, was schon länger als 30 Tage in der Tonne liegt. Man kann ihr aber auch sagen, das sie den Müll schon früher entsorgen soll oder bitte länger liegen läßt. Ein Eintrag in der wp-config.php genügt:</p>
<pre>define( 'EMPTY_TRASH_DAYS', 30 );</pre>
<p>Die 30 durch die gewünschte Anzahl an Müllvorhaltetage ersetzen.</p>
<h3>Metaphorisch</h3>
<p>Aber das ist natürlich nicht alles, was man mit den neuen Kommentar-Metadaten machen kann. Genau wie durch die Post-Metadaten bei Artikeln und Seiten ist es nun möglich, nahezu beliebige Daten zu einem Kommentar zu speichern. Der Phantasie sind da kaum Grenzen gesetzt. Denkbar wäre, hier die beliebte Sternchen-Wertung zu einem Kommentar abzuspeichern. Oder ein&#8230;, naja, mir fällt im Moment erstmal nichts weiter ein.</p>
<p>Die Funktionen für die Kommentar-Metadaten gibt es genauso wie für Post-Metadaten. Also z.B. update_post_meta -> update_comment_meta, get_post_meta -> get_comment_meta usw. Die Parameter sind praktisch dieselben, außer das dann natürlich nicht die Post-ID, sondern die Comment-ID übergeben wird.</p>
<h3>Meta-don</h3>
<p>Für Theme- und Pluginentwickler bieten die neuen Comment-Metadaten sicher berauschende Möglichkeiten für ganz neue, tolle und bisher ungeahnte Funktionen mit den Wordpress-Kommentaren. :-) </p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/metaphysik-und-muellabfuhr-in-wordpress-2-9-x-312/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was gibt&#8217;s Neues? &#8211; 123 Tweets</title>
		<link>http://schnurpsel.de/was-gibts-neues-123-tweets-310/</link>
		<comments>http://schnurpsel.de/was-gibts-neues-123-tweets-310/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 11:31:18 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/was-gibts-neues-123-tweets-310/</guid>
		<description><![CDATA[
So sieht gerade mein Twitter-Status (Putzlowitsch) aus, also insgesamt habe ich bisher 123 Tweets abgesetzt. Bei &#8220;123 Tweets&#8221; sind mir spontan meine Wordpress-Plugins eingefallen, die ich auch immer &#8220;123 Irgendwas&#8221; nenne. Da müßte ich jetzt also mal ein Twitter-Plugin entwickeln, daß ich dann &#8220;123 Tweets&#8221; nennen kann.
Ich weiß zwar noch nicht genau, was das Plugin machen wird, aber eine Idee habe ich schon. Da <a href='http://schnurpsel.de/was-gibts-neues-123-tweets-310/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2010/01/putzlowitsch-123-tweets.png'><img src='http://schnurpsel.de/wp-content/uploads/2010/01/putzlowitsch-123-tweets.png' alt='Schnurpsel 123 Tweets' title='Schnurpsel 123 Tweets' /></a><br />
So sieht gerade mein Twitter-Status (<a href="http://twitter.com/Putzlowitsch">Putzlowitsch</a>) aus, also insgesamt habe ich bisher 123 Tweets abgesetzt. Bei &#8220;123 Tweets&#8221; sind mir spontan meine Wordpress-Plugins eingefallen, die ich auch immer &#8220;123 Irgendwas&#8221; nenne. Da müßte ich jetzt also mal ein Twitter-Plugin entwickeln, daß ich dann &#8220;123 Tweets&#8221; nennen kann.</p>
<p>Ich weiß zwar noch nicht genau, was das Plugin machen wird, aber eine Idee habe ich schon. Da ich Twitter bisher im wesentlichen als Linkschleuder für meine Blogartikel verwende, könnte ich das doch gleich automatisieren. Wenn ich einen neuen Artikel publiziere, wird wird gleich ein entsprechender Tweet abgesetzt. Na mal sehen&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/was-gibts-neues-123-tweets-310/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BornToBeASeo &#8211; ein Plugintest</title>
		<link>http://schnurpsel.de/borntobeaseo-ein-plugintest-174/</link>
		<comments>http://schnurpsel.de/borntobeaseo-ein-plugintest-174/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 14:56:02 +0000</pubDate>
		<dc:creator>Babsi</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/borntobeaseo-ein-plugintest-174/</guid>
		<description><![CDATA[borntobeaseo
Eigentlich will ich für diese Anfrage nur testen, ob das 123 Moderate Comment Notification-Plugin auch unter Wordpress 2.8.x funktioniert. Da mir kein sinnvolles Thema eingefallen ist, muß nun wieder einmal borntobeaseo für den Test herhalten.
123 Moderate Comment Notification
Mit diesem Plugin kann man festlegen, wer alles eine E-Mail erhält, falls ein Kommentar z.B. zu borntobeaseo freigeschaltet werden muß. Normalerweise bekommt nur der Admin eine solche <a href='http://schnurpsel.de/borntobeaseo-ein-plugintest-174/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3><a href="http://www.schloebe.de/borntobeaseo/">borntobeaseo</a></h3>
<p>Eigentlich will ich für <a href='http://schnurpsel.de/wordpress-plugins/123-moderate-comment-notification/#comment-402' title='Kommentar zu: 123 Moderate Comment Notification'>diese Anfrage</a> nur testen, ob das <a href='http://schnurpsel.de/wordpress-plugins/123-moderate-comment-notification/' title='123 Moderate Comment Notification'>123 Moderate Comment Notification</a>-Plugin auch unter Wordpress 2.8.x funktioniert. Da mir kein sinnvolles Thema eingefallen ist, muß nun wieder einmal <a href="http://putzlowitsch.de/2009/07/19/borntobeaseo-nicht-mein-niveau/">borntobeaseo</a> für den Test herhalten.</p>
<h3>123 Moderate Comment Notification</h3>
<p>Mit diesem Plugin kann man festlegen, wer alles eine E-Mail erhält, falls ein Kommentar z.B. zu borntobeaseo freigeschaltet werden muß. Normalerweise bekommt nur der Admin eine solche E-Mail. In Multiautorenblogs kann es aber sinnvoll sein, das auch die Autoren selbst Kommentare (sofern sie berechtigt sind) zu ihren eigenen Beiträgen moderieren, damit der Admin entlastet wird.</p>
<h3><a href='http://schnurpsel.de/borntobeaseo-born-to-be-a-seo-niveau-165/' title='BornToBeASeo &#8211; Born To Be A Seo &#8211; mit Niveau'>borntobeaseo</a> &#8211; bitte jetzt kommentieren :-)</h3>
<p>Damit ich nun sehe, ob tatsächlich auch Babsi eine E-Mail bekommt, muß hier jetzt bitte jemand einen Kommentar zu <em>borntobeaseo</em> hinterlassen. Danke!</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/borntobeaseo-ein-plugintest-174/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das Ende der Wordpress-Hacker</title>
		<link>http://schnurpsel.de/das-ende-der-wordpress-hacker-145/</link>
		<comments>http://schnurpsel.de/das-ende-der-wordpress-hacker-145/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 08:01:49 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[my-hacks]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/das-ende-der-wordpress-hacker-145/</guid>
		<description><![CDATA[Fällt Euch bei dem Bild hier links (anklicken zum Vergrößern) etwas auf? Es zeigt die Einstellungs-Seite für &#8220;Verschiedenes&#8221; der neuen Wordpress-Version 2.8. Diese kann man sich vorab schon herunterladen und testen. Darauf gestoßen bin ich beim Wordpress-Deutschland Blog im Artikel &#8220;WordPress 2.8 Feature Freeze&#8220;. Und da dachte ich mir so, schau ich mir die neue Vorabversion von Wordpress 2.8 doch schon mal an. Auf <a href='http://schnurpsel.de/das-ende-der-wordpress-hacker-145/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a class='imagelink' href='http://schnurpsel.de/wp-content/uploads/2009/04/wp-28-einstellungen-verschiedenes.png'><img src='http://schnurpsel.de/wp-content/uploads/2009/04/wp-28-einstellungen-verschiedenes-160x120.png' alt='Wordpress 2.8 - Einstellungen &gt; Verschiedenes' title='Wordpress 2.8 - Einstellungen &gt; Verschiedenes' class='alignleft' /></a>Fällt Euch bei dem Bild hier links (anklicken zum Vergrößern) etwas auf? Es zeigt die Einstellungs-Seite für &#8220;Verschiedenes&#8221; der neuen Wordpress-Version 2.8. Diese kann man sich vorab schon herunterladen und testen. Darauf gestoßen bin ich beim <a href="http://blog.wordpress-deutschland.org/">Wordpress-Deutschland Blog</a> im Artikel &#8220;<a href="http://blog.wordpress-deutschland.org/2009/04/18/wordpress-28-feature-freeze.html">WordPress 2.8 Feature Freeze</a>&#8220;. Und da dachte ich mir so, schau ich mir die neue Vorabversion von Wordpress 2.8 doch schon mal an. Auf den ersten Blick und nach dem Durchklicken aller Menüpunkte im Adminbereich (Backend) habe ich so auf die Schnelle keine wesentlichen Änderungen entdecken können.</p>
<p>Nur gaaaanz unten, auf der letzten Einstellungsseite &#8220;Verschiedenes&#8221; traf mich fast der Schock. Die Option</p>
<blockquote><p>[x] Die veraltete my-hacks.php-Datei unterstützen</p></blockquote>
<p>ist verschwunde. Ein schwerer Schlag ins Kontor, für mich als bekennenden Fan der <a href='http://schnurpsel.de/hackers-paradise-12/' title='Hackers Paradise'>my-hacks.php</a>-Datei.<br />
<strong>Nachtrag:</strong> <a href="http://core.trac.wordpress.org/ticket/9551">Hier</a> findet man, warum es dazu kam.</p>
<p>Gut, wenn man die Option nicht mehr im Backend einstellen kann heißt das ja noch nicht unbedingt, daß sie nicht mehr vorhanden ist. Und tatsächlich, die Option &#8216;hack_file&#8217; gibt es noch immer und die my-hacks.php wird in wp-settings.php auch noch geladen, sofern die Option aktiv ist. Allerdings ist die von mir getestete Version von Wordpress 2.8 eine noch recht frühe Version, also nicht Beta oder gar RC. Wenn alles schief läuft, fliegt die Unterstützung für die my-hacks.php doch noch ganz raus, was ich sehr bedauern würde.</p>
<p>Vielleicht überlebt sie aber doch noch im Hintergrund und für diesen Fall habe ich schnell ein kleines Plugin geschrieben, welches die Option wieder auf der Einstellungsseite &#8220;Verschiedenes&#8221; zum Leben erweckt läßt :-)</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2009/04/plw123_hackfile_option_0_12.zip'>Plugin 123 Hackfile Option 0.12</a></p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/das-ende-der-wordpress-hacker-145/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.7 &#8211; Wartungsmodus ohne Plugin</title>
		<link>http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/</link>
		<comments>http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 21:14:01 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Wartung]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Wordpressupdate]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/</guid>
		<description><![CDATA[Seit Wordpress 2.7.x gibt es die Möglichkeit, Wordpress selbst aus dem Backend (Admin-Bereich) heraus zu aktualisieren. Damit während des Aktualisierungsprozesses, der je nach Umfang länger dauern kann und möglicherweise eine Datenbankaktualisierung erforderlich macht, auf Grund inkonsistenter Zustände keine Fehler auftreten, versetzt WP sich selbst in einen Wartungsmodus. Der Nutzer, der das Blog aufruft, bekommt einen kurzen Hinweis angezeigt, daß gerade eine Wartung läuft und <a href='http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Seit Wordpress 2.7.x gibt es die Möglichkeit, Wordpress selbst aus dem Backend (Admin-Bereich) heraus zu aktualisieren. Damit während des Aktualisierungsprozesses, der je nach Umfang länger dauern kann und möglicherweise eine Datenbankaktualisierung erforderlich macht, auf Grund inkonsistenter Zustände keine Fehler auftreten, versetzt WP sich selbst in einen Wartungsmodus. Der Nutzer, der das Blog aufruft, bekommt einen kurzen Hinweis angezeigt, daß gerade eine Wartung läuft und die Seite bald wieder verfügbar ist.</p>
<p>Diesen Maintenance-Modus kann man ganz ohne WP-Coreupdate auch manuell aktivieren. Vielleicht sind ja irgendwelche Abeiten an der Datenbank erforderlich oder man möchte das Blog aus anderen Gründen vorübergehend vom Netz nehmen.</p>
<h3>So funktionierts</h3>
<p>Wordpress legt beim Start des Aktualisierungsprozesses einfach im WP-Wurzelverzeichnis eine Datei <em>.maintenance</em> an. In der Datei steht nur eine Zeile PHP-Code drin, in welchem die Variable <em>$upgrading</em> mit der Funtion <em>time()</em> den Startzeitpunktes fest zugewiesen bekommt. Nach erfolgreichem Update wird diese Datei einfach wieder gelöscht. Sollte was schief laufen und die Datei ist nach 10 Minuten ab Start imm noch da, wird der Maintenance-Modus beendet und der Admin erhält im Backend einen entsprechneden Hinweis angezeigt.</p>
<p>Um Wordpress direkt in den Wartungsmodus zu versetzen, reicht es also, eine Datei mit folgendem Imhalt in das Wordpress-Wurzelverzeichnis zu kopieren:</p>
<pre>&lt;?php $upgrading = time(); ?&gt;</pre>
<p>Am einfachsten ist es, diese <a href='http://schnurpsel.de/wp-content/uploads/2009/03/maintenance.txt'>maintenance.txt</a>-Datei per FTP in das Wordpress-Wurzelverzeichnis zu kopieren und dort in <strong><em>.maintenance</em></strong> umzubenennen.<br />
Das war es schon, ab sofort gibt die Seite nur noch diese Meldung aus:</p>
<p><strong>Die Seite ist ganz kurz nicht erreichbar. In einer Minute sollte wieder alles klappen.</strong></p>
<p>Auch das Backend ist nicht erreichbar, man kann sich also nicht anmelden noch sonst etwas im Adminbereich machen.<br />
Um den Wartungsmodus zu beenden, muß man einfach die Datei <em>.maintenance</em> löschen oder z.B. wieder in <em>maintenance.txt</em> umbenennen.</p>
<h3>Wartungsmodus mit Adminzugriff</h3>
<p>Nun möchte man aber vielleicht trotz Wartungsmodus auf den Adminbereich zugreifen. Dafür muß man die .maintenance-Datei dahingehend erweitern, daß überprüft wird, ob Seiten aus dem Adminberich oder die wp-login.php aufgerufen wurden. Ich habe das wie folgte realisiert:</p>
<pre>&lt;?php
$url_parts = parse_url( $_SERVER['REQUEST_URI'] );
$path_parts = pathinfo( $url_parts['path'] );
$dir_parts = explode( "/", $path_parts['dirname'] );
$dirname = end($dir_parts);
$filename = $path_parts['basename'];

$is_admin =	'wp-admin'==$dirname || 'wp-admin'==$filename;
$is_login =	'wp-login.php'==$filename;

if( $is_admin || $is_login )
	unset( $upgrading );
else
	$upgrading = time();
?&gt;</pre>
<p>Download: <a href='http://schnurpsel.de/wp-content/uploads/2009/03/maintenance_admin.zip'>maintenance admin</a></p>
<p>Auch hier einfach die ZIP-Datei entpacken, die enthaltene Datei <em>maintenance_admin.txt</em> per FTP in das WP-Wurzelverzeichnis kopieren und in <em>.maintenance</em> umbenennen.</p>
<p>Nun wird beim Aufruf des Blogs der Wartungshinweis angezeigt, man kann sich aber im Backend anmelden und dort alles machen, was sich innerhalb des Admin-Breiches abspielt. Demzufolge funktionieren z.B. aber die Artikelvorschau und die Themevorschau nicht.</p>
<p>Es ist natürlich möglich, weitere Bedingungen zu prüfen und die Zugriffsmöglichkeiten zu erweitern. Man muß aber beachten, das innerhalb der <em>.maintenance</em>-Datei kein Zugriff auf irgendwelche Wordpress-Funktionen besteht und man weitestgehend mit dem auskommen muß, was PHP zur Verfügung stellt. So kann man nicht etwa die Anmeldung mit den Nutzerdaten überprüfen, wohl aber das vorhandensein des Anmelde-Cookies.</p>
<h3>Wartungsmeldung anpassen</h3>
<p>Wem die schlichte Meldung nicht gefällt, die Wordpress im Wartungsmodus ausgibt, kann auch hier selbst Hand anlegen. Dazu prüft Wordpress, ob es im <em>wp-content</em>-Verzeichnis eine Datei <strong><em>maintenance.php</em></strong> gibt und wenn ja, wird diese anstelle der Standarmeldung geladen und ausgeführt.</p>
<p>Als Beispiel habe ich den Code aus der <em>wp-settings.php</em> genommen und leicht angepaßt:</p>
<pre>&lt;?php
	$retry = 120;
	$protocol = $_SERVER[&quot;SERVER_PROTOCOL&quot;];
	if ( 'HTTP/1.1' != $protocol &amp;&amp; 'HTTP/1.0' != $protocol )
		$protocol = 'HTTP/1.0';
	header( &quot;$protocol 503 Service Unavailable&quot;, true, 503 );
	header( 'Content-Type: text/html; charset=utf-8' );
	header( &quot;Retry-After: $retry&quot; );
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
	&lt;title&gt;Wartungsarbeiten&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Wartungsarbeiten&lt;/h1&gt;
	&lt;p&gt;Die Seite ist für kurze Zeit nicht erreichbar. In ein paar Minute sollte wieder alles klappen.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Download: <a href='http://schnurpsel.de/wp-content/uploads/2009/03/maintenance.zip'>maintenance.zip</a><br />
Die ZIP-Datei entpacken, die enthaltene Datei <em>maintenance.php</em> gegebenfalls nach eigenen Wünschen anpassen und per FTP in das <em>wp-content</em>-Verzeichnis kopieren.</p>
<p>Wichtig ist das korrekte Setzen vom HTTP-Status im Antwort-Header. Für Wartungsarbeiten oder sonstige, zeitweilige Ausfälle sieht HTTP den <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4">Status 503</a> vor. Zudem sollte auch ein Wert für <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.37">Retry-After</a> gesetzt werden. Ich habe da jetzt 120 Sekunden genommen, es kann aber auch ein konkreter <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3">Zeitpunkt</a> eingetragen werde, zu dem das Blog voraussichtlich wieder verfügbar ist.</p>
<p>Nach dem PHP-Block kann man seiner Phantasie HTML-technisch freien Lauf lassen. Aber auch hier gilt, man hat <strong>keinen</strong> Zugriff auf irgendwelche Wordpress-Funktionen.</p>
<h3>Fazit</h3>
<p>Seit Wordpress 2.7 ist es mit einfachen Hausmitteln ohne Plugin möglich, das Blog in einen Wartungsmodus zu versetzen, um Zugriffe während Arbeiten am System oder der Datenbank zu unterbinden. Optional kann auch der Zugriff auf das Backend (wp-admin) gewähleistet werden.</p>
<p><strong>Vorteil</strong> dieser einfachen Lösung ist es, daß sie bereits greift, bevor WP selbst geladen wird und auch bevor irgendwelche Zugriffe auf die Datenbank erfolgen. <strong>Kleiner Nachteil</strong> ist, daß innerhalb der <em>.maintenance</em>-Datei und der optionalen Meldungsseite maintenance.php kein Zugriff auf Wordpressfunktionen besteht.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-27-wartungsmodus-ohne-plugin-139/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Das neue Wordpress 2.7</title>
		<link>http://schnurpsel.de/das-neue-wordpress-27-114/</link>
		<comments>http://schnurpsel.de/das-neue-wordpress-27-114/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 21:45:21 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Wordpressupdate]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/das-neue-wordpress-27-114/</guid>
		<description><![CDATA[Ja, ich habe es getan. Ich habe hier auf Wordpress 2.7 upgedated. Wenn es schief gegangen wäre, und es ist auch erstmal schief gegangen, wäre es nicht so schlimm gewesen. Das hier ist ja nur das &#8220;Wordpress bei Strato Testblog&#8221;, also zum Testen. Gut, es haben sich in der Zeit seit dem ersten Artikel (der noch nicht mal von mir ist) im Juni 2007 <a href='http://schnurpsel.de/das-neue-wordpress-27-114/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Ja, ich habe es getan. Ich habe hier auf Wordpress 2.7 upgedated. Wenn es schief gegangen wäre, und es ist auch erstmal schief gegangen, wäre es nicht so schlimm gewesen. Das hier ist ja nur das &#8220;Wordpress bei Strato Testblog&#8221;, also zum Testen. Gut, es haben sich in der Zeit seit dem <a href='http://schnurpsel.de/hallo-welt-1/' title='Hallo Welt!'>ersten Artikel</a> (der noch nicht mal von mir ist) im Juni 2007 doch einige Beiträge angesammelt, es sind auch durchaus nützliche Plugins enstanden, aber wenn es schief gegangen wäre, hätte ich das verkraften können.</p>
<p>Ja, ich habe auch vorher die Datenbank mit phpMyAdmin gesichert, die neuen Wordpress-Dateien per FTP in ein neues Verzeichnis auf dem Server hochgeladen, mit meinem xcopy-Skript alle relevanten Daten der laufenden WP-Installtion (2.5.1) in das neue Verzeichnis übertragen. So hatte ich mein komplettes, altes Wordpress sowohl auf Datei- als auch Datenbankeben als Sicherungskopie noch in der Hinterhand, dachte ich zumindest.</p>
<p>Das schöne an dem Kopier-Update-Verfahren ist, man kann einfach durch Umbenennen des Serververzeichnisses auf die neue Version umschalten, und im Fehlerfall auch wieder zurück.<br />
Aber nach dem erforderlichen Datenbank-Update sah alles prima aus. Die neue Adminoberfläche im Backend gefällt mir ausgesprochen gut. Da wollte ich natürlich gleich einen Artikel schreiben, gesagt getan. Doch plötzlich, wie aus heiterem Himmel kommt ein <strong>Fehler 500</strong> (schwerer Serverfehler), der schlimmste Fehler, den man sich im Web so vorstellen kann.<br />
Als leidgeprüfter Strato-Nutzer ist man aber auch durch einen 500er nicht wirklich zu erschrecken, den gab es früher oft, wenn man als WP-Neueinsteiger ganz unbeschwert die Permalinks aktiviert hatte. Das war ohne funktionierendes <em>mod_rewrite</em> keine gute Idee. Aber auch das ist nun bei Strato <a href='http://schnurpsel.de/strato-wird-vernunfig-mod_rewrite-funktioniert-79/' title='Strato wird vernünfig, mod_rewrite funktioniert'>kein Thema</a> mehr.</p>
<p><a href='http://schnurpsel.de/sicher-ist-sicher-datenbanksicherung-bei-strato-132/' title='Sicher ist sicher &#8211; Datenbanksicherung bei Strato'>Weiter lesen (2. Teil)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/das-neue-wordpress-27-114/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.5 &#8211; Shortcode und die Bildergalerie</title>
		<link>http://schnurpsel.de/wordpress-25-shortcode-und-die-bildergalerie-94/</link>
		<comments>http://schnurpsel.de/wordpress-25-shortcode-und-die-bildergalerie-94/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 15:35:26 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Gallery]]></category>
		<category><![CDATA[Mediathek]]></category>
		<category><![CDATA[Shortcode]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-25-shortcode-und-die-bildergalerie-94/</guid>
		<description><![CDATA[Neue Features
In Wordpress ab Version 2.5 wurde die Attachment-Verwaltung erheblich erweitert und verbessert. Sie firmiert nun unter dem Schlagwort Mediathek. Eine wesentliche Erleichterung ist meiner Meinung nach die Möglichkeit, mehrere Dateien (z.B. Bilder) auswählen und in einem Rutsch hochladen zu können. Ein weiteres Highlight sind die sogenannten Shortcodes, kleine Textbausteine, die bei der Ausgabe in viele schöne Sachen verwandelt werden können. Die Shortcodes sin <a href='http://schnurpsel.de/wordpress-25-shortcode-und-die-bildergalerie-94/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Neue Features</h3>
<p>In Wordpress ab Version 2.5 wurde die Attachment-Verwaltung erheblich erweitert und verbessert. Sie firmiert nun unter dem Schlagwort Mediathek. Eine wesentliche Erleichterung ist meiner Meinung nach die Möglichkeit, mehrere Dateien (z.B. Bilder) auswählen und in einem Rutsch hochladen zu können. Ein weiteres Highlight sind die sogenannten Shortcodes, kleine Textbausteine, die bei der Ausgabe in viele schöne Sachen verwandelt werden können. Die Shortcodes sin aber eher etwas für Plugin-Entwickler, der normale Nutzer hat erstmal nichts davon.<br />
Einen solchen Shortcode liefert Wordpress aber bereits mit, es ist eine einfache Bilder-Galerie.</p>
<h3>Die Worpress-Bildergalerie</h3>
<p>Aus Anwendersicht ist das mit den Shortcodes ganz einfach, man fügt das gewünschte Kürzel, gegebenfalls mit Parametern, einfach in eckigen Klammern an der Stelle im Text ein, wo die Ausgabe erfolgen soll. Für die WP-Bildergalerie sieht das z.B. so aus:</p>
<pre>&#91;gallery columns='2']</pre>
<p>Bei der Anzeige das Artikels wird dann dieser Shortcode z.B. durch eine Bildergalerie ersetzt:</p>

<a href='http://schnurpsel.de/wp-content/uploads/2008/06/bild1.jpg' title='Bild 1 - Grafikkarte'><img width="160" height="120" src="http://schnurpsel.de/wp-content/uploads/2008/06/bild1-160x120.jpg" class="attachment-thumbnail" alt="Bild 1 - Grafikkarte" title="Bild 1 - Grafikkarte" /></a>
<a href='http://schnurpsel.de/wp-content/uploads/2008/06/bild2.jpg' title='Bild 2 - Tomaten'><img width="160" height="120" src="http://schnurpsel.de/wp-content/uploads/2008/06/bild2-160x120.jpg" class="attachment-thumbnail" alt="Bild 2 - Tomaten" title="Bild 2 - Tomaten" /></a>
<a href='http://schnurpsel.de/wp-content/uploads/2008/06/bild3.jpg' title='Bild 3 - Wunderkerze'><img width="160" height="120" src="http://schnurpsel.de/wp-content/uploads/2008/06/bild3-160x120.jpg" class="attachment-thumbnail" alt="Bild 3 - Wunderkerze" title="Bild 3 - Wunderkerze" /></a>
<a href='http://schnurpsel.de/wp-content/uploads/2008/06/bild4.jpg' title='Bild 4 - Prag'><img width="160" height="120" src="http://schnurpsel.de/wp-content/uploads/2008/06/bild4-160x120.jpg" class="attachment-thumbnail" alt="Bild 4 - Prag" title="Bild 4 - Prag" /></a>
<a href='http://schnurpsel.de/wp-content/uploads/2008/06/bild5.jpg' title='Bild 5 - Industrie-Ruine'><img width="160" height="120" src="http://schnurpsel.de/wp-content/uploads/2008/06/bild5-160x120.jpg" class="attachment-thumbnail" alt="Bild 5 - Industrie-Ruine" title="Bild 5 - Industrie-Ruine" /></a>
<a href='http://schnurpsel.de/wp-content/uploads/2008/06/bild6.jpg' title='Bild 6 - Landschaft mit Pferd'><img width="160" height="120" src="http://schnurpsel.de/wp-content/uploads/2008/06/bild6-160x120.jpg" class="attachment-thumbnail" alt="Bild 6 - Landschaft mit Pferd" title="Bild 6 - Landschaft mit Pferd" /></a>

<p>So könnte es aussehen. Die Ausgabe läßt sich durch ein paar Parameter steuern, so legt der Parameter &#8216;columns&#8217; z.B. fest, wieviele Spalten die Galerie verwenden soll (Standardwert ist 3). Im Beispiel habe ich 2 Spalten eingestellt.<br />
Alle Parameter und die Verwendung des Gallery-Shortcodes sind im <a href="http://codex.wordpress.org/Using_the_gallery_shortcode">WP-Codex</a> beschrieben.</p>
<h3>Erweiterung &#8211; Der Link</h3>
<p>Eine wie ich meine wichtige Sache haben die Entwickler aber vergessen. In der Standard-Galerie wird vom Vorschaubild immer auf die Bilderseite (<a href='http://schnurpsel.de/wordpress-25-shortcode-und-die-bildergalerie-94/bild1/' title='Bild 1 &#8211; Grafikkarte'>Beispiel Bild 1</a>) verlinkt, nicht auf das Bild selbst. Das ist so im PHP-Quelltext fest &#8220;verdrahtet&#8221;. Dabei wäre es kein großes Sache gewesen auch dafür einen Parameter vorzusehen. Aber was nicht ist, kann man glücklicherweise mit einem Plugin nachrüsten. So habe ich einfach die originale <em>gallery_shortcode</em>-Funktion genommen und um den Parameter <strong>attlink</strong> erweitert. Das Plugin selbst und eine Kurze Beschreibung findet man auf meiner Plugin-Seite &#8220;<a href='http://schnurpsel.de/wordpress-plugins/123-extended-gallery/' title='123 Extended Gallery'>123 Extended Gallery</a>&#8220;.</p>
<p>Und noch etwas habe ich verändert. Im Originalcode wird der CSS-Teil zur Formatierung der Galerie direkt in den Artikel geschrieben. Das ist alles andere als HTML-konform. So habe ich den CSS-Teil rausgezogen und in den Header verlegt, dahin wo soetwas hingehört. Einziger kleiner Nachteil, die CSS-Sachen werden immer im Header ausgegeben, auch wenn später im Artikel gar keine Galerie vorhanden ist. Aber damit kann ich leben.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-25-shortcode-und-die-bildergalerie-94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hinweis für Wordpress-Plugin-Programmierer</title>
		<link>http://schnurpsel.de/hinweis-fur-wordpress-plugin-programmierer-82/</link>
		<comments>http://schnurpsel.de/hinweis-fur-wordpress-plugin-programmierer-82/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 17:03:22 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/hinweis-fur-wordpress-plugin-programmierer-82/</guid>
		<description><![CDATA[Das einfachste Plugin für Wordpress besteht nur aus einer PHP-Datei, da gibt es auch keine Probleme. Wenn man aber das Plugin modular gestaltet, eventuell noch Grafiken, Stylesheets oder JavaScript-Dateien laden will, fangen die Schwierigkeiten an.
Das Nachladen von PHP-Modulen ist noch relativ einfach, sofern sich die Dateien im selben Verzeichnis wie das Hauptmodul befinden. Da reicht ein einfaches
include( 'modul-2.php');
 und man muß sich keine Gedanken <a href='http://schnurpsel.de/hinweis-fur-wordpress-plugin-programmierer-82/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Das einfachste Plugin für Wordpress besteht nur aus einer PHP-Datei, da gibt es auch keine Probleme. Wenn man aber das Plugin modular gestaltet, eventuell noch Grafiken, Stylesheets oder JavaScript-Dateien laden will, fangen die Schwierigkeiten an.</p>
<p>Das Nachladen von PHP-Modulen ist noch relativ einfach, sofern sich die Dateien im selben Verzeichnis wie das Hauptmodul befinden. Da reicht ein einfaches
<pre>include( 'modul-2.php');</pre>
<p> und man muß sich keine Gedanken über Pfade und Verzeichnisse machen.</p>
<p>Anders ist es bei Grafik-, CSS- oder Javascript-Dateien. Hier wird eine gültige URL benötigt, also muß man das Verzeichnis wissen, in dem sich das Plugin befindet. Und zwar nicht den absoluten Pfad auf dem Server, sondern den Pfad bezogen auf die Webseiten-Adresse. Häufig sieht man dann so etwas:</p>
<pre>$css = get_option( 'siteurl' ).'/wp-content/plugins/my-plugin/my-style.css';</pre>
<p>Es wird also einfach davon ausgegangen, daß Plugins immer im Verzeichnis &#8216;wp-content/plugins&#8217; liegen. Das müssen sie aber nicht, denn in Wordpress ist dafür extra die Konstante <strong>PLUGINDIR</strong> vorgesehen.</p>
<p>Diese wird in der wp-settings.php wie folgt definiert:</p>
<pre>if ( !defined('PLUGINDIR') )
	define('PLUGINDIR', 'wp-content/plugins'); // no leading slash, no trailing slash</pre>
<p>Das <em>if ( !defined(&#8216;PLUGINDIR&#8217;) )</em> läßt erahnen, daß es durchaus vorgesehen ist, hier auch vorab ein anderes Verzeichnis zu definieren. Ganau davon mache ich Gebrauch, indem ich ein abweichendes Plugin-Verzeichnis in der wp-config.php definieren. Das ist eine einfache Möglichkeit, sich ein wenig vor Angriffen auf Schwachstellen in Plugins zu schützen. Denn auch die meisten Angreifer gehen davon aus, daß sie Plugins in Verzeichnis &#8216;wp-content/plugins&#8217; liegen, sofern sie <a href='http://schnurpsel.de/skriptkiddies-sind-doof-69/' title='Skriptkiddies sind doof'>überhaupt so intelligent</a> sind.</p>
<p>Wenn nun ein Plugin selbst einfach &#8216;wp-content/plugins&#8217; anstelle von PLUGINDIR verwendet, sind Schwierigkeiten vorprogrammiert. Deshalb, liebe Plugin-Programmierer, verwendet bitte immer PLUGINDIR, um Pfade zusammenzusetzen. Für das obige Beispiel könnte das etwa so aussehen:</p>
<pre>$css = get_option( 'siteurl' ).'/'. PLUGINDIR.'/my-plugin/my-style.css';</pre>
<p>Ich verwende z.B. folgende Funktion, damit ich auch unabhängig davon bin, in welchem Unterverzeichnis innerhalb des Pluginverzeichnisses die Dateien liegen:</p>
<pre>// ermittelt das Pluginverzeichnis
function plw123_plugin_basedir( $file ) {
	$file = str_replace('\\','/',$file); // Windows Verzeichnistrenner "umkippen"
	$file = preg_replace('|/+|','/', $file); // doppelte Schrägstriche entfernen
	$file = preg_replace('|^.*/' . PLUGINDIR . '/|','',$file); // relativen Pfad zum Plugin-Dir ermitteln
	return '/'.PLUGINDIR."/$file/";
}

...

$pluginPath = plw123_plugin_basedir( dirname(__FILE__) );
$css = get_option( 'siteurl' ).$pluginPath.'my-style.css';
</pre>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/hinweis-fur-wordpress-plugin-programmierer-82/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>GROUP BY auf ein Unique Field kann durchaus sinnvoll sein</title>
		<link>http://schnurpsel.de/group-by-auf-ein-unique-field-kann-durchaus-sinnvoll-sein-81/</link>
		<comments>http://schnurpsel.de/group-by-auf-ein-unique-field-kann-durchaus-sinnvoll-sein-81/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 11:18:19 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[GROUP BY]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sortierung]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/group-by-auf-ein-unique-field-kann-durchaus-sinnvoll-sein-81/</guid>
		<description><![CDATA[Kürzlich hatte ich einen Beitrag zu dem Problem mit Wordpress und der Sortierreihenfolge bei MySQL 5.0.51 (wie es derzeit bei Strato verwendet wird) geschrieben und mich dort über das vermeintlich unsinnige GROUP BY mit einem eindeutigen Feld (ID) ausgelassen. Für eine einfache SQL-Abfrage, wie dort beim ersten Beispiel, ist das auch durchaus richtig, da ist das &#8220;GROUP BY id&#8221; tatsächlich sinnfrei.
Bei Wordpress ab Version <a href='http://schnurpsel.de/group-by-auf-ein-unique-field-kann-durchaus-sinnvoll-sein-81/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Kürzlich hatte ich einen Beitrag zu dem Problem mit <a href='http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/' title='Wordpress und die suboptimale MySQL-Optimierung (5.0.51)'>Wordpress und der Sortierreihenfolge</a> bei MySQL 5.0.51 (wie es derzeit bei Strato verwendet wird) geschrieben und mich dort über das vermeintlich unsinnige GROUP BY mit einem eindeutigen Feld (ID) ausgelassen. Für eine einfache SQL-Abfrage, wie dort beim ersten Beispiel, ist das auch durchaus richtig, da ist das &#8220;GROUP BY id&#8221; tatsächlich sinnfrei.</p>
<p>Bei Wordpress ab Version 2.1 wurde das dann auch geändert, hier wird dieses GROUP BY mit der ID nur noch dann eingefügt, wenn es tatsächlich benötigt wird, nämlich wenn man die Abfrage auf bestimmte Kategorien oder Tags einschränken will. Das könnte z.B. etwa so aussehen:</p>
<pre>&lt;?php  query_posts( $query_string.'&#038;cat=1,2,3' ); ?&gt;</pre>
<p>Hier will man zum Beispiel nur Artikel anzeigen, die in Kategorie 1, 2 oder 3 enthalten sind. Wenn nun ein Artikel mehreren Kategorien zugeordnet ist, würde das dazu führen, daß dieser Artikel auch mehrmals in der Liste steht und das will man ja nicht. Genau hier bewirkt das GROUP BY id, daß jeder Artikel nur einmal auftaucht. Man hätte das zwar ebenso mit DISTINCT erreicht, aber WP macht es halt mit GROUP BY. Letztendlich ergibt sich daraus ein Problem, welches aber einer fehlerhaften Implementierung von MySQL 5.0.51 zuzuschreiben ist.</p>
<p>Da ich bei mir nicht mit Kategorien oder Tags in den Abfragen arbeite, war mir das bisher auch nicht klar. Erst ein <a href="http://wordpress.org/support/topic/154622#post-700311">Beitrag</a> im wordpress.org Forum hat mir die Augen geöffnet (Dank an Otto42 für die erhellenden Worte :-).</p>
<p>Was bedeutet das nun für die Praxis? Ganz klar, das Problem kann nur durch ein Update von MySQL behoben werden, da ist dann der Webhoster in der Pflicht. Nun ist es aber nicht ganz einfach, goße Hoster wie Strato dazu zu bewegen, zumal es MySQL 5.0.53 wohl auch noch nicht gibt.<br />
In der Zwischenzeit kann erstmal mein <a href='http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/' title='Wordpress und die suboptimale MySQL-Optimierung (5.0.51)'>Plugin</a> helfen, welches das GROUP BY id in ein GROUP BY post_date &#8220;verbiegt&#8221;. Einen kleinen Nachteil hat das aber. Wenn es zwei oder mehrere Artikel mit auf die Sekunde übereinstimmendem Veröffentlichungszeitpunkt gibt, wird nur einer von diesen dargestellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/group-by-auf-ein-unique-field-kann-durchaus-sinnvoll-sein-81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress und die suboptimale MySQL-Optimierung (5.0.51)</title>
		<link>http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/</link>
		<comments>http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 11:52:00 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[GROUP BY]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sortierung]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/</guid>
		<description><![CDATA[Problem
Es ist ja lobenswert, daß Strato relativ schnell die MySQL-Versionen aktualisiert, vor ein paar Tagen von 5.0.45 auf 5.0.51. Man sollte auch denken, daß es dadurch mit Applikationen keine Probleme geben dürfte. Nich so diesmal, denn plötzlich stimmte bei so manchen Wordpressinstalltionen die Sortierreihenfolge der Beiträge nicht mehr, wie mehrere Nutzer im WP-Deutschlanforum beklagten. Aber nicht nur Strato war davon betroffen, auch bei 1&#038;1 <a href='http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Problem</h3>
<p>Es ist ja lobenswert, daß Strato relativ schnell die MySQL-Versionen aktualisiert, vor ein paar Tagen von 5.0.45 auf 5.0.51. Man sollte auch denken, daß es dadurch mit Applikationen keine Probleme geben dürfte. Nich so diesmal, denn plötzlich stimmte bei so manchen Wordpressinstalltionen die Sortierreihenfolge der Beiträge nicht mehr, wie mehrere Nutzer im <a href="http://forum.wordpress-deutschland.org/konfiguration/29146-sortierreihenfolge-der-beitraege-ploetzlich-vertauscht.html">WP-Deutschlanforum</a> beklagten. Aber nicht nur Strato war davon betroffen, auch bei 1&#038;1 und anderen Hostern gab es Probleme.</p>
<p>Normalerweise kommen ja die neuesten Artikel zuerst, es wird also absteigen nach Datum sortiert. Nun waren aber plötzlich die ältesten Beiträge ganz oben, als scheinbar eine umgekehrte, also aufsteigende Sortierung. Und niemand hatte bewußt etwas verändert, also keine Plugins installiert oder die Themedateien bzw. die Konfiguration angepaßt. Also konnte es nur am Hoster liegen. Da ich hier bei Schnurpsel diesen Effekt nicht beobachten konnte, dachte ich zunächst doch an irgendein Plugin, bis ich mal spaßeshalber mein Wordpress-2.0.x-Testbolg aufgrufen hatte. Und siehe da, auch hier waren die Beiträge plötzlich nicht mehr in der gewünschten Reihenfolge. Da ich dort aber wirklich seit Monaten nichts verändert hatte und nur ein paar eigene Plugins verwende, mußte es doch irgendeine andere Ursache haben. Zumindest hatte ich jetzt die Chance, der Sache auf den Grund zu gehen.</p>
<h3>Hintergrund</h3>
<p>Meine erster Schritt war, mir mal die von WP generierte SQL-Abfrage anzusehen. Meine Vermutung war zunächst, daß irgendwo die Sortierung (ORDER BY post_date) verloren geht. So sieht die SQL-Abfrage aus:</p>
<pre>SELECT DISTINCT *
 FROM wp20_posts
 WHERE 1 =1
 AND post_date_gmt <= '2008-01-11 22:03:59'
 AND (
  post_status = 'publish'
  OR post_author =1
  AND post_status != 'draft'
  AND post_status != 'static'
 )
 AND post_status != 'attachment'
 GROUP BY wp20_posts.ID
 ORDER BY post_date DESC
 LIMIT 0 , 10</pre>
<p>Vom komischen WHERE 1=1 mal abgesehen gab es zumindest keine Auffälligkeiten, die Sortierung ist auch drin aber was soll bitte das <em>GROUP BY wp20_posts.ID</em>? Das Feld ID ist ein Autoinkrement-Feld, also immer eindeutig (UNIQUE) und somit kann es da nie zwei- oder mehrmals den selben Wert geben, also kann auch nichts gruppiert werden. Mit <em>GROUP BY feldname</em> werden normalerweise Datensätze zusammengefaßt, die in dem oder den angegebenen Feldern die selben Werte enthalten. Ein Blick in den Quelltext gibt dann Aufschluß, dieses <em>GROUP BY</em> ist beim Zusammensetzen des SQL-Strings fest codiert und muß daher immer belegt werden, damit die Abfrage syntaktisch richtig ist:</p>
<pre>"SELECT $distinct * FROM $wpdb->posts $join WHERE 1=1" . $where . " GROUP BY " . $groupby . " ORDER BY " . $orderby . " $limits";</pre>
<p>Wenn keine echte Gruppierung verwendet wird, wird dafür einfach als Dummy-Wert das Feld ID eingesetzt. Normalerweise kein Probem, weil ja eben dadurch nichts gruppiert wird. Und genau deshalb wird sowas auch vom SQL-Server letztendlich wegoptimiert, daß heißt, es steht zwar da, kommt aber nicht zur Anwendung. Außerdem bewirkt ein <em>GROUP BY</em> auch implizit eine Sortierung nach den dort angegebenen Feldern. Und genau hier liegt das Problem.</p>
<p>Wurde bei MySQL vor Version 5.0.51 mit dem GROUP BY für eindeutige Felder auch die implizite Sortierung wegoptimiert, ist das in der neuen Version nun anders. Hier bleit diese Sortierung erhalten, auch wenn keine Gruppierung stattfindet. In den <a href="http://dev.mysql.com/doc/refman/5.0/en/releasenotes-cs-5-0-51.html">Release-Notes</a> findet man den entsprechenden Hinweis zu diesem Fehler (<a href="http://bugs.mysql.com/bug.php?id=30596">30596</a>).</p>
<h3>Lösung</h3>
<p>Betroffen ist, sofern nicht durch Plugins Gruppierungen hinzugefügt oder verändert werden, nur Wordpress Version 2.0.x, zu WP 1.x kann ich nichts sagen. Bei Wordpress ab Version 2.1 wurde das Verhalten geändert, so daß GROUP BY nur noch dann in den SQL-String eingebaut wird, wenn wirklich eine Gruppierung verwendet werden soll.<br />
<strong>Nachtrag:</strong> Auch in Wordpress ab Version 2.1 kann das Problem auftreten, wenn man etwas mit Kategorien oder Tags (ab 2.3) verändert, also z.B. nur bestimmte Kategorien in die Anzeige einbeziehen will:</p>
<pre>&lt;?php query_posts( $query_string.'&#038;cat=1,2,3' ); ?&gt;</pre>
<p>Falls man keine spezielle Kategorie- oder Tagkonfiguration verwendet, ergibt sich auch direkt die erste Lösungsmöglichkeit, nämlich auf die neuste Wordpress-Version (derzeit 2.3.2) zu aktualisieren.<br />
Falls man das aus irgendeinem Grund nicht möchte oder das Kategorie-/Tagproblem auftritt, ist die zweite Lösung ein Plugin, welches das GROUP BY auf einen nicht störenden Wert zurechtbiegt.<br />
Als Wordpress-Plugin sehen die paar Zeilen PHP-Code dann so aus:</p>
<pre>&lt;?php
/*
Plugin Name: 123 No Group By ID
Plugin URI: http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/
Description: Ändert bei WP das GROUP BY id in GROUP BY post_date (Problem ab MySQL 5.0.51).
Author: Ingo Henze
Version: 0.12
Author URI: http://putzlowitsch.de/
*/ 

	// GROUP BY auswerten
	function plw123ngb_posts_groupby( $groupby ) {
		if( preg_match( "/(|[ ,.])id(|[ ,])/i", $groupby ) ) {
			// sonst GROUP BY auf post_date setzen
			$groupby = 'post_date';
		}
		return $groupby;
	}

	add_filter( 'posts_groupby', 'plw123ngb_posts_groupby' );
?&gt;</pre>
<p>Mann kann den Quelltext hier einfach rauskopieren, in einer Datei speichern, auf den Server in das Pluginverzeichnis kopieren und aktivieren. Oder man nimmt das fertige Plugin als ZIP-Datei.</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2008/03/plw123_nogroupby_0_12.zip' title='123 No Group By ID 0.12'>123 No Group By ID 0.12</a></p>
<p>Sofern in der "GROUP BY"-Felderliste das Feld ID auftaucht, wird alles durch POST_DATE ersetzt. Das ist zwar so ein bißchen eine "Holzhammermethode", sollte aber in den meisten Fällen keine <strong>Nebenwirkungen</strong> zeigen. Probleme könnten nur dann auftreten, falls ein Plugin auch irgendwelche Gruppierungen vornimmt und dabei ebenfalls das Feld ID mit einbezieht. Zudem würde für den eher unwahrscheinlichen Fall, daß es zwei oder mehrere Beiträge mit exakt dem selben Veröffentlichungszeitpunkt gibt, nur einer von diesen angezeigt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-und-die-suboptimale-mysql-optimierung-5051-74/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.3 &#8211; Problem ohne www bei Strato</title>
		<link>http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/</link>
		<comments>http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 15:34:53 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Endlosschleife]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Strato]]></category>
		<category><![CDATA[Weiterleitung]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/</guid>
		<description><![CDATA[Hintergrund
Es war mir ja schon fast am Anfang meiner Strato-Zeit aufgefallen. Die Servervariable HTTP_HOST liefert immer den Hostname mit einem vorangestellten www zurück, selbst dann, wenn der Aufruf ohne www erfolgte. Eigentlich eine eigenwillige, wenn nicht gar falsche Konfiguration des Strato-Severs, denn die Variable HTTP_HOST soll eigentlich genau das enthalten, was der Browser im HTTP-Requestheader übermittelt. Wenn ich also die Seite schnurpsel.de aufrufe, dann <a href='http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<h3>Hintergrund</h3>
<p>Es war mir ja schon fast am Anfang meiner Strato-Zeit aufgefallen. Die Servervariable HTTP_HOST liefert immer den Hostname mit einem vorangestellten www zurück, selbst dann, wenn der Aufruf ohne www erfolgte. Eigentlich eine eigenwillige, wenn nicht gar falsche Konfiguration des Strato-Severs, denn die Variable HTTP_HOST soll eigentlich genau das enthalten, was der Browser im HTTP-Requestheader übermittelt. Wenn ich also die Seite schnurpsel.de aufrufe, dann sollte eben das da drin stehen, und nicht etwa www.schnurpsel.de. Aber genau das passiert bei Strato (PowerWeb A und S).</p>
<h3>Problem</h3>
<p>Bisher stellte das auch kein Problem dar, mit dem Neuen Wordpress 2.3 aber schon (deshalb war meine Seite gestern Abend auch zeitweise nicht erreichbar). Ab Wordpress 2.3 ist eine Funktion integriert, die ein sogenanntes &#8220;<a href="http://markjaquith.wordpress.com/2007/09/25/wordpress-23-canonical-urls/">Canonical Redirect</a>&#8221; ausführt. Auf das Strato-Problem bezogen bedeutet das, daß eine Weiterleitung z.B. dann stattfindet, wenn der Aufruf der Seite nicht so erfolgt, wie das in der Wordpresskonfiguration eingestellt ist.<br />
Wenn z.B in Wordpress als Blog-Adresse (URL)
<pre>http://schnurpsel.de</pre>
<p> eingetragen ist, jemand aber die Seite mit
<pre>http://www.schnurpsel.de</pre>
<p> aufruft, wird er auf
<pre>http://schnurpsel.de</pre>
<p> umgeleitet (und anders rum). An sich eine sinnvolle Sache, gerade unter SEO-Aspekten.</p>
<p>Was passiert nun aber bei Strato? Die funktion <em>redirect_canonical</em> schaut in HTTP_HOST nach, wie die Seite aufgerufen wurde, stellt fest, daß da ein www steht, aber das Blog ohne www konfiguriert ist. Also wird flux auf die Adresse ohne <em>www</em> weitergeleitet (diese Information bekommt der Browser zurück). Der ruft dann brav die Seite erneut ohne <em>www</em> auf, weil aber Strato das <em>www</em> wieder vorneran stellt, leitet <em>redirect_canonical</em> erneut um, der Browser ruft wieder brav ohne <em>www</em> auf usw. usw. Es ensteht also eine Weiterleitungs-Endlosschleife, die der Browser dann aber (hoffentlich) nach ein paar Versuchen mit einer Meldung beenden sollt. Beim Firefox sieht das dann so aus:</p>
<blockquote><p><strong>Fehler: Umleitungsfehler</strong><br />
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.</p></blockquote>
<p>Das alles tritt aber nur beim Blog selber auf, der Adminbereich ist davon nicht betroffen.</p>
<h3>Lösung</h3>
<p>Aber auch hier gibt es mit einem bißchen Basteln Abhilfe. Glücklicherweise gibt es in den Servervariablen einen Eintrag, der die tatsächlich aufgerufene Adresse enthält, nämlich SCRIPT_URI. Dieser enthält die vollständigen Aufrufadresse mit http und gegebenfalls Verzeichnis und Dateiname, z.B.
<pre>http://schnurpsel.de</pre>
<p> Hier kann man einfach den echten Hostanamen extrahieren und der Variable HTTP_HOST zuweisen. Und schon ist die Welt wieder in Ordnung :-)</p>
<p>Also Wordpress-Plugin sehen die paar Zeilen PHP-Code dann so aus:</p>
<pre>&lt;?php
/*
Plugin Name: 123 True HTTP Host
Plugin URI: http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/
Description: Setzt den wahren HTTP_HOST aus dem Request. Bei Strato wird immer www davor geschrieben.
Author: Ingo Henze
Version: 0.10
Author URI: http://putzlowitsch.de/
*/
$plw123thh = parse_url( $_SERVER['SCRIPT_URI'] );
if( isset( $plw123thh['host'] ) &#038;&#038; ($plw123thh['host']!=$_SERVER['HTTP_HOST']) )
  $_SERVER['HTTP_HOST'] = $plw123thh['host'];
?&gt;</pre>
<p>Mann kann den Quelltext hier einfach rauskopieren, in einer Datei speichern,auf den Server in das Pluginverzeichnis kopieren und aktivieren. Oder man nimmt das fertige Plugin als ZIP-Datei.</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2007/09/plw123_true_http_host_0_10.zip' title='123 True HTTP Host 0.10'>123 True HTTP Host 0.10</a></p>
<p>Im Übrigen tritt das Problem mit der Weiterleitungs-Endlosschleife bei einer Konfiguration mit <em>www</em> nicht auf, allerdings funktioniert dann das redirect_canonical auch nicht, weil die Seiten ja scheinbar immer korrekt mit <em>www</em> aufgerufen werde.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-23-problem-ohne-www-bei-strato-65/feed/</wfw:commentRss>
		<slash:comments>104</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.3 &#8211; Plugins oder my-hacks bei der Installation aktivieren</title>
		<link>http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/</link>
		<comments>http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 07:47:05 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[aktivieren]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[my-hacks]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/</guid>
		<description><![CDATA[Bereits seit Wordpress 2.1 gibt es ein vermutlich eher unbekanntes Feature, mit dem man bereits bei der Installation eines neuen, nackten Wordpress benutzerdefinierte Aktionen ausführen kann. Schlüssel dazu ist eine Datei install.php, welche sich im Verzeichnis wp-content befinden muß. Ist also bei der Installation die Datei wp-content/install.php vorhanden, wird deren Inhalt noch vor den WP-eigenen Installtionsfunktionen geladen und kann damit z.B. die wp_install ersetzen.
Am <a href='http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Bereits seit Wordpress 2.1 gibt es ein vermutlich eher unbekanntes Feature, mit dem man bereits bei der Installation eines neuen, nackten Wordpress benutzerdefinierte Aktionen ausführen kann. Schlüssel dazu ist eine Datei <em>install.php</em>, welche sich im Verzeichnis <em>wp-content</em> befinden muß. Ist also bei der Installation die Datei <em>wp-content/install.php</em> vorhanden, wird deren Inhalt noch vor den WP-eigenen Installtionsfunktionen geladen und kann damit z.B. die <em>wp_install</em> ersetzen.</p>
<p>Am einfachtesten ist es, sich die gewünschte Funktion aus der Datei <em>wp-admin/include/updrade.php</em> (früher <em>wp-admin/upgrade-functions.php</em> ) zu kopieren, die notwendigen Änderungen vorzunehmen und das dann in <em>wp-content/install.php</em> zu speichern.</p>
<p>Und wofür ist das nun gut?<br />
Ich hatte ja zum Problem <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/' title='Wordpress 2.3 &#8211; Anonym up-to-date bleiben'>WP 2.3 Plugincheck</a> geschrieben, das es bei der Neuinstallation auf Grund des Henne-Ei-Problems normalerweise nicht möglich ist, das Plagin zu aktivieren, ohne mindestens einmal die Pluginseite aufgerufen zu haben und damit bereits die Daten an wordpress.org zu senden. Das ist nun mit so einer benutzerdefinierten install.php möglich.</p>
<p>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2007/09/install.zip' title='Benutzerdefinierte install.php'>Benutzerdefinierte install.php</a> (als ZIP)</p>
<p>Diese Datei enthält nichts weiter, als die originale WP-Installationsfunktion, am Ende durch folgende Programmzeilen ergänzt:</p>
<pre>// Automatische aktiviere von Plugins oder der my-hacks.php
// Plugins
$active_plugins = get_option( 'active_plugins' );
$active_plugins[] = 'plw123_anon_vchek.php';  // hier den Plugin-Dateiname eintragen
update_option( 'active_plugins', $active_plugins );
// my-hacks.php
// update_option( 'hack_file', 1 );</pre>
<p>Das mit der my-hacks.php ist auskommentiert, es soll nur das Prinzip veranschaulichen.</p>
<p>Wie sieht nun also eine Wordpress 2.3 Neuinstallation aus:</p>
<ul>
<li>Wie gewohnt alle Wordpressdateien auf den Server übertragen (wp-config.php nicht vergessen)</li>
<li>zusätzlich das <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/' title='WP 2.3 &#8211; Anonym up-to-date bleiben &#8211; Plugin'>Plugin</a> in das Pluginverzeichnis kopieren</li>
<li>zusätzlich die benutzerdefinierte install.php in das Verzeichnis <em>wp-content</em> kopieren</li>
<li>Wordpressinstallation wie gewohnt starten</li>
</ul>
<p>Fertig!</p>
<p>Viel Spaß mit dem anonymisierten, neuen Wordpress 2.3 :-)</p>
<p><strong>Nachtrag:</strong> <a href="http://uwr1.de/">Hannes</a> hat auch ein <a href="http://f00f.de/blog/2007/09/27/stille-auf-knopfdruck-anonyme-plugin-update-checks.html">Plugin</a> geschrieben, welches zusätzlich noch die Pluginliste entschlackt. Sein Plugin kann man natürlich auch mit der beschriebenen Methode gleich bei der Installation aktivieren. Dazu muß einfach nur der Name geändert werden, also an Stelle von:</p>
<pre>$active_plugins[] = 'plw123_anon_vchek.php';  // hier den Plugin-Dateiname eintragen</pre>
<p>entsprechend</p>
<pre>$active_plugins[] = 'anonymous-plugin-updates.php';  // hier den Plugin-Dateiname eintragen</pre>
<p>Und es muß auch in das Pluginverzeichnis kopiert werden, das ist ja klar.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WP 2.3 &#8211; Anonym up-to-date bleiben &#8211; Plugin</title>
		<link>http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/</link>
		<comments>http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 12:58:53 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/</guid>
		<description><![CDATA[Vorgestern hatte ich meinen Hack gegen die Übertragung einiger Daten (Blog-URL, aktive Plugins) beim neuen WP 2.3 Versionscheck vorgestellt. Nun scheint es aber eine gewisse Unsicherheit bei oder Abneigung gegen die Verwendung der, von WP selbst als veraltete bezeichneten, my-hacks.php zu geben. Deshalb habe ich das Ganze hier noch mal als Plugin verpackt.
Man bedenke aber, das man zum Aktivieren des Plugins im Backend die <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Vorgestern hatte ich <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/' title='Wordpress 2.3 &#8211; Anonym up-to-date bleiben'>meinen Hack</a> gegen die Übertragung einiger Daten (Blog-URL, aktive Plugins) beim neuen WP 2.3 Versionscheck vorgestellt. Nun scheint es aber eine gewisse Unsicherheit bei oder Abneigung gegen die Verwendung der, von WP selbst als veraltete bezeichneten, my-hacks.php zu geben. Deshalb habe ich das Ganze hier noch mal als Plugin verpackt.<br />
Man bedenke aber, das man zum Aktivieren des Plugins im Backend die Plugin-Seite aufrufen muß und dadurch mindestens einmal alle Daten ungefiltert an api.wordpress.org übertragen werden.</p>
<p>Wenn man sein System von einer älteren Wordpress-Version updatet, ist das kein Probelm. Dann kann man das Plugin einfach vor dem Update installieren und aktivieren. Bei einer Neuinstalltion müßte man aber, bevor man irgendwas anderes macht, das Plugin direkt in der Datenbank aktivieren, was ein bißchen fummelig ist. Zudem setzt man die Filterung auch außer Kraft, wenn man z.B. mit der Funktion &#8220;Deaktivier alle Plugins&#8221; alle Plugins ausschaltet.</p>
<p><strong>NEU:</strong> Auch die Pluginversion kann <a href='http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/' title='Wordpress 2.3 &#8211; Plugins oder my-hacks bei der Installation aktivieren'>bei einer Neuinstallation</a> verwendet!</p>
<p>Wie auch immer, hier nun das &#8220;123 Anonymer Versionscheck&#8221;-Plugin.</p>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2007/09/plw123_anon_vchek_0_10.zip' title='123 Anonymer Versionscheck 0.10'>123 Anonymer Versionscheck 0.10</a></p>
<p>Die Funktionsweise entspricht exakt der Hack-Version. Weitere Informationen bitte <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/' title='Wordpress 2.3 &#8211; Anonym up-to-date bleiben'>dort nachlesen</a>.</p>
<p><strong>Weitere Plugins zum Thema</strong></p>
<ul>
<li>Hannes ersetzt in seinem <a href="http://f00f.de/blog/2007/09/27/stille-auf-knopfdruck-anonyme-plugin-update-checks.html">Plugin</a> die Updatefunktion mit einer angepaßten eigenen Version und reduziert dort auch die übertragene Pluginliste auf die notwendigen Daten.</li>
<li><a href="http://www.ilfilosofo.com/blog/tinfoil-hat/">Filosofo’s Tinfoil-Hat Plugin</a> bringt gleich ein komplett neues Updatesystem mit, doktert also nicht nur an den Symptomen rum, sondern mach gleich &#8220;Nägel mit Köpfen&#8221;.</li>
</ul>
<p>Diese Plugins lassen sich auch mit <a href='http://schnurpsel.de/wordpress-23-plugins-oder-my-hacks-bei-der-installation-aktivieren-63/' title='Wordpress 2.3 &#8211; Plugins oder my-hacks bei der Installation aktivieren'>dieser Methode</a> bereits bei der Neuinstallation aktivieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.3 &#8211; Anonym up-to-date bleiben</title>
		<link>http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/</link>
		<comments>http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/#comments</comments>
		<pubDate>Mon, 24 Sep 2007 09:36:27 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[my-hacks]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/</guid>
		<description><![CDATA[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 <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>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 <a href="http://blog.wordpress-deutschland.org/2007/09/23/zehn-dinge-die-du-ueber-wordpress-23-wissen-solltest.html" title="Zehn Dinge die du über WordPress 2.3 wissen solltest">WP-Deutschland-Blog</a> nachlesen, da wären z.B. Tags nebst Tagwolke, SEO-Verbesserungen und Updatebenachrichtigung.</p>
<p>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 <a href="http://forum.wordpress-deutschland.org/allgemeines/25313-wordpress-2-3-sicherheit-datenschutz.html">diskutiert</a> und das eine oder ander Blog <a href="http://www.tamagothi.de/2007/09/23/datenschutzproblem-in-wordpress-23/">berichten</a> darüber. Es gibt auch <a href="http://wordpress.org/extend/plugins/disable-wordpress-core-update/">schon</a> <a href="http://wordpress.org/extend/plugins/disable-wordpress-plugin-updates/">Plugins</a>, welche die Updatebenachrichtigungsfunktionen deaktivieren, nur dann werden gar keine Updateinformationen mehr angezeigt.</p>
<p><strong>NEU:</strong> Jetzt auch als <a href='http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-plugin-61/' title='WP 2.3 &#8211; Anonym up-to-date bleiben &#8211; Plugin'>Plugin</a>.</p>
<p>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 <a href='http://schnurpsel.de/hackers-paradise-12/' title='Hackers Paradise'>my-hacks.php</a> zum Einsatz. Falls diese Datei im Wordpress-Wurzelverzeichnis nicht existiert, legt man sie neu an. Dann kommt der folgende Code dort hinein:</p>
<pre>&lt;?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 &quot;http://example.org&quot;;
}

// "anonymisiert" aktive Plugins
function plw123_no_active_plugins() {
 return &quot;a:0:{}&quot;;
}
// 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' );
?&gt;</pre>
<p><strong>Download:</strong> <a href='http://schnurpsel.de/wp-content/uploads/2007/09/my-hacks.zip' title='my-hacks.php'>my-hacks.php</a> (als ZIP)</p>
<p>Der Trick besteht darin, das man während der Ausführung der <em>wp_version_check</em> und <em>wp_plugin_updates</em> Funktion ein Filter installiert, welches nicht die URL sondern einen beliebigen anderen Text zurückgibt. Diesen kann man in der Funktion <em>plw123_anon_url</em> festlegen, im Beispiel wird http://example.org zurückgegeben. Danach wird das Filter wieder entfernt. Um den Funktionsaufruf so &#8220;einrahmen&#8221; zu können, werden die originalen Funktionen mit remove_action entfernt und statt dessen die eigenen Funktionen mit add_action installiert.</p>
<p><strong>Nachtrag</strong> (24.09.2007 15:10): Ich habe nun noch zusätzlich die &#8220;Anonymisierung&#8221; der aktiven Plugins eingebaut., das heißt, es wird keine Information mehr übertragen, welche Plugins auch tatsächlich aktiv sind.</p>
<p>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 &#8220;Einstellungen&#8221; -> &#8220;Verschiedenes&#8221; aktiviert werde (vor dem Update):</p>
<blockquote><p>[x] Die veraltete my-hacks.php-Datei unterstützen.</p></blockquote>
<p>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 <em>hack_file</em> suchen und den Wert für option_value zu <em>1</em> ändern.</p>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/wordpress-23-anonym-up-to-date-bleiben-59/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Der Haken am Trick</title>
		<link>http://schnurpsel.de/der-haken-am-trick-53/</link>
		<comments>http://schnurpsel.de/der-haken-am-trick-53/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 17:07:44 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/der-haken-am-trick-53/</guid>
		<description><![CDATA[Vor einiger Zeit hatte ich das 123 IIS Permalink-Plugin vorgestellt. Durch Kommentare zum 123 No Rewrite Permalink-Plugin wurde ich auf ein Problem aufmerksam gemacht, welches sich auch beim IIS auswirkt. Erfreulicherweise kann man das beim IIS im Unterschied zum Apache-Server wieder ausbügeln, da hier die POST-Daten nicht verloren gehen.
So gibt es nun also eine neue Version 0.11 des 123 IIS Permalink-Plugins, die auch mit <a href='http://schnurpsel.de/der-haken-am-trick-53/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit hatte ich das <a href='http://schnurpsel.de/exoten-51/' title='Exoten'>123 IIS Permalink</a>-Plugin vorgestellt. Durch Kommentare zum <a href="http://putzlowitsch.de/123-no-rewrite-permalink/#comment-773">123 No Rewrite Permalink</a>-Plugin wurde ich auf ein Problem aufmerksam gemacht, welches sich auch beim IIS auswirkt. Erfreulicherweise kann man das beim IIS im Unterschied zum Apache-Server wieder ausbügeln, da hier die POST-Daten nicht verloren gehen.</p>
<p>So gibt es nun also eine neue Version 0.11 des <a href="http://putzlowitsch.de/123-iis-permalink/">123 IIS Permalink-Plugins</a>, die auch mit Datenübergabe per POST oder GET funktioniert. Nebenbei habe ich gleich noch eine permanente Weiterleitung (301) der alten &#8216;/index.php/irgendwas&#8217;-Aufrufe eingebaut. So braucht man sich wegen alter Permalinks z.B. bei Google keine Sorgen zu machen.</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/der-haken-am-trick-53/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exoten</title>
		<link>http://schnurpsel.de/exoten-51/</link>
		<comments>http://schnurpsel.de/exoten-51/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 19:14:16 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/exoten-51/</guid>
		<description><![CDATA[Es scheint doch tatsächlich Leute zu geben, die ernsthaft Wordpress auf einem IIS (was ist das?) laufen lassen :-)
Naja, es funktioniert wohl sogar. PHP mit MySQL bekommt man da auch ans laufen, also eigentlich kein großes Ding. Wenn da nicht die Sache mit den Permalinks wäre. Denn die erfordern nun mal ein funktionierendes mod_rewrite, was es aber meines Wissens nur für den Apache-Webserver gibt. <a href='http://schnurpsel.de/exoten-51/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Es scheint doch tatsächlich Leute zu geben, die ernsthaft <a href="http://forum.wordpress-deutschland.org/konfiguration/22436-permalinks-ohne-apache-anpassen.html">Wordpress auf einem IIS</a> (<a href="http://de.wikipedia.org/wiki/Microsoft_Internet_Information_Services">was ist das?</a>) laufen lassen :-)<br />
Naja, es funktioniert wohl sogar. PHP mit MySQL bekommt man da auch ans laufen, also eigentlich kein großes Ding. Wenn da nicht die Sache mit den Permalinks wäre. Denn die erfordern nun mal ein funktionierendes mod_rewrite, was es aber meines Wissens nur für den Apache-Webserver gibt. Zumindest kann der IIS von Hause aus nichts mit den entsprechenden Einträgen in der .htaccess anfangen. Und Wordpress ist auch so schlau, erkennt, daß es unter einem ISS läuft und bietet dann für die Permalinks gleich nur die Form mit dem vorangestellten /index.php an. Die sehen dann z.B. so aus:<br />
<code>/index.php/die-wordpress-import-schnittstelle-47/</code><br />
Gut, es funktioniert auch aber ist doch eher nur ein Notbehelf, eine Krücke. Schöner sieht es natürlich so aus:<br />
<code>/die-wordpress-import-schnittstelle-47/</code></p>
<p>Das muß aber nicht bei der index.php-Variante bleiben, denn das Problem ist ein ähnliches wie bei den Strato-PowerWeb-Paketen, bei denen zwar ein Apache mit mod_rewrite läuft, dieses aber vom Kunden nicht genutzt werden kann. Wenn man es doch versucht, wird das knallhart mit einem 500er Fehler bestraft. Wie man es bei Strato doch hinbekommt, habe ich <a href='http://schnurpsel.de/wordpress-bei-strato/wordpress-permalinks/' title='Wordpress Permalinks'>hier</a> beschrieben.</p>
<p>Für den IIS ist der Ansatz ganz ähnlich. Es wird ein benutzerdefiniertes Fehlerdokument für den Fehler &#8216;404 Not Found&#8217; &#8220;mißbraucht&#8221; und dieses ist einfach die &#8216;index.php&#8217; im Wordpress-Wurzelverzeichnis. Was anderes macht die RewriteEngine praktisch auch nicht, bis auf einen kleinen, aber wichtigen Unterschied. Beim Fehlerdokument wird der Status auf 404 gesetzt, so das der normale Nutzer im Browser zwar keinen Unterschiede sehen würde, denn er bekommt die Seite ganz normal angezeigt. Ein Suchmaschinen-Robot würde die Seite aber wie einen &#8220;Not Found&#8221;-Fehler behandeln und nicht weiter beachten. Deshalb ist das in der Beschreibung genannte Plugin erforderlich, welches den Status wieder ordentlich zurechtbiegt.</p>
<p>Etwas anders liegt die Sache beim IIS. Wenn eine benutzerdefinierte Fehlerseite als URL aufgerufen wird, wird vom Webserver der Status auf &#8216;200 OK&#8217; gesetzte und der Fehlerseite als Parameter der Fehlerstatus und die aufgerufene Seite mitgegeben. Hier ist dann die Fehlerseite dafür zuständig, den Status entsprechend korrekt zu setzen. Eine sehr schöne Vereinfachung gegenüber den Verrenkungen, die bei der Stratolösung nötig sind.<br />
Die einzig wirkliche Aufgabe besteht darin, aus dem übergebenen Parameter die eigenlich aufgerufene URL dem Wordpress als REQUEST_URI unterzujubeln, da daraus dann mit den Permalinkregeln die anzuzeigende Seite ermittlet wird.</p>
<p>Lange Rede, kurzer Sinn, genau das macht mein neues Plugin &#8220;<a href="http://putzlowitsch.de/123-iis-permalink/">123 IIS Permalink</a>&#8220;. Es ermöglich also auch unter IIS die schönen Permalinks ohne dem /index.php/&#8230; Vorspann :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/exoten-51/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Wordpress Import-Schnittstelle</title>
		<link>http://schnurpsel.de/die-wordpress-import-schnittstelle-47/</link>
		<comments>http://schnurpsel.de/die-wordpress-import-schnittstelle-47/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 20:47:36 +0000</pubDate>
		<dc:creator>Schnurpselchen</dc:creator>
				<category><![CDATA[WP (Wordpress)]]></category>
		<category><![CDATA[Import]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://schnurpsel.de/die-wordpress-import-schnittstelle-47/</guid>
		<description><![CDATA[Keine Plugins im eigentlichen Wordpress-Sinne, aber doch soetwas ähnliches sind die Importmodule. Dateimäßig zu finden unter &#8216;/wp-admin/import&#8217; bzw. im Backend ansprechbar über &#8216;Verwalten->Import&#8217;. Bei Wordpress-Version 2.2 sind bereits ganze 9 Importer mit der Installation bereits dabei:

Blogger &#8211; Beiträge, Kommentare und Benutzer aus einem Blogger-Blog
Blogware &#8211; Beiträge Blogware-Blog
DotClear &#8211; Kategorien, Benutzer, Beiträge, Kommentare und Links aus einem DotClear-Blog
GreyMatter &#8211; Benutzer, Beiträge und Kommentare Greymatter-Blog
LiveJournal &#8211; <a href='http://schnurpsel.de/die-wordpress-import-schnittstelle-47/' class='more-link'>...&#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Keine Plugins im eigentlichen Wordpress-Sinne, aber doch soetwas ähnliches sind die Importmodule. Dateimäßig zu finden unter &#8216;/wp-admin/import&#8217; bzw. im Backend ansprechbar über &#8216;Verwalten->Import&#8217;. Bei Wordpress-Version 2.2 sind bereits ganze 9 Importer mit der Installation bereits dabei:</p>
<ul>
<li><strong><em>Blogger</em></strong> &#8211; Beiträge, Kommentare und Benutzer aus einem Blogger-Blog</li>
<li><strong><em>Blogware</em></strong> &#8211; Beiträge Blogware-Blog</li>
<li><strong><em>DotClear</em></strong> &#8211; Kategorien, Benutzer, Beiträge, Kommentare und Links aus einem DotClear-Blog</li>
<li><strong><em>GreyMatter</em></strong> &#8211; Benutzer, Beiträge und Kommentare Greymatter-Blog</li>
<li><strong><em>LiveJournal</em></strong> &#8211; Beiträge aus einer LiveJournal-XML-Datei</li>
<li><strong><em>Movable Type / TypePad</em></strong> &#8211; Beiträge und Kommentare aus einem Movable-Type- oder Typepad-Blog</li>
<li><strong><em>RSS</em></strong> &#8211; Beiträge aus einem RSS-Feed</li>
<li><strong><em>Textpattern</em></strong> &#8211; Kategorien, Benutzer, Beiträge und Links aus einem Textpattern-Blog</li>
<li><strong><em>WordPress</em></strong> &#8211; Beiträge, Kommentare, benutzerdefinierte Felder, Seiten und Kategorien aus einer WordPress-Export-Datei</li>
</ul>
<p>Man sieht anhand der kurzen Beschreibung den unterschiedlichen Datenumfang, den die jeweiligen Importmodule bewältigen. Je nach Typ erfolgt der Import aus einer oder mehreren Dateien, aus einer Datenbank oder mit Authorisierung direkt online. Da ich bis auf den RSS-Import keines der anderen Module bisher getestet habe, kann ich zur Qualität nichts weiter sagen. Beim RSS-Imoprt darf man natürlich keine Wunderdinge erwarten, es ist halt der kleinste gemeinsame Nenner aber man kann prinzipiell erstmal alles reinziehen, was irgendwie einen RSS-Feed ausspuckt.</p>
<p>Da ich meine &#8220;Hommingberger Zeitung&#8221; technisch etwas auffrischen wollte, stand ich vor dem Problem, die knapp 100 Artikel möglichst komplett und unbeschadet nach Wordpress importiert zu bekommen. Zunächst hatte ich angefangen, alle Beiträge per Copy&#038;Paste zu übertragen, was aber doch etwas aufwändig und auch fehleranfällig geworden wäre. Und da mein altes &#8220;Redaktionssystem&#8221; frontseitig aus in PHP selbstprogrammierten Seiten und als Backend in phpMyAdmin bestand, kam erstmal nur ein RSS Export/Import in Frage. Nach dem ersten Versuch habe ich das aber auch schnell zu den Akten gelegt, da sich einige Besonderheiten meiner Zeitung (Untertitel, Quellen) nicht übernehmen ließen.<span id="more-47"></span></p>
<p>Also dachte ich, schreib ich doch einfach ein spezielles WP-Import-Modul für meine Zeitung, so schwer kann das ja nicht sein. Wie so oft helfen einem die vorhandenen Komponenten als Anschauungsbeispiel weiter, denn in der WP-Doku habe ich zur Importschnittstelle nichts gefunden. Und es ist tatsächlich nicht zu kompliziert. Vereinfachend kam noch hinzu, daß sich sowohl die alten Daten als auch die neuen Wordpress-Tabellen in der selben Datenbank befinden, so daß ich einfach die WP-Datenbankschnittstelle nutzen konnte.</p>
<p>Nun mußte ich mir nur noch überlegen, welche Inhalte von welchen alten in welche neuen Felder kommen. Ein Teil ließ sich 1:1 übernehmen, so z.B. Titel, Kurzbeschreibung (excerpt) und Datum. Beim Inhalt (content) mußte ein wenig zusammengebastelt werden und die in WP nicht vorhandene Felder wie Untertitel oder Quelle wurden einfach in benutzerdefinierte Felder (Metadaten) geschrieben und dann im Theme passend ausgegeben.<br />
Außerdem mußte ich mir noch überlegen, was ich mit den Seitennamen und der Seitenstruktur mache. Gut für die Artikel habe ich die alten &#8220;Permalinks&#8221; &#8216;/meldung-1234&#8242; beibehalten. Aber mein Zeitarchiv hieß bisher &#8216;/chronologie-2005-11-29&#8242;, was in WP dem &#8216;/2005/11/29&#8242; entspricht. Hier habe ich mich kurzerhand entschlossen, den WP-Style so zu belassen und meine alten Sachen per Redirect 301 weiterzuleiten. Und ein paar Seiten sind ganz unter den Tische gefallen, aber die waren auch eher unwichtig.</p>
<p>So hatte ich an einem Nachmittag Arbeit alles nach Wordpress migriert und habe jetzt damit doch ein etwas komfortableres &#8220;CMS&#8221;. Gut, der Aufwand zur Programmierung des Import-Moduls für eine einmalige Aktion schein etwas unverhälnismäßig hoch zu sein, aber ich denke, wenn ich alles hätte &#8220;zu Fuß&#8221; übertragen müssen, wäre ich nicht schneller fertig gewesen.</p>
<p>So habe ich wieder was über die Wordpress-Innereien gelernt und wer weiß, wozu so ein spezielles Importmodul noch mal gut sein kann&#8230;</p>
<p>Update 07.10.2009: Als Beispiel stelle ich hier mein HZ-Importmodul zur Verfügung. Ist nicht besonders schön aber vielleicht als Anregung für eigene Entwicklungen geeignet. </p>
<p>Download: <a href='http://schnurpsel.de/wp-content/uploads/2007/06/hz-import.zip'>WP-Importmodul &#8220;Hommingberger Zeitung&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://schnurpsel.de/die-wordpress-import-schnittstelle-47/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
