<?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>mgBlog &#187; Plugin</title>
	<atom:link href="http://mgsimon.de/tag/plugin/feed/" rel="self" type="application/rss+xml" />
	<link>http://mgsimon.de</link>
	<description>Esc(ape), einfach ein anderes Blog über technische Spielerei ...</description>
	<lastBuildDate>Fri, 16 Jul 2010 04:55:04 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>mg404rewrite 0.7</title>
		<link>http://mgsimon.de/2009/03/22/mg404rewrite-07/</link>
		<comments>http://mgsimon.de/2009/03/22/mg404rewrite-07/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 06:29:38 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=850</guid>
		<description><![CDATA[In der Artikelserie AdWz WP-Plugin &#8211; Auf dem Weg zum WordPress-Plugin &#8211; wurde Schritt f&#252;r die Schritt die Erweiterung zur Verarbeitung HTTP-Post Anfragen an Permalinks ohne mod_rewrite beschrieben. Das Plugin mg404rewrite konnte ich erfolgreich entfernt in der Umgebung des Providers testen, Zeit das Plugin zu aktualisieren. Die neue Version ist auf der Plugin-Seite und im [...]]]></description>
			<content:encoded><![CDATA[<p>In der Artikelserie AdWz WP-Plugin &#8211; Auf dem Weg zum WordPress-Plugin &#8211; wurde Schritt f&#252;r die Schritt die Erweiterung zur Verarbeitung HTTP-Post Anfragen an Permalinks ohne mod_rewrite beschrieben. </p>
<p>Das Plugin mg404rewrite konnte ich erfolgreich entfernt in der Umgebung des Providers testen, Zeit das Plugin zu aktualisieren. </p>
<p>Die neue Version ist auf der <a href="http://mgsimon.de/mg404rewrite/">Plugin-Seite</a> und im <a href="http://wordpress.org/extend/plugins/mg404rewrite/">WordPress Plugin Directory</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/22/mg404rewrite-07/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 19 &#8211; PostProxy</title>
		<link>http://mgsimon.de/2009/03/18/adwz-wp-plugin-19-postproxy/</link>
		<comments>http://mgsimon.de/2009/03/18/adwz-wp-plugin-19-postproxy/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 07:15:49 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=832</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 19 &#8211; PostProxy Die letzten vier Teile der AdWz-Serie haben die Erweiterungen f&#252;r das Plugin mg404rewrite zur Umsetzung der Idee aus AdWz WP-Plugin 14 &#8211; Post beschrieben. Der HTTP-Response wird kurz vor dem Senden durch das Plugin ausgewertet und in allen Formularen mit der Methode Post wird eine aufl&#246;sbare [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(AdWz; Auf dem Weg zum) WP-Plugin 19 &#8211; PostProxy</strong></p>
<p>Die letzten vier Teile der AdWz-Serie haben die Erweiterungen f&#252;r das Plugin mg404rewrite zur Umsetzung der Idee aus <a href="http://mgsimon.de/2009/03/03/adwz-wp-plugin-14-post/">AdWz WP-Plugin 14 &#8211; Post</a> beschrieben.</p>
<p>Der HTTP-Response wird kurz vor dem Senden durch das Plugin ausgewertet und in allen Formularen mit der Methode Post wird eine aufl&#246;sbare URL (Nicht-Permalink) gesetzt.</p>
<p>Im letzten Schritt muss diese aufl&#246;sbare URL durch ein weiteres Skript (PostProxy) verarbeitet werden.</p>
<p><span id="more-832"></span></p>
<p><strong>PostProxy</strong></p>
<p>Das <em>Unbekannte</em> &#8211; ein Formular mit der Methode Post an eine Permalink-URL &#8211; muss mit &#252;bertragenen Daten die urspr&#252;ngliche Permalink-Anfrage simulieren.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;mg404_posturl&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;mg404_level&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$url</span> <span style="color: #339933;">=</span>  <span style="color: #990000;">parse_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;mg404_posturl&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REQUEST_URI&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;path&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;mg404_level&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> 
			<span style="color: #000088;">$chdir</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;../&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">chdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$chdir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;index.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;index.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Abgesichert durch die Abfragen in Zeile zwei und acht werden zur Simulation der urspr&#252;nglichen Permalink-Anfrage die Umgebungsvariable <strong>REQUEST_URI</strong> &#252;berschrieben (Zeile 4) und die Datei <strong>index.php</strong> von WordPress eingebettet (Zeile 9).</p>
<p><strong>REQUEST_URI</strong> wird durch WordPress ausgewertet und sollte wie eine <em>normale</em> mod_rewrite Permalink-Anfrage verarbeitet werden.  </p>
<p><strong>weiter &#8230;</strong></p>
<p>Das Plugin funktioniert mit der letzten Erweiterung in der lokalen Entwicklungsumgebung. Bevor die neue Version 0.7 auf der <a href="http://mgsimon.de/mg404rewrite/">Plugin-Seite</a> und im Plugin-Verzeichnis von WordPress.org aktualisiert wird, m&#252;ssen die &#196;nderungen noch entfernt in der vorgegebenen Umgebung des Providers getestet werden. </p>
<p><em>Erst einmal eine AdWz-Pause und dann demn&#228;chst auch die neue Version &#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/18/adwz-wp-plugin-19-postproxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 18 &#8211; Regex &amp; PHP</title>
		<link>http://mgsimon.de/2009/03/16/adwz-wp-plugin-18-regex-php/</link>
		<comments>http://mgsimon.de/2009/03/16/adwz-wp-plugin-18-regex-php/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 07:25:06 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=801</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 18 &#8211; Regex &#038; PHP Im diesen Teil der AdWz-Serie werden die regul&#228;ren Ausdr&#252;cke aus AdWz WP-Plugin 17 &#8211; Regex im Plugin mg404rewrite eingesetzt. mg404_PostProxy 1 2 3 4 5 function mg404_PostProxy&#40;$content&#41; &#123; $formregex = &#34;/&#34; . get_option&#40;'mg404_postproxy_formregex'&#41; . &#34;/i&#34;; $content = preg_replace_callback&#40;$formregex,'mg404_FormProcessor',$content&#41;; return $content; &#125; In der f&#252;r [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(AdWz; Auf dem Weg zum) WP-Plugin 18 &#8211; Regex &#038; PHP</strong></p>
<p>Im diesen Teil der AdWz-Serie werden die regul&#228;ren Ausdr&#252;cke aus <a href="http://mgsimon.de/2009/03/12/adwz-wp-plugin-17-regex/">AdWz WP-Plugin 17 &#8211; Regex</a> im Plugin mg404rewrite eingesetzt.</p>
<p><strong>mg404_PostProxy</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_PostProxy<span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$formregex</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">.</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_formregex'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/i&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace_callback</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$formregex</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'mg404_FormProcessor'</span><span style="color: #339933;">,</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><span id="more-801"></span></p>
<p>In der f&#252;r den Ausgabepuffer angemeldeten Funktion (Zeile 1) wird der regul&#228;re Ausdruck (Zeile 2) aus der Konfiguration gelesen und f&#252;r die Suche aufbereitet. In PHP werden regul&#228;re Ausdr&#252;cke am Anfang und Ende durch ein <strong>/</strong> gekennzeichnet. Das Zeichen <strong>i</strong> f&#252;hrt diesen Ausdruck unabh&#228;ngig der Gro&#223;- / Kleinschreibung aus.</p>
<p>Die Funktion preg_replace_callback (Zeile 3) meldet f&#252;r diesen regul&#228;ren Ausdruck eine Funktion an. Sollte im Ausgabepuffer eine Form mit der Methode Post vorhanden sein, wird die angemeldete Funktion (mg404_FormProcessor) zur Auswertung ausgef&#252;hrt.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">mixed <span style="color: #990000;">preg_replace_callback</span>  <span style="color: #009900;">&#40;</span> mixed <span style="color: #000088;">$pattern</span>  <span style="color: #339933;">,</span> callback <span style="color: #000088;">$callback</span>  <span style="color: #339933;">,</span> mixed <span style="color: #000088;">$subject</span>  <span style="color: #009900;">&#91;</span><span style="color: #339933;">,</span> int <span style="color: #000088;">$limit</span>  <span style="color: #009900;">&#91;</span><span style="color: #339933;">,</span> int <span style="color: #339933;">&amp;</span><span style="color: #000088;">$count</span>  <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span></pre></div></div>

<p>Jeder Treffer wird der Funktion &#252;bergeben und ausgewertet zur&#252;ck gegeben. Am Ende wird der modifizierte Ausgabepuffer &#252;berschrieben und gesendet.</p>
<p><strong>mg404_FormProcessor</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_FormProcessor<span style="color: #009900;">&#40;</span><span style="color: #000088;">$match</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$formtag</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$match</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$urlregex</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">.</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_urlregex'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/i&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$urlregex</span><span style="color: #339933;">,</span><span style="color: #000088;">$formtag</span><span style="color: #339933;">,</span><span style="color: #000088;">$actionurl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$linkregex</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">.</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_linkregex'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/i&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$linkregex</span><span style="color: #339933;">,</span><span style="color: #000088;">$actionurl</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$formtag</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$postproxyurl</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'siteurl'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">.</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$formtag</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$actionurl</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #000088;">$postproxyurl</span><span style="color: #339933;">,</span><span style="color: #000088;">$formtag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$formtag</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;input type='hidden' name='mg404_posturl' value='&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$actionurl</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;'/&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$formtag</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;input type='hidden' name='mg404_level' value='&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr_count</span><span style="color: #009900;">&#40;</span>get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'/'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;'/&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$formtag</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>In der f&#252;r den regul&#228;ren Ausdruck angemeldeten Funktion (Zeile 1) wird der Treffer als Array &#252;bergeben. Mehrere Treffer w&#252;rden im Array durch Gruppierung (Klammerung) im regul&#228;ren Ausdruck &#252;bergeben, da in diesem Fall nur ein Treffer vorhanden sein kann wird der erste Index (0) in der Variable formtag (Zeile 2) abgelegt. Die URL der Aktion wird extrahiert (Zeile 4) und in actionurl zur weiteren Verarbeitung abgelegt. actionurl wird &#252;berpr&#252;ft (Zeile 6) und bei einem nicht vorhandenen Permalink wird die Funktion vorzeitig ohne Ver&#228;nderung verlassen (Zeile 7). Im anderen Fall wird das Form-Tag &#252;berarbeitet und zus&#228;tzlich der urspr&#252;nglichen URL der Aktion zur&#252;ck gegeben (Zeile 9-12).</p>
<p><strong>weiter &#8230;</strong></p>
<p>Der Ausgabepuffer wird der Konfiguration entsprechend ausgewertet. Zu guter Letzt muss PostProxy zur Simulation die angefragte URI &#252;berschreiben und die Datei index.php von WordPress einbetten. Ein weiteres Skript wird demn&#228;chst im n&#228;chsten Teil der AdWz-Serie erstellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/16/adwz-wp-plugin-18-regex-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 17 &#8211; Regex</title>
		<link>http://mgsimon.de/2009/03/12/adwz-wp-plugin-17-regex/</link>
		<comments>http://mgsimon.de/2009/03/12/adwz-wp-plugin-17-regex/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 09:38:34 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=731</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 17 &#8211; Regex Regex; regular expressions (regul&#228;re Ausdr&#252;cke) &#8211; in den 1960ern von Ken Thompson f&#252;r die Entwicklung von qed und grep zuerst benutzt &#8211; sind Suchmuster, um eine definierte Menge aus einer Zeichenkette zu extrahieren. Vom Suchen, Ersetzen bis Pr&#252;fen k&#246;nnen in vielen Editoren, mit Tools wie z.B. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(AdWz; Auf dem Weg zum) WP-Plugin 17 &#8211; Regex</strong></p>
<p>Regex; regular expressions (regul&#228;re Ausdr&#252;cke) &#8211; in den 1960ern von Ken Thompson f&#252;r die Entwicklung von qed und grep zuerst benutzt &#8211; sind Suchmuster, um eine definierte Menge aus einer Zeichenkette zu extrahieren. Vom Suchen, Ersetzen bis Pr&#252;fen k&#246;nnen in vielen Editoren, mit Tools wie z.B. grep und in so gut wie allen Programmiersprachen regul&#228;re Ausdr&#252;cke verwendet werden. </p>
<p>Beispiel eines regul&#228;ren Ausdrucks zur &#220;berpr&#252;fung einer E-mail-Adresse in richtiger Schreibweise (Syntax).</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">^([a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*)@([a-zA-Z]((\.|\-)?[a-zA-Z0-9])*)\.([a-zA-Z]{2,8})$</pre></div></div>

<p>Auf den ersten Blick kompliziert, aber angefreundet mit der Syntax kann schnell mit diesem m&#228;chtigen Tool viel Arbeit gespart werden.</p>
<p>Ohne weiter auf das o.a. Beispiel einzugehen werden f&#252;r die Erweiterung des Plugins zur Verarbeitung der Post-Forms an Permalinks einige regul&#228;re Ausdr&#252;cke verwendet.</p>
<p><span id="more-731"></span></p>
<p><strong>mg404rewrite</strong></p>
<p>Im ersten Schritt werden alle Formulare mit der Methode Post gesucht. Die URL der Aktion wird extrahiert und zur weiteren Verarbeitung &#252;berpr&#252;ft.</p>
<p><strong>Varianten</strong></p>
<p>Folgende Varianten &#8211; bestimmt nicht vollst&#228;ndig &#8211; m&#252;ssen durch regul&#228;re Ausdr&#252;cke gefunden und ausgewertet werden.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">... &lt;form method=&quot;post&quot; action=&quot;mypermalinkurl&quot;&gt; ...
... &lt;form method='post' action='mypermalinkurl'&gt; ...
... &lt;form method=post action=mypermalinkurl&gt; ...
... &lt;form action=&quot;mypermalinkurl&quot; method=&quot;post&quot;&gt; ...
... &lt;form action='mypermalinkurl' method='post'&gt; ...
... &lt;form action=mypermalinkurl method=post&gt; ...
... &lt;form method=&quot;post&quot; action=&quot;mypermalinkurl&quot;&gt; &lt;input ...&gt;myinputfield&lt;/input&gt; ...</pre></td></tr></table></div>

<p><strong>Regex Form-Tag</strong></p>
<p>Regul&#228;rer Ausdruck wird auf dem &#252;bergebenen Ausgabepuffer angewendet.</p>
<p><em>Kurz notiert von links nach rechts.</em></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;form</pre></div></div>

<p>Findet genau die angegebene Zeichenketten.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;form.+method=</pre></div></div>

<p>Das Ergebnis wird auf viele Zeichen bis zum Ende der Zeichenkette <strong>method=</strong> erweitert. <strong>.</strong> f&#252;r ein beliebiges Zeichen und <strong>+</strong> (Wiederholungsfaktor: min. 1) f&#252;r mindestens eins oder mehrere des vorhergenden regul&#228;ren Ausdrucks (beliebiges Zeichen, der Punkt <strong>.</strong>).</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;form.+method=[&quot;']?post</pre></div></div>

<p>Der Ausdruck wird durch die Zeichen in eckigen Klammern und <strong>?</strong> (Wiederholungsfaktor: optional) zus&#228;tzlich der Zeichenkette <strong>post</strong> um optional ein <strong>&#8220;</strong> oder ein <strong>&#8216;</strong> erweitert, um die unterschiedlichen Notationen abzudecken (siehe Varianten Bsp. Unterschiede Zeile 1 <strong>&#8220;</strong>, 2 <strong>&#8216;</strong> und 3).</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;form.+method=[&quot;']?post.*?&gt;</pre></div></div>

<p>Das Form-Tag &#8211; <strong>nicht mehr und nicht weniger</strong> &#8211; wird ben&#246;tigt. Durch die letzte Erweiterung beliebiges Zeichen <strong>.</strong> in beliebiger Anzahl <strong>*</strong> (Wiederholungsfaktor: eins, viele oder keins) bis zum abschlie&#223;enden Zeichen <strong>&gt;</strong>, wird das Tag Form im ganzen gefunden. </p>
<p>Nicht <strong>mehr</strong> durch das letzte <strong>?</strong> (non-greedy). Ohne das Fragezeichen hinter dem Wiederholungsfaktor w&#252;rde das Ergebnis bis zur letzten &gt; des Ausgabepuffers reichen &#8211; etwas viel (siehe Bsp. Variante Zeile 7). </p>
<p><em>Die Wiederholungsfaktoren sind erst einmal &#8220;gierig&#8221; (greedy) &#8211; bis zum letzten und durch die zus&#228;tzliche Angabe <strong>?</strong> wird der Ausdruck &#8220;gen&#252;gsam&#8221; (non-greedy) &#8211; bis zum ersten aufgel&#246;st.</em></p>
<p><strong>Regex Action-URL</strong></p>
<p>Regul&#228;rer Ausdruck wird auf das Ergebnis von <strong>Regex Form-Tag</strong> angewendet.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">.*action=[&quot;'](.*?)[&quot;' &gt;]</pre></div></div>

<p>Referenzierung auf die URL durch die Klammerung. Die URL wird im zweiten Schritt ausgewertet, da die Reihenfolge der Attribute im Form-Tag nicht bekannt ist (siehe Bsp. Variante Zeile 1-3 und 4-6).</p>
<p><em>Gut, mit Look-around assertions h&#228;tte man bestimmt in einem Schritt auch die URL ermitteln k&#246;nnen, aber wollen ja auch nicht &#252;bertreiben.</em></p>
<p><strong>Regex Non-Permalink</strong></p>
<p>Regul&#228;rer Ausdruck wird auf das Ergebnis von <strong>Regex Action-URL</strong> angewendet.</p>
<p><em>Wie der Webserver eingehende Anfragen auswertet, kann au&#223;erhalb der Umgebung nicht f&#252;r alle F&#228;lle vorhergesagt werden. </em></p>
<p>Der folgende Ausdruck soll die URL zur weitere Verarbeitung auswerten. Endet die URL auf <strong>.php</strong> ist die Zieladresse bestimmt kein Permalink und das Formular muss nicht ber&#252;cksichtigt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">.*\.php$</pre></div></div>

<p><strong>$</strong> kennzeichnet das Ende der Zeichenkette und \ hebt die Metabedeutung des n&#228;chsten Zeichens <strong>.</strong> auf.</p>
<p><strong>weiter &#8230;</strong></p>
<p>Die Konfigurationswerte f&#252;r die regul&#228;ren Ausdr&#252;cken k&#246;nnen im Administrationsbereich auf der Seite Einstellungen / Verschiedenes abgelegt werden.</p>
<p><img src="http://mgsimon.de/wp-content/uploads/2009/03/mg404rewrite_settings_misc_vals.png" alt="mg404rewrite_settings_misc_vals" title="mg404rewrite_settings_misc_vals" width="450" height="166" class="alignnone size-full wp-image-782 stamp" /></p>
<p><em>Apropos Konfiguration: Bin gleich &#252;ber einen Fehler gestolpert. Die Werte wurden nicht richtig dargestellt. Das Zeichen &#8221; hatte den Wert der Eigenschaft value vorzeitig beendet. Die in der Form darzustellenden Werte einfach zuvor mit der WordPress-Funktion attribute_escape() anpassen.</em></p>
<p>Soviel erst einmal zu den regul&#228;ren Ausdr&#252;cken. Das Plugin muss <em>nur</em> noch erweitert werden, damit alle Post-Forms an Permalinks verarbeitet werden k&#246;nnen. Dazu ein anderes mal mehr &#8230; :-) </p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/12/adwz-wp-plugin-17-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 16 &#8211; Konfiguration</title>
		<link>http://mgsimon.de/2009/03/10/adwz-wp-plugin-16-konfiguration/</link>
		<comments>http://mgsimon.de/2009/03/10/adwz-wp-plugin-16-konfiguration/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 09:03:55 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=647</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 16 &#8211; Konfiguration Wieso jetzt auf einmal Konfiguration? Die Erweiterung zur Verarbeitung gesendeter Daten mit der Methode Post an eine Permalink-URL wird jede Antwort auswerten m&#252;ssen. Durch diese Auswertung wird jede Anfrage zus&#228;tzlich Last erzeugen. Die Erweiterung sollte mindestens de-aktivierbar sein, da nicht jeder Formulare in dieser Variante einsetzt. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(AdWz; Auf dem Weg zum) WP-Plugin 16 &#8211; Konfiguration</strong></p>
<p>Wieso jetzt auf einmal Konfiguration? </p>
<p>Die Erweiterung zur Verarbeitung gesendeter Daten mit der Methode Post an eine Permalink-URL wird <strong>jede</strong> Antwort auswerten m&#252;ssen. Durch diese Auswertung wird <strong>jede</strong> Anfrage zus&#228;tzlich Last erzeugen. Die Erweiterung sollte mindestens de-aktivierbar sein, da nicht <strong>jeder</strong> Formulare in dieser Variante einsetzt. </p>
<p>Zus&#228;tzlich werden Daten f&#252;r regul&#228;re Ausdr&#252;cke, Erkennungskriterien f&#252;r Permalinks und die PostProxy-URL in der Konfiguration abgelegt, damit nicht bei <strong>jeder</strong> kleinen &#196;nderung das Plugin angepasst werden muss.</p>
<p><span id="more-647"></span></p>
<p><strong>WordPress &#038; Konfiguration</strong></p>
<p>Konfigurationen werden in der Datenbanktabelle wp_options verwaltet. Eine nicht verlinkte WordPress-Seite http://[meinblog]/wp-admin/options.php zeigt alle vorhandenen Optionen auf einer Seite an. Seit WordPress 2.7 wurde eine <a href="http://codex.wordpress.org/Settings_API">Settings API</a> hinzugef&#252;gt, um Einstellungen leicht &#252;ber die Administration verwalten zu k&#246;nnen. </p>
<p><em>Das Plugin wird dann nur noch ab Version 2.7 funktionieren, aber was solls &#8211; WordPress sollte so und so auf dem aktuellsten Stand gehostet werden.<br />
</em><br />
<strong>Settings API</strong></p>
<p>Im ersten Schritt muss die Konfiguration &#252;ber die Aktion &#8220;admin_init&#8221; initialisiert werden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_init'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'mg404_settings_api_init'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>In der angemeldeten Funktion zur Initialisierung werden Administrationsbereich, Felder und Callback-Funktionen definiert.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_settings_api_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	add_settings_section<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_setting_section'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404rewrite'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404_setting_section_callback'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'misc'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	add_settings_field<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_enable'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Activate PostProxy'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404_postproxy_enable_callback'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'misc'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404_setting_section'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	register_setting<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'misc'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404_postproxy_enable'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><em>Hatte versucht die Felder passend dem Administrationsbereich &#8220;Permalink&#8221; zuzuordnen. Leider &#8211; warum auch immer &#8211; funktioniert die Settings API nicht auf dieser Konfigurationsseite? Die Bereiche media, reading, writing und misc konnte ich erfolgreich testen. WP-Bug? mg404rewrite Einstellungen werden jetzt erst einmal misc &#8220;Verschiedene Einstellungen&#8221; zugeordnet.</em></p>
<p><strong>add_settings_section</strong></p>
<p>Die Funktion add_settings_section ordnet die Optionen einem Bereich in der Administration zu.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_settings_section<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #000088;">$callback</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span></pre></div></div>

<ul>
<li>$id &#8211; Bezeichner zur sp&#228;teren Referenzierung (im o.a. Bsp.: mg404_setting_section).</li>
<li>$title &#8211; Titel wird als &#220;berschrift im (Unter-)Bereich ausgegeben (im o.a. Bsp.: mg404rewrite).</li>
<li>$callback &#8211; Callback-Funktion, um u.a. eine Beschreibung auszugeben (im o.a. Bsp.: mg404_setting_section_callback).</li>
<li>$page &#8211; Namen der Konfigurationsseite (general, reading, writing, media etc.). Bereich wird am Ende dieser Seite hinzugef&#252;gt (im o.a. Bsp.: misc).</li>
</ul>
<p><strong>add_settings_field</strong></p>
<p>Die Funktion add_settings_field f&#252;gt ein Feld auf der Konfigurationsseite hinzu.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_settings_field<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #000088;">$callback</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$section</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">,</span> <span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span></pre></div></div>

<ul>
<li>$id &#8211; Eindeutiger Bezeichner f&#252;r das anzulegende Konfigurationsfeld (im o.a. Bsp.: mg404_postproxy_enable).</li>
<li>$title &#8211; Titel wird als Kurzbeschreibung links vom Feld ausgegeben (im o.a. Bsp.: Activate PostProxy).</li>
<li>$callback &#8211; Callback-Funktion, um die Form zur Verwaltung auszugeben (im o.a. Bsp.: mg404_postproxy_enable_callback).</li>
<li>$page &#8211; Namen der Konfigurationsseite (general, reading, writing, media etc.). Muss mit dem angegebenen Wert $page in add_settings_section &#252;bereinstimmen (im o.a. Bsp.: misc).</li>
<li>$section &#8211; Muss mit dem angegebenen Wert $section in add_settings_section &#252;bereinstimmen (im o.a. Bsp.: mg404_setting_section).</li>
<li>&#8230;</li>
</ul>
<p><strong>register_setting</strong></p>
<p>Die Funktion register_setting meldet ein Feld zur Verwaltung durch WordPress an.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">register_setting<span style="color: #009900;">&#40;</span><span style="color: #000088;">$option_group</span><span style="color: #339933;">,</span> <span style="color: #000088;">$option_name</span><span style="color: #339933;">,</span> <span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span></pre></div></div>

<ul>
<li>$option_group &#8211; ? (im o.a. Bsp.: misc).</li>
<li>$option_name &#8211; Muss mit der $id aus add_settings_field &#252;bereinstimmen (im o.a. Bsp.: mg404_postproxy_enable).
<li>&#8230;</li>
</ul>
<p><strong>Callback-Funktionen</strong></p>
<p>Die Funktion mg404_setting_section_callback gibt lediglich eine Beschreibung f&#252;r den zuvor definierten Konfigurationsbereich aus.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_setting_section_callback<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;p&gt;Intro text for our settings section&lt;/p&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>mg404_postproxy_enable_callback muss zur Verwaltung die Felder mit der dazugeh&#246;rigen ID f&#252;r die Form ausgeben und zus&#228;tlich muss der Wert &#252;ber get_option($id) richtig gesetzt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_postproxy_enable_callback<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$checked</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_postproxy_enable'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$checked</span><span style="color: #009900;">&#41;</span> 
		<span style="color: #000088;">$checked</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot; checked='checked' &quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;input <span style="color: #006699; font-weight: bold;">{$checked}</span> name='mg404_postproxy_enable' id='mg404_postproxy_enable' type='checkbox' value='1' class='regular-text code'&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Fertig?</strong></p>
<p>Mit einigen zus&#228;tzlichen Feldern sollte das Formular wie folgt aussehen.</p>
<p><img src="http://mgsimon.de/wp-content/uploads/2009/03/mg404rewrite_settings_misc.png" alt="mg404rewrite_settings_misc" title="mg404rewrite_settings_misc" width="450" height="199" class="alignnone size-full wp-image-688 stamp" /></p>
<p><strong>weiter &#8230;</strong></p>
<p>Der Einstiegspunkt wurde in <a href="http://mgsimon.de/2009/03/05/adwz-wp-plugin-15-http-response/">AdWz WP-Plugin 15 &#8211; HTTP-Response</a> gefunden und eine M&#246;glichkeit, das Plugin zu konfigurieren, hier beschrieben. Demn&#228;chst etwas &#252;ber regul&#228;re Ausdr&#252;cke, damit auch die richtigen POST-Forms gefunden werden &#8230; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/10/adwz-wp-plugin-16-konfiguration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 15 &#8211; HTTP-Response</title>
		<link>http://mgsimon.de/2009/03/05/adwz-wp-plugin-15-http-response/</link>
		<comments>http://mgsimon.de/2009/03/05/adwz-wp-plugin-15-http-response/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 07:03:05 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=630</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 15 &#8211; HTTP-Response Im ersten Schritt zur Umsetzung der Idee aus AdWz WP-Plugin 14 &#8211; Post muss die Seite vor der Auslieferung (HTTP-Response) angepasst werden. In der Antwort m&#252;ssen alle enthaltenen Formulare mit der Methode Post gefunden werden. Wann oder wo Formulare eingebaut werden ist zuvor nicht bekannt. Die [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(AdWz; Auf dem Weg zum) WP-Plugin 15 &#8211; HTTP-Response</strong></p>
<p>Im ersten Schritt zur Umsetzung der Idee aus <a href="http://mgsimon.de/2009/03/03/adwz-wp-plugin-14-post/"><br />
AdWz WP-Plugin 14 &#8211; Post</a> muss die Seite vor der Auslieferung (HTTP-Response) angepasst werden. In der Antwort m&#252;ssen alle enthaltenen Formulare mit der Methode Post gefunden werden. Wann oder wo Formulare eingebaut werden ist zuvor nicht bekannt. Die Verarbeitung muss kurz vor der Auslieferung erfolgen, damit alle aktivierten Plugins und andere WordPress Anpassungen die Anfrage vor dem Plugin mg404rewrite ausgewertet haben. </p>
<p>Vergeblich auf der Suche nach einem guten Einstiegspunkt (Hook) in der <a href="http://codex.wordpress.org/Plugin_API/Filter_Reference">WP-API</a> habe ich die PHP-Funktion ob_start &#8211; Ausgabepufferung aktivieren &#8211; gefunden.</p>
<p><span id="more-630"></span></p>
<p><strong>ob_start &#8211; Ausgabepufferung</strong></p>
<p>Die Funktion ob_start aktiviert die Ausgabepufferung. Durch die Pufferung werden die Interpreterausgaben nicht direkt an den Anfrangenden (Client) gesendet sondern intern gesammelt. Dieser Funktion kann optional ein Parameter zur Nachbearbeitung des Pufferinhalts &#252;bergeben werden. Der &#252;bergebene Parameter wird aufgerufen wenn der Pufferinhalt am Ende der Ausf&#252;hrung ausgegeben wird (Callback). Der Ausgabepuffer wird der Funktion &#252;bergeben und eine Zeichenkette kann als neue Ausgabe zur&#252;ck gegeben werden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">bool <span style="color: #990000;">ob_start</span>  <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span> callback <span style="color: #000088;">$output_callback</span>  <span style="color: #009900;">&#91;</span><span style="color: #339933;">,</span> int <span style="color: #000088;">$chunk_size</span>  <span style="color: #009900;">&#91;</span><span style="color: #339933;">,</span> bool <span style="color: #000088;">$erase</span>  <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span></pre></div></div>

<p>Ein guter Einstiegspunkt, um alle m&#246;glichen Formulare kurz vor der Response zu finden.</p>
<p>Auch WordPress benutzt ob_start. Die Suche im Verzeichnis $WP_HOME/wp-include zeigt die folgenden vier Treffer.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">grep</span> ob_start <span style="color: #000000; font-weight: bold;">*</span>
functions.php:			ob_start<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
general-template.php:	ob_start<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
theme.php:	ob_start<span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #ff0000;">'preview_theme_ob_filter'</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span>;
widgets.php:		ob_start<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;</pre></div></div>

<p><strong>WordPress &#038; ob_start</strong></p>
<p>Der erste Test, den HTTP-Response zu ver&#228;ndern, k&#246;nnte mit diesen Informationen schon durchgef&#252;hrt. Aber im <a href="http://wordpress.org/support/">wordpress.org-Forum</a> habe ich noch folgenden <a href="http://wordpress.org/support/topic/58626?replies=12">Hinweis</a> gefunden. </p>
<p>In mindestens einer Konfiguration wird der Response komprimiert gesendet. Mit der verdichteten Antwort kann in der Callback-Funktion nicht viel angefangen werden. Die Ausf&#252;hrung muss vor der WordPress-ob_start gesetzt werden. Ein kleiner Workaround &#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_ob_start<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">ob_start</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mg404_PostProxy'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_redirect'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404_ob_start'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Die Aktion &#8220;template_redirect&#8221; wird durch WordPress kurz vor der Auslieferung aufgerufen und die eigene Funktion mg404_ob_start() meldet die Funktion mg404_PostProxy &#252;ber ob_start zum R&#252;ckaufruf durch die Ausgabepufferung an.</p>
<p><strong>Test</strong></p>
<p>Der folgende Test stellt durch die CallbackAusgabepufferungFunktion jeder Seite &#8220;MyCallBack&#8221; voran.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_PostProxy <span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;MyCallBack&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>weiter &#8230;</strong></p>
<p>Die erste Voraussetzung ist erf&#252;llt, bevor die n&#228;chsten Schritte in der Funktion mg404_PostProxy getestet werden, wird im n&#228;chsten Schritt erst einmal eine leichte Konfigurationsm&#246;glichkeit angesehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/05/adwz-wp-plugin-15-http-response/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 14 &#8211; Post</title>
		<link>http://mgsimon.de/2009/03/03/adwz-wp-plugin-14-post/</link>
		<comments>http://mgsimon.de/2009/03/03/adwz-wp-plugin-14-post/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 10:29:01 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/?p=613</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 14 &#8211; Post Die Entwicklung des Plugins mg404rewrite hatte ich eigentlich mit der mod_rewrite Aktivierung bei Strato eingestellt, aber das Plugin wurde mittlerweile bei wordpress.org um die 300 mal heruntergeladen und eine m&#246;gliche L&#246;sung f&#252;r die Verarbeitung &#252;bermittelter Formulardaten durch die Variante Post ist mir schon vor einiger Zeit [...]]]></description>
			<content:encoded><![CDATA[<p><strong>(AdWz; Auf dem Weg zum) WP-Plugin 14 &#8211; Post</strong></p>
<p>Die Entwicklung des Plugins mg404rewrite hatte ich eigentlich mit der mod_rewrite Aktivierung bei Strato eingestellt, aber das Plugin wurde mittlerweile bei <a href="http://wordpress.org/extend/plugins/mg404rewrite/">wordpress.org</a> um die <a href="http://wordpress.org/extend/plugins/mg404rewrite/stats/">300</a> mal heruntergeladen und eine m&#246;gliche L&#246;sung f&#252;r die Verarbeitung &#252;bermittelter Formulardaten durch die Variante Post ist mir schon vor einiger Zeit eingefallen.</p>
<p><strong>Problem</strong></p>
<p>Der Workaround, Permalinks durch eine benutzerdefinierte Fehlerseite aufl&#246;sen zu k&#246;nnen, funktioniert nicht f&#252;r &#252;bertragene Daten mit der Methode Post. </p>
<p>Eine L&#246;sungsm&#246;glichkeit f&#252;r eine oder wenige Seiten mit Formularen beschreibt <a href="http://putzlowitsch.de/">Ingo Henze</a> in &#8220;<a href="http://schnurpsel.de/es-geht-doch-kontaktformular-mit-post-und-permalinks-71/">Es geht doch, Kontaktformular mit POST und Permalinks</a>&#8220;. </p>
<p>Aber f&#252;r viele Seiten wird die manuelle L&#246;sung schnell un&#252;bersichtlich und mit etwas Dynamik wie z.B. durch ein Plugin auf mehr oder weniger allen Seiten unm&#246;glich. </p>
<p>Wie k&#246;nnte eine allgemeine L&#246;sung durch ein Plugin aussehen?</p>
<p><span id="more-613"></span></p>
<p><strong>Idee</strong></p>
<p>Die mit der Methode Post versendeten Formulardaten m&#252;ssen durch eine aufl&#246;sbare URL verarbeitet werden und der urspr&#252;nglichen Permalink-URL &#252;bergeben werden.</p>
<p>Ein Filter wird die auszuliefernde Seite nach Formularen mit der Methode Post durchsuchen. Sollte die Action-URL eine Permalinkstruktur haben wird diese durch eine eigene URL (PostProxy) ausgetauscht und die urspr&#252;ngliche URL zur weiteren Verarbeitung im Formular hinzugef&#252;gt. Die Daten werden zur aufl&#246;sbaren URL (PostProxy) gesendet und m&#252;ssen wie bei einer Permalink-Anfrage verarbeitet werden. PostProxy wird zur Simulation die angefragte URI &#252;berschreiben und die Datei index.php von WordPress einbetten. WordPress sollte wie bei einer regul&#228;ren Anfrage den Rest &#252;bernehmen.</p>
<p><strong>L&#246;sung?</strong></p>
<p>Lokal konnte ich die Idee erfolgreich mit einem Plugin &#8211; welches Daten via Post an Permalinks versendet &#8211; testen. Demn&#228;chst dann auch eine erste mg404rewrite-Beta &#8230; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2009/03/03/adwz-wp-plugin-14-post/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 12 &#8211; 304 Not Modified</title>
		<link>http://mgsimon.de/2008/02/15/adwz-wp-plugin-12-304-not-modified/</link>
		<comments>http://mgsimon.de/2008/02/15/adwz-wp-plugin-12-304-not-modified/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 18:59:44 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/2008/02/15/adwz-wp-plugin-12-304-not-modified/</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 12 &#8211; 304 Not Modified Das Plugin mg404rewrite l&#228;uft seit einigen Monaten stabil in diesem Blog und wurde in der einen oder anderen WordPress-Installation mit aufgenommen. Grund genug sich die ToDo-Liste anzusehen. &#8220;Conditional Gets&#8221; und &#8220;HTTP-Post&#8221; werden durch das Plugin noch nicht verarbeitet. Dieser Teil der Artikelserie &#8220;AdWz &#8230;&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><strong><strong>(AdWz; Auf dem Weg zum)</strong> WP-Plugin 12 &#8211; 304 Not Modified<br />
</strong></p>
<p>Das Plugin mg404rewrite l&#228;uft seit einigen Monaten stabil in diesem Blog und wurde in der einen oder anderen WordPress-Installation mit aufgenommen. Grund genug sich die ToDo-Liste anzusehen. &#8220;Conditional Gets&#8221; und &#8220;HTTP-Post&#8221; werden durch das Plugin noch nicht verarbeitet. Dieser Teil der Artikelserie &#8220;AdWz &#8230;&#8221; setzt sich mit dem Thema &#8220;Conditonal Gets&#8221; auseinander.</p>
<p>&#8220;Conditional Gets&#8221; werden u.a. f&#252;r sogenannte Feeds ben&#246;tigt. WordPress, andere Blogs und viele Quellen im weltweitem Netz bieten einen Newsfeed an.</p>
<p style="text-align: center"><img src="http://mgsimon.de/wp-content/uploads/2008/02/feedicon.png" alt="Feed Icon" /></p>
<blockquote>
<p align="left">Feed oder Newsfeed (RSS oder Atom) ist ein elektronisches Nachrichtenformat, das dem Nutzer erm&#246;glicht, &#252;ber Inhalte einer Website, &#196;nderungen daran oder Nachrichten in gegebenenfalls zusammengefasster Form auf dem Laufenden zu bleiben.</p>
</blockquote>
<blockquote><p><span id="more-223"></span>Dazu werden sie als sogenannte RSS-Feeds abonniert. RSS ist ein Service, der &#228;hnlich einem Nachrichtenticker die &#220;berschriften mit einem kurzen Textanriss und einen Link zur Originalseite enth&#228;lt. Der Abonnent des RSS-Feed kann direkt den angebotenen Links folgen und dort die vollst&#228;ndige Meldung lesen. Zum Lesen eines RSS-Feeds dienen herk&#246;mmliche Webbrowser oder spezielle Programme, die auf die &#196;hnlichkeit zum Nachrichtenticker angepasst sind. Letztere nennt man (synonym) RSS-Aggregatoren, RSS-Reader oder Feedreader.</p>
<p>Durch Eingabe der Adresse des Feeds im entsprechenden Feedreader wird dieser „abonniert“. Neu ver&#246;ffentlichte Inhalte werden dann vom Feedreader selbstt&#228;tig in regelm&#228;&#223;igen, vom Empf&#228;nger festgelegten Abst&#228;nden auf die Endger&#228;te – PCs oder auch Mobiltelefone, PDAs oder mobile Spieleplattformen – der Abonnenten geladen. Dadurch erhalten diese die aktuellen Informationen automatisch. Es ist nicht mehr notwendig, selbst die Webseiten zu besuchen, um nach &#196;nderungen zu schauen. Das vereinfacht insbesondere die Beobachtung einer gro&#223;en Menge von Quellen wie z. B. Blogs, in denen es nicht unbedingt regelm&#228;&#223;ig zu &#196;nderungen kommt, deren Aktualisierung man aber nicht verpassen m&#246;chte. Im Unterschied zur Benachrichtigung per E-Mail geht die Initiative bei RSS vom Empf&#228;nger aus, der den Feed abonniert hat.</p></blockquote>
<p>Die bedingten Anfragen (&#8220;Conditional Gets&#8221;) erm&#246;glichen die Anfrage der Aktualit&#228;t der Nachrichten, bevor der gesamte Feed geladen werden muss. Dadurch wird der Datenverkehr zwischen entferntem Server und dem Empf&#228;nger reduziert. Zus&#228;tzlich wird der Webserver entlastet, da der Feed nur generiert werden muss, wenn der Empf&#228;nger aktuellere Nachrichten anfordert.</p>
<p>Die Analyse habe ich mit dynamische Lesezeichen im Firefox und der Firefox-Erweiterung &#8220;<a href="https://addons.mozilla.org/de/firefox/addon/3829" target="_blank">Live HTTP Headers</a>&#8221; durchgef&#252;hrt.</p>
<p>1. Dynamisches Lesezeichen &#8220;Kommentare fuer mgBlog&#8221; angelegt.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://mgsimon.de/comments/feed/
&nbsp;
GET /comments/feed/ HTTP/1.1
Host: blog.mgsimon.de
...
HTTP/1.x 200 OK
...</pre></div></div>

<p>2. Dynamisches Lesezeichen aktualisieren.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://mgsimon.de/comments/feed/
&nbsp;
GET /comments/feed/ HTTP/1.1
Host: blog.mgsimon.de
...
If-Modified-Since: Fri, 15 Feb 2008 12:24:59 GMT
If-None-Match: &quot;54d9a49f036b8357cf01ac034fa84c2d&quot;
...
HTTP/1.x 304 Not Modified
...</pre></div></div>

<p>3. Kommentar erstellen und dynamische Lesezeichen aktualisieren.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://mgsimon.de/comments/feed/
&nbsp;
GET /comments/feed/ HTTP/1.1
Host: blog.mgsimon.de
...
If-Modified-Since: Fri, 15 Feb 2008 12:24:59 GMT
If-None-Match: &quot;54d9a49f036b8357cf01ac034fa84c2d&quot;
...
HTTP/1.x 200 OK
Date: Fri, 15 Feb 2008 17:09:58 GMT
...</pre></div></div>

<p>Der Test zeigt eine funktionsf&#228;hige bedingte Anfrage. Im ersten Schritt wird der Feed abonniert und vollst&#228;ndig geladen. Anschliessend werden im zweiten Schritt aktuellere Informationen angefordert. Die Kommentare sind unver&#228;ndert und die Anfrage wird richtig mit 304 Not Modified beantwortet. Der Nachrichtenkanal muss nicht geladen werden. Der letzte Versuch fragt erneugt nach aktuellere Informationen als die lokal vorhandenen an. Dieser wird mit 200 OK beantwortet, da die angeforderten Informationen neuer als die lokalen sind. Ein Kommentar wurde hinzugef&#252;gt und der Feed wird geladen.</p>
<p>Wie der Test zeigt verarbeitet das Plugin &#8220;mg404rewrite&#8221; bedingte Anfragen richtig. Der Punkt &#8220;Conditional Gets&#8221; funktioniert auch ohne weitere Anpassungen und kann von der ToDo-Liste gestrichen werden. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2008/02/15/adwz-wp-plugin-12-304-not-modified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 11 &#8211; Trackbacks</title>
		<link>http://mgsimon.de/2007/11/25/adwz-wp-plugin-11-trackbacks/</link>
		<comments>http://mgsimon.de/2007/11/25/adwz-wp-plugin-11-trackbacks/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 10:43:06 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/2007/11/25/adwz-wp-plugin-11-trackbacks/</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 11 &#8211; Trackbacks In der Blogosph&#228;re werden die Blogs untereinander vernetzt. Die erforderlichen Links werden durch Trackbacks oder Pingbacks erzeugt. Dazu werden zwischen den beteiligten Weblogs nach einem festen Protokoll Daten ausgetauscht, die die Beziehung zwischen den betreffenden Eintr&#228;gen herstellen. Der Titel, Name des Blogs, die Quelladresse und ein [...]]]></description>
			<content:encoded><![CDATA[<p><strong><strong>(AdWz; Auf dem Weg zum)</strong> WP-Plugin 11 &#8211; Trackbacks</strong></p>
<p>In der Blogosph&#228;re werden die Blogs untereinander vernetzt. Die erforderlichen Links werden durch Trackbacks oder Pingbacks erzeugt. Dazu werden zwischen den beteiligten Weblogs nach einem festen Protokoll Daten ausgetauscht, die die Beziehung zwischen den betreffenden Eintr&#228;gen herstellen. Der Titel, Name des Blogs, die Quelladresse und ein Auszug aus dem Artikeltext werden der Zieladresse &#252;ber eine HTTP-Post Anfrage &#252;bertragen.</p>
<p>Sollte ein Fehler auftreten (HTTP-Statuscode 404 Not Found) werden die Daten einer Anfrage &#252;ber HTTP-Post vom Webserver nicht der Fehlerseite &#252;bergeben. Die Permalinks f&#252;r Trackbacks in der Form http://mgsimon.de/sample-post/trackback werden mit der L&#246;sung &#252;ber die Fehlbehandlung nicht funktionieren.</p>
<p><span id="more-139"></span></p>
<p>Die HTTP-Post Anfrage kann direkt an die Adresse (http://mgsimon.de/wp-trackback.php?p=126) f&#252;r Trackbaks ohne Permalinks gesendet werden. In der Ansicht eines Beitrags wird ein Trackbacklink am Ende des Artikels angeboten, welcher in Abh&#228;ngigkeit der URL-Konfiguration die Trackbackadresse anzeigt.</p>
<p>Die WordPress Plugin API erm&#246;glicht &#252;ber den Filter &#8216;trackback_url&#8217;, die URL zu manipulieren.</p>
<p>Die folgende Funktion &#228;ndert die URL f&#252;r Trackbacks in die urspr&#252;ngliche Form ohne Permalinkstruktur, damit die Daten &#252;ber HTTP-Post verarbeitet werden k&#246;nnen.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mg404_trackback_url<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$id</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ID des Beitrags</span>
	<span style="color: #b1b100;">return</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'siteurl'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/wp-trackback.php?p='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$id</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Die folgende Zeile meldet die Funktion als Filter f&#252;r &#8216;trackback_url&#8217; an.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_filter<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'trackback_url'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mg404_trackback_url'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Die aktuellste Version des Plugins ist auf der <a href="http://mgsimon.de/mg404rewrite/">Plugin-Homepage</a> zu finden.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2007/11/25/adwz-wp-plugin-11-trackbacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AdWz WP-Plugin 10 &#8211; 302 Found</title>
		<link>http://mgsimon.de/2007/11/13/adwz-wp-plugin-10-302-found/</link>
		<comments>http://mgsimon.de/2007/11/13/adwz-wp-plugin-10-302-found/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 08:31:58 +0000</pubDate>
		<dc:creator>mg</dc:creator>
				<category><![CDATA[AdWz]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mgsimon.de/2007/11/13/adwz-wp-plugin-10-302-found/</guid>
		<description><![CDATA[(AdWz; Auf dem Weg zum) WP-Plugin 10 &#8211; 302 Found Das Plugin mg404Rewrite &#252;berschreibt bis zur Version 0.4 bei erfolgreichen Anfragen den HTTP-Statuscode 404 Not Found durch 200 OK, damit Permalinks auch ohne das Apache-Modul mod_rewrite funktionieren. Nicht immer wirklich richtig, denn WordPress sendet bei Trackback-Referenzen (die Dinger zur Selbstreferenzierung der Blogs untereinander) nicht den [...]]]></description>
			<content:encoded><![CDATA[<p><strong><strong>(AdWz; Auf dem Weg zum)</strong> WP-Plugin 10 &#8211; 302 Found</strong></p>
<p>Das Plugin <a href="http://mgsimon.de/mg404rewrite/">mg404Rewrite</a> &#252;berschreibt bis zur Version 0.4 bei erfolgreichen Anfragen den HTTP-Statuscode 404 Not Found durch 200 OK, damit Permalinks auch ohne das Apache-Modul <em>mod_rewrite</em> funktionieren.</p>
<p>Nicht immer wirklich richtig, denn WordPress sendet bei Trackback-Referenzen (die Dinger zur Selbstreferenzierung der Blogs untereinander) nicht den HTTP-Statuscode 200 OK. Der Code 302 Found mit der Referenz zum dazugeh&#246;rigen Beitrag wird gesendet, damit anschliessend dieser angezeigt werden kann.</p>
<p>Version 0.5 wird diesen Sonderfall durch eine kleine &#196;nderung ber&#252;cksichtigen.</p>
<p><span id="more-126"></span>Damit bei einer nicht vorhandenen Anfrage die richtige Antworte &#8211; HTTP-Statuscode 404 not found &#8211; gesendet werden kann, wird der Header exklusiv unter der folgenden Bedinung &#252;berschrieben.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>is_404<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #339933;">...</span></pre></div></div>

<p>Die WordPress-API bietet die M&#246;glichkeit &#252;ber die Funktion <em>is_trackback</em> einen Trackback abzufragen. Das Blog sendet bei nicht aktivem Permalinks oder nutzbaren <em>mod_rewrite</em> Regeln den HTTP-Statuscode <em>302 Found</em> mit einem Verweis auf den dazugeh&#246;rigen Beitrag. Der Statuscode wird von WordPress in diesem Fall ge&#228;ndert und sollte nicht durch das Plugin auf <em>200 OK</em> gesetzt werden.</p>
<p>Die folgende kleine &#196;nderung ist ausreichend, um auf Trackback-URL richtig zu reagieren, denn das Plugin soll <strong>nichts</strong> machen &#8211; WordPress wird die Verarbeitung &#252;bernehmen.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>is_404<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>is_trackback<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #339933;">...</span></pre></div></div>

<p>Die aktuellste Version des Plugins ist auf der <a href="http://mgsimon.de/mg404rewrite/">Plugin-Homepage</a> zu finden.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgsimon.de/2007/11/13/adwz-wp-plugin-10-302-found/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
