<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>PHP &#8226;  Stichwort &#8226; [TiSiE] Blog</title>
	<atom:link href="http://tisie.de/stichwort/php/feed" rel="self" type="application/rss+xml" />
	<link>http://tisie.de</link>
<description>Wie in den &#8220;Über mich&#8221;-Seiten zu lesen ist, bin ich Software-Entwickler. Ich entwickel überwiegend in PHP. Deshalb schreibe ich auch mal das eine oder andere, daß mit dieser &#8220;love-it-or-hate-it&#8221;-Skript-Sprache zu tun hat. Diese Ergüsse stehen dann passenderweise unter diesem Stichwort.
</description>
	<lastBuildDate>Tue, 08 Mar 2011 09:30:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=1850</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Shortcodes mit gemischter Schreibweise in einem Artikel</title>
		<link>http://tisie.de/allgemeines/shortcodes-gemischte-schreibweisen-in-artikel</link>
		<comments>http://tisie.de/allgemeines/shortcodes-gemischte-schreibweisen-in-artikel#kommentare</comments>
		<pubDate>Fri, 11 Sep 2009 13:19:56 +0000</pubDate>
		<dc:creator>Mathias Gelhausen</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://tisie.de/?p=433</guid>
		<description><![CDATA[Über die &#8220;Shortcode-API&#8221; von Wordpress gibt es schon viele Artikel und Anleitungen. Auch über die verschiedenen Schreibweisen, die unterstützt werden:


[shortcode]
[shortcode attribut="wert" /]
[shortcode]Inhalt[/shortcode]


Interessant wird es nun aber, wenn man &#8211; so wie ich &#8211; einen Shortcode geschrieben hat, der sowohl   in der &#8220;self-contained&#8221; (Variante 1 und 2) als auch als &#8220;enclosing&#8221; (Variante 3) Form [...]]]></description>
			<content:encoded><![CDATA[<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Über die &#8220;<a href="http://codex.wordpress.org/Shortcode_API" rel="external nofollow"  class="external_link"  title="Die Wordpress Shortcode API"   style="color:#3B5998;">Shortcode-API</a>&#8221; von <a href="http://www.wordpress.org" rel="external nofollow"  class="external_link"  title="Wordress Seite"   style="color:#3B5998;">Wordpress</a> gibt es schon viele Artikel und Anleitungen. Auch über die verschiedenen Schreibweisen, die unterstützt werden:</p>

<ul  style="margin-left:10px;padding-bottom:10px;list-style-type:disc;">
<li  style="list-style-position:outside;font-size:12px;color:#333;">[shortcode]</li>
<li  style="list-style-position:outside;font-size:12px;color:#333;">[shortcode attribut="wert" /]</li>
<li  style="list-style-position:outside;font-size:12px;color:#333;">[shortcode]Inhalt[/shortcode]</li>
</ul>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Interessant wird es nun aber, wenn man &#8211; so wie ich &#8211; einen Shortcode geschrieben hat, der sowohl   in der &#8220;self-contained&#8221; (Variante 1 und 2) als auch als &#8220;enclosing&#8221; (Variante 3) Form vorkommen können soll. Verwendet man nämlich beides in dem gleichen Artikel, dann führt das zu unerwarteten Ergebnissen<sup id="fnref:1" ><a href="#fn:1"  rel="footnote"   style="color:#3B5998;">1</a></sup>.</p>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;"><span id="weiterlesen" ></span></p>

<h3 id="problem"   style="border-bottom:1px dashed #CCCCCC;clear:both;font-size:14px;font-weight:bold;margin-bottom:2px;color:#333;">Das Problem</h3>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">In meinem Fall der Shortcode &#91;link], mit dessen Hilfe ich auf Artikel oder Seiten linken kann. Dabei habe ich &#8211; faul wie ich nunmal bin &#8211; die Möglichkeit eingebaut, entweder nur &#91;link to=&#8221;post_slug|ID&#8221;] zu schreiben oder &#91;link to=&#8221;post_slug|ID&#8221;]Irgendein text, der statt dem Artikel- oder Seitentitel angezeigt werden soll, wobei ein %s mit dem Titel ersetzt wird &#91;/link].</p>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Das klappte auch alles soweit ganz gut, bis ich in einem Test-Artikel beide Varianten mischte<sup id="fnref:2" ><a href="#fn:2"  rel="footnote"   style="color:#3B5998;">2</a></sup>:</p>

<pre  style="border:1px solid #ddd;font-size:12px;"><code>\{link to="erdbeer-tiramisu"]

\{link to="stroppy-me-in-concert"]Auftritt\{/link]
</code></pre>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Das Resultat war ähnlich dem Folgenden:</p>

<pre  style="border:1px solid #ddd;font-size:12px;"><code>\{link to="stroppy-me-in-concert"]Auftritt
</code></pre>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">wobei der Text zum Artikel &#8220;Erdbeer-Tiramisu&#8221; verlinkt war.</p>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Nach stundenlanger Suche fand ich die Ursache im regulären Ausdruck, der die Shortcodes herausfiltert. Und da Ursachen finden immer der erste Schritt zur Lösung eines Problems ist, war nach ein bißchen ausprobieren und <a href="http://www.regular-expressions.info/lookaround.html" rel="external nofollow"  class="external_link"  title="Regex Tutorial - Lookahead and Lookbehind Zero-Width Assertions"   style="color:#3B5998;">Dokumentation</a> lesen die Lösung auch schon gefunden.</p>

<h3 id="behebung"   style="border-bottom:1px dashed #CCCCCC;clear:both;font-size:14px;font-weight:bold;margin-bottom:2px;color:#333;">Die Lösung</h3>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Wie bei vielen Problemen, so ist auch hier die Lösung &#8211; so die Ursache erst einmal gefunden ist &#8211; verblüffend einfach.</p>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">In der Datei wp-includes/shortcodes.php einfach den regulären Ausdruck von</p>


<div class="wp_syntax"   style="border: 1px solid #ddd;margin-bottom: 10px;"><table><tr><td class="line_numbers"   style="background-color:#f7f7f7;border-right:1px solid #e9e9e9;"><pre    style="border:1px solid #ddd;font-size:12px;border:none;font-size:12px;">178
</pre></td><td class="code" ><pre class="php"       style="font-family:monospace;border:1px solid #ddd;font-size:12px;border:none;font-size:12px;"><span class="kw1" >return</span> <span class="st_h" >'(.?)\[('</span><span class="sy0" >.</span><span class="re0" >$tagregexp</span><span class="sy0" >.</span><span class="st_h" >')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)'</span><span class="sy0" >;</span></pre></td></tr></table></div>


<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">ändern in</p>


<div class="wp_syntax"   style="border: 1px solid #ddd;margin-bottom: 10px;"><table><tr><td class="line_numbers"   style="background-color:#f7f7f7;border-right:1px solid #e9e9e9;"><pre    style="border:1px solid #ddd;font-size:12px;border:none;font-size:12px;">178
</pre></td><td class="code" ><pre class="php"       style="font-family:monospace;border:1px solid #ddd;font-size:12px;border:none;font-size:12px;"><span class="kw1" >return</span> <span class="st_h" >'(.?)\[('</span><span class="sy0" >.</span><span class="re0" >$tagregexp</span><span class="sy0" >.</span><span class="st_h" >')\b(.*?)(?:(\/))?\](?:((?:.(?!\[\2))+?)\[\/\2\])?(.?)'</span><span class="sy0" >;</span></pre></td></tr></table></div>


<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">und schon kann man beide Varianten der Shortcodes für einen Tag in einem Artikel mischen und es funktioniert wie erwartet.</p>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Dazu brauchte es nur einen negativen Lookahead, der auschließt, daß das Suchmuster passt, wenn im Inhalt des Shortcodes derselbe Shortcode noch einmal geöffnet wird<sup id="fnref:3" ><a href="#fn:3"  rel="footnote"   style="color:#3B5998;">3</a></sup>.</p>

<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;"><span class="blockhead"   style="border-left:1px dashed #CCCCCC;font-size:12px;font-weight:bold;padding-left:5px;color:#333;">Einen Nachteil hat diese Lösung jedoch:</span> Man ändert eine Kern-Datei von <a rel="tag"  title="Alle Artikel mit Stichwort Wordpress ansehen"  class="auto_tag_link"  href="http://tisie.de/stichwort/wordpress"   style="color:#3B5998;">Wordpress</a>, d.h. man muss beim nächsten Aktualisieren die Änderung wieder einfügen. Ich habe (noch) keine Ahnung, wo oder wie man dem <a rel="tag"  title="Alle Artikel mit Stichwort Wordpress ansehen"  class="auto_tag_link"  href="http://tisie.de/stichwort/wordpress"   style="color:#3B5998;">Wordpress</a>-Team Bugs melden kann, und bis ich das herausgefunden habe, werde ich diese Änderung wohl nach jeder Aktualisierung vergessen &#8211; und diesen Artikel wieder lesen :)</p>

<div class="footnotes"   style="border-top:1px dashed #ccc;margin-bottom:10px;">
<hr  style="display:none;"/>
<ol  style="margin-left:10px;padding-bottom:10px;list-style-type:decimal;">

<li id="fn:1"   style="list-style-position:outside;font-size:12px;color:#333;">
<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Einfach mal ausprobieren. Alles was zwischen dem letzten self-contained Shortcode und dem schließenden Tag des nächsten enclosing Shortcode steht, wird als Inhalt des letzten self-contained Shortcode angesehen und so behandelt.&#160;<a href="#fnref:1"  rev="footnote"   style="color:#3B5998;">&#8617;</a></p>
</li>

<li id="fn:2"   style="list-style-position:outside;font-size:12px;color:#333;">
<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">irgendwie verträgt sich Markdown und das Escapen von Shortcodes auch nicht so richtig, deshalb die &#8220;{&#8221; als Startzeichen. &#8211; vielleicht kümmer ich mich darum als 
nächstes ;)&#160;<a href="#fnref:2"  rev="footnote"   style="color:#3B5998;">&#8617;</a></p>
</li>

<li id="fn:3"   style="list-style-position:outside;font-size:12px;color:#333;">
<p  style="margin:0 0 10px;text-align:justify;font-size:12px;color:#333;">Ganz genau: <code>(.+?)</code> wird zu <code>(?:(.(?!&#91;\2)+?))</code>, wobei <code>(?!&#91;\2)</code> der negative Lookahead ist.&#160;<a href="#fnref:3"  rev="footnote"   style="color:#3B5998;">&#8617;</a></p>
</li>

</ol>
</div>


<h3 style="border-bottom:1px dashed #CCCCCC;clear:both;font-size:14px;font-weight:bold;margin-bottom:2px;">Ähnliche Artikel</h3><ul style="margin-left:10px;padding-bottom:10px;"><li style="list-style-position:outside;list-style-type:disc;font-size:12px;"><a href='http://tisie.de/allgemeines/meine-seite-ist-online' rel='bookmark' title='Permanent Link: Meine neue Seite ist endlich online'>Meine neue Seite ist endlich online</a></li>
</ul>
<p style="border-top: 1px solid #ccc; margin: 2px 5px 10px; padding: 2px 0 0; font-size: 10px; color: #999;">  
<a style="color:#3B5998;" title="Die Inhalte dieses Artikels, sofern nicht anders angegeben oder Inhalte Dritter, stehen unter einer Creative Commons Namensnennung-Keine kommerzielle Nutzung-Keine Bearbeitung 3.0 Deutschland Lizenz" href="http://creativecommons.org/licenses/by-nc-nd/3.0/de/" rel="license">(cc-by-nc-nd)</a>
2009 Mathias Gelhausen
</p>
]]></content:encoded>
			<wfw:commentRss>http://tisie.de/allgemeines/shortcodes-gemischte-schreibweisen-in-artikel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

