<?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>toscho.design&#187; WordPress</title>
	<atom:link href="http://toscho.de/thema/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://toscho.de</link>
	<description>Redaktion und schwer geprüftes Webdesign aus Halle (Saale)</description>
	<lastBuildDate>Thu, 17 May 2012 23:03:08 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>4</sy:updateFrequency>
	
		<item>
		<title>WordPress-Plugin: Opera Speed Dial Preview</title>
		<link>http://toscho.de/2012/wordpress-plugin-opera-speed-dial-preview/</link>
		<comments>http://toscho.de/2012/wordpress-plugin-opera-speed-dial-preview/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 11:00:55 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1846</guid>
		<description><![CDATA[Die Vorschau auf die eigene Seite im neuen Tab Operas anpassen: Mit einem kleinen Plugin und einer eigenen Template-Datei.]]></description>
			<content:encoded><![CDATA[<p><i lang="en">Speed Dial</i> nennt Opera die konfigurierbare Ansicht eines neuen Tabs. Hier kann man einzelne Seiten festlegen, für die man eine Vorschau haben möchte.</p>
<div id="attachment_1847" class="wp-caption alignnone" style="width: 286px"><a href="http://toscho.de/wp-content/uploads/2012/03/speed-dial-beispiel.png"><img src="http://toscho.de/wp-content/uploads/2012/03/speed-dial-beispiel-276x300.png" alt="" title="Speed-Dial-Beispiel" width="276" height="300" class="size-medium wp-image-1847" /></a><p class="wp-caption-text">Speed-Dial-Beispiel</p></div>
<p>Das sieht bei vielen Seiten recht dröge aus; also habe ich mir überlegt, wie man das besser machen kann. Immerhin bietet Opera eine <a href="http://dev.opera.com/articles/view/opera-speed-dial-enhancements/" title="Make your site shine in Speed Dial">API</a> an. Das Ergebnis ist ein kleines Plugin, das ich ganz kreativ <i>Opera Speed Dial Preview</i> genannt habe. Es liegt natürlich auf <a href="https://github.com/toscho/T5-Opera-Speed-Dial-Preview">GitHub</a>.</p>
<p class="downloadlink"><a href="https://github.com/toscho/T5-Opera-Speed-Dial-Preview/zipball/master">Download: Plugin T5 Opera Speed Dial Preview</a></p>
<p>Das Plugin erfordert keine Konfiguration. Nach dem Aktivieren fängt es Zugriffe ab, die mit dem Request-Header <code>X-Purpose: preview</code> gesendet werden und lenkt sie auf <code>/speedial/</code> um. Permalinks müssen also aktiviert sein, damit es funktioniert!</p>
<div id="attachment_1848" class="wp-caption alignnone" style="width: 413px"><img src="http://toscho.de/wp-content/uploads/2012/03/speed-dial-plugin-standardansicht.png" alt="" title="Speed-Dial-Plugin Standardansicht" width="403" height="280" class="size-full wp-image-1848" /><p class="wp-caption-text">Speed-Dial-Plugin Standardansicht</p></div>
<p>Die Ausgabe wird in der großzügig dokumentierten Datei <code>speed-dial.php</code> erzeugt. Hat das aktuell verwendete Theme eine Datei dieses Namens, so wird diese verwendet, nicht die des Plugins. Damit haben Theme-Autoren freie Hand: Einfach selbst eine Datei <code>speed-dial.php</code> ins Theme werfen, gestalten wie man möchte – fertig. Das dauert nur ein paar Minuten.</p>
<p>Für diese Seite habe ich die <a href="http://toscho.de/speeddial/">Vorschau</a> bloß um das Logo ergänzt:</p>
<div id="attachment_1849" class="wp-caption alignnone" style="width: 413px"><img src="http://toscho.de/wp-content/uploads/2012/03/speed-dial-fuer-toscho.de_.png" alt="" title="Speed Dial für toscho.de" width="403" height="280" class="size-full wp-image-1849" /><p class="wp-caption-text">Speed Dial für toscho.de</p></div>
<p>Man kann aber eingeloggten Nutzern die letzten Nachrichten eines BuddyPress-Setups präsentieren oder die zu moderierenden Kommentare auflisten … ihr habt freie Hand, denn alle normalen WordPress-Funktionen stehen zur Verfügung wie in jeder anderen Template-Datei auch.</p>
<p>Verbesserungsvorschläge sendet bitte an die <a href="https://github.com/toscho/T5-Opera-Speed-Dial-Preview/issues" title="Speed Dial Issue Tracker">passende Adresse auf GitHub</a>, damit ich sie nicht aus den Augen verliere.</p>
<p>Eure eigenen Umsetzungen interessieren mich auch! <a href="http://toscho.de/kontakt/">Schickt sie mir</a>, und ich baue eine Galerie – <a href="http://toscho.de/2009/no-no-no-nofollow/">selbstverständlich mit Dofollow-Link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/wordpress-plugin-opera-speed-dial-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Öffentliche Kontaktdaten</title>
		<link>http://toscho.de/2012/wordpress-plugin-oeffentliche-kontaktdaten/</link>
		<comments>http://toscho.de/2012/wordpress-plugin-oeffentliche-kontaktdaten/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 11:27:18 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1835</guid>
		<description><![CDATA[Ein kleines Plugin, mit dem man Kontaktdaten verwaltet, die keinem bestimmten Nutzer zugeordnet sind. Gebrauchsanweisung, Screenshot und Beispielcode.]]></description>
			<content:encoded><![CDATA[<p>Das brauche ich bei jeder Website: Eine öffentlich sichtbare E-Mail-Adresse und eine Telefonnummer. Wenn nur ein Hauptbenutzer existiert, packe ich diese Daten per <a href="https://gist.github.com/618662">Miniplugin</a> in dessen Profil. In Unternehmen und anderen Organisationen jedoch ist das keine Option: Da existiert oft eine spezielle Supporthotline, und die E-Mail-Adresse wird auch von mehreren Leuten verwaltet.</p>
<p>Das Plugin <i lang="en">Public Contact Data</i> erzeugt dafür neue Felder im Backend unter <i>Einstellungen/Allgemein</i>. Außerdem gibt es drei weitere Felder für Google Plus, Facebook und Twitter.</p>
<p>Im Screenshot hier werden vier Felder benutzt. Neben E-Mail und Telefon auch Facebook und Google Plus. Im Vordergrund sieht man den Tab mit dem Backend, im Hintergrund den Einsatz in der Website.<br />
<img src="http://toscho.de/wp-content/uploads/2012/02/screenshot.png" alt="Screenshot Public Contact Data" width="595" height="663" class="alignnone size-full wp-image-1836" /></p>
<p>Die Liste kann man über den Filter <code>'pcd_fields'</code> ändern. Ein Beispiel:</p>
<pre class="notranslate">add_filter( <code class="string">'pcd_fields'</code>, <code class="string">'change_pcd_fields'</code>, 10, 1 );
function change_pcd_fields( <var>$fields</var> )
{
	<i>// remove an item</i>
	unset ( <var>$fields</var>[<code class="string">'facebook'</code>] );

	<i>// add an item</i>
	<var>$fields</var>[<code class="string">'github'</code>] = <code class="string">'GitHub'</code>;

	return <var>$fields</var>;
}</pre>
<p>Für jedes Feld wird automatisch ein <a href="http://codex.wordpress.org/Shortcode_API">Shortcode</a> erstellt nach dem Muster <code>[public_<var>$fieldname</var>]</code>. Hintergrund dazu auf <a href="http://wordpress.stackexchange.com/q/42882/73">WordPress Stack Exchange</a>.<br />
<code>[public_email]</code> gibt als die E-Mail-Adresse aus, <code>[public_github]</code> den Wert des per Filter erzeugten GitHub-Feldes.</p>
<p>Für den Gebrauch im Theme existiert auch eine Aktion namens <code>pcd</code>. Deren erster Parameter ist der Feldname, der zweite ein Array mit Optionen:</p>
<pre class="notranslate">array (
	<code class="string">'before'</code>  => <code class="string">''</code>,
	<code class="string">'after'</code>   => <code class="string">''</code>,
	<code class="string">'link'</code>    => TRUE,
	<code class="string">'print'</code>   => TRUE,
	<code class="string">'pattern'</code> => FALSE
);</pre>
<p>Um einen E-Mail-Link zu bekommen, schreibt man beispielsweise:</p>
<pre class="notranslate">do_action( <code class="string">'pcd'</code>, <code class="string">'email'</code>, array ( <code class="string">'before'</code> => <code class="string">'Email: '</code> ) );</pre>
<p>Die E-Mail-Adresse wird immer maskiert ausgegeben, also durch die Funktion <a href="http://codex.wordpress.org/Function_Reference/antispambot"><code>antispambot()</code></a> geschickt. Das hilft nicht viel, schadet aber auch nicht.</p>
<p>Wird das Argument <code>pattern</code> benutzt, so wird <code>link</code> ignoriert. Benutze <code>%value%</code> als Platzhalter im Pattern-String.</p>
<p>Der Vorteil beim Einsatz der Aktion: Wird das Plugin abgeschaltet, passiert nichts Schlimmes. Es wird einfach nichts ausgegeben, weil WordPress die Aktion ja nicht mehr kennt und somit ignoriert.</p>
<p>Man kann die wenigen öffentlichen Funktionen der Klasse auch über den Zugriff auf eine eventuell schon existierende Instanz ansprechen. Beispiel:</p>
<pre class="notranslate">Public_Contact_Data::instance()->action_handler( <var>$field</var>, <var>$options</var> );</pre>
<p>Das Plugin ist natürlich übersetzbar, eine deutsche Übersetzung liegt bei. Deshalb heißt es in der Pluginliste eines ins Deutsche übersetzten WordPress’ auch <i>Öffentliche Kontaktdaten</i>. Momentan wird die Sprachdatei nur im Backend geladen, um die Ladezeit zu schonen.</p>
<p class="downloadlink"><a href="https://github.com/toscho/Public-Contact-Data/zipball/master">Download</a></p>
<p>Den Code findet man <a href="https://github.com/toscho/Public-Contact-Data">auf GitHub</a>, im <a href="https://github.com/toscho/Public-Contact-Data/issues">Bugtracker</a> dort möchte ich auch Fehlermeldungen und Verbesserungsvorschläge sehen.</p>
<p>Ich habe das Plugin unter eine <a href="http://www.opensource.org/licenses/mit-license.php">MIT Lizenz</a> gestellt. Die ist kompatibel mit der GPL, gibt dem Benutzer aber etwas mehr Freiraum.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2012/wordpress-plugin-oeffentliche-kontaktdaten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Das Fefe-Theme</title>
		<link>http://toscho.de/2011/fefe-theme/</link>
		<comments>http://toscho.de/2011/fefe-theme/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 19:33:03 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1816</guid>
		<description><![CDATA[Ihr wart hoffentlich alle hübsch unartig? Dann habe ich das passende Geschenk: Ein WordPress-Theme zu Ehren <a href="http://blog.fefe.de">Fefes Blogs</a>.]]></description>
			<content:encoded><![CDATA[<p><a href="http://toscho.de/wp-content/uploads/2011/12/screenshot.png"><img src="http://toscho.de/wp-content/uploads/2011/12/screenshot-150x150.png" alt="" width="150" height="150" class="alignright size-thumbnail wp-image-1817" /></a>Ihr wart hoffentlich alle hübsch unartig? Dann habe ich das passende Geschenk: Ein WordPress-Theme zu Ehren <a href="http://blog.fefe.de">Fefes Blogs</a>. Ich weiß zwar, was er von WordPress hält, aber das ist mir egal. Ich hatte mal Lust auf CSS-Verzicht.</p>
<p>Das Theme verwendet kein Stylesheet, keine Tags oder Kategorien, keine Post-Titel, und mit Bildern kann man auch nicht viel anfangen. Es gibt zwei Widgetflächen – oben und unten – da kann man Text hineinsetzen, wenn man möchte. Einen Shortcode für den Einbau des Suchformulars habe ich auch erstellt: <code>[searchform]</code>. Damit kann man die Maske auf einer beliebigen Seite mitten im Text plazieren.</p>
<div id="attachment_1818" class="wp-caption alignnone" style="width: 460px"><img src="http://toscho.de/wp-content/uploads/2011/12/vergleich-fefe.png" alt="" width="450" height="400" class="size-full wp-image-1818" /><p class="wp-caption-text">Vergleich Original und Theme</p></div>
<p>Die Sprache ist Englisch, es liegt aber eine deutsche Sprachdatei bei, und <a href="http://www.rarst.net">Andrey Savchenko</a>, den einige sicher als <a href="http://wordpress.stackexchange.com/users/847/rarst">Rarst von WordPress Answers</a> kennen, hat die Übersetzung ins Russische besorgt. Cool.</p>
<p>Das Repository liegt natürlich auf GitHub: <a href="https://github.com/toscho/Fefe-Tribute-Theme">https://github.com/toscho/Fefe-Tribute-Theme</a></p>
<p>Die <a href="https://github.com/downloads/toscho/Fefe-Tribute-Theme/fefe-theme.1.0.zip">Version 1.0 herunterladen</a> könnt ihr dort auch.</p>
<p>Verbesserungsvorschläge und Feature-Requests packt bitte in den <a href="https://github.com/toscho/Fefe-Tribute-Theme/issues">Issue-Tracker</a>, damit ich den Überblick behalte. Danke!</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/fefe-theme/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordCamp Köln 2011</title>
		<link>http://toscho.de/2011/wordcamp-koeln-2011/</link>
		<comments>http://toscho.de/2011/wordcamp-koeln-2011/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 17:28:51 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Kunterlei]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1808</guid>
		<description><![CDATA[Notizen einer kleinen Reise nach Köln.]]></description>
			<content:encoded><![CDATA[<h2>Freitag</h2>
<p>Nach einer furchtbaren Nacht ohne Kater kurz nach 5 aus dem Bett. 11 Uhr kommen <a href="http://stil-etage.de/">Nick</a> und <a href="http://dynamicinternet.eu/">Micha</a> und wir brausen los.<br />
Da Nick Zoff mit der Dame im Navigationsgerät hat, kommen wir erst gegen 17:30 Uhr im <a href="http://www.meininger-hotels.com/hotel-hostel/hotelsuche/koeln/">Hotel Meininger</a> an. Von dort gleich weiter zur <a href="http://www.frueh.de/">Brauerei Früh</a>, wo schon 50 andere sitzen. Drinnen ist es laut und voll; statt Bier gibt es <em>Kölsch</em>, eine Art teure Pisse. Ich bestelle eine Bockwurst, von der ich so lange esse, bis der Kotzdrang den Hunger aussticht. </p>
<p><a href="http://toscho.de/wp-content/uploads/2011/09/brauerei-frueh.jpg"><img src="http://toscho.de/wp-content/uploads/2011/09/brauerei-frueh-300x200.jpg" alt="Brauerei Früh" width="300" height="200" class="aligncenter size-medium wp-image-1809" /></a></p>
<p>Flucht mit <a href="http://mobile.twitter.com/cbuchler">@cbuchler</a> zum Starbucks, einen großen Kaffee fassen, dann ins Hotel. Rückzug nach innen in der Lobby, Mails abrufen, Code schreiben. 12 Uhr ins Bett. Die Inpsydetruppe feiert bis 4. Wir stehen alle 7 Uhr auf, ich bin sogar wach.</p>
<h2>Köln</h2>
<p>Köln ist 1970 eingefroren. Der Lohn ist ewig gutes Wetter, die Strafe Kölsch. Vermutlich hat Köln selbst dann gutes Wetter, wenn es Scheiße regnet. Weil die Leute es nicht merken. Weil sie Kölsch trinken.</p>
<p>Jeder duzt jeden. Im Hotel, in der Kneipe, bei Starbucks und im Taxi. Ich fühle mich ganz kurz etwas jünger, bis mir aufgeht, daß das Duzen hier einfach nichts mit dem Alter zu tun hat.</p>
<h2>Samstag</h2>
<p>Frühstück im Hotel. Ich verdicke die Kaffeeparodie mit Milch. Erster Anflug von Heimweh.</p>
<p>Bei gutem Wetter schlendern wir gegen 8 zur Universität. Verkachelte Wände, der Kaffeeautomat spuckt eine Brühe in den Pappbecher, die sicher nicht zum ersten Mal eine Niere sieht. Namensschilder und T-Shirts werden verteilt, Räume gesucht. <a href="http://bueltge.de/">Frank</a> und <a href="https://plus.google.com/106682881083587476194/about">Olaf</a> erklären den Ablauf.  Die ersten Memmen jammern auf Twitter, weil ihr Drei-Wetter-Taft versagt.</p>
<p>Die Sessions interessieren mich nicht. Das wußte ich vorher, ich bin der Leute wegen hier. Bis zur Mittagspause schwatze ich mich durch die Besucherschar, teste einen pappigen Cappuccino und Apfelschorle.<br />
Der Koffeinist in mir sticht bös und böser zu. Frank und ich rennen ins nächste Café, wo wir eilig jeder zwei Tassen Kaffee einsaugen. Und über <a href="http://wordpress-buch.bueltge.de/">DAS BUCH</a> sprechen. Das längst schon fertig sein sollte …</p>
<p>Zurück zur Uni, Frank hält <a href="http://bueltge.de/wordpress-mehrsprachig/">seine Session</a>, die einzige, die mich interessiert, in einem Raum, der mir zu voll ist. Ich seh’ den Code schon früh genug.</p>
<p><a href="http://toscho.de/wp-content/uploads/2011/09/bueltge-mehrsprachigkeit.jpg"><img src="http://toscho.de/wp-content/uploads/2011/09/bueltge-mehrsprachigkeit-300x200.jpg" alt="Frank Bueltge: Mehrsprachigkeit mit Multisite" width="300" height="200" class="aligncenter size-medium wp-image-1810" /></a></p>
<p>Also gehe ich mit dem <a href="https://plus.google.com/100967148217893238418/posts">Schepp</a> in ein anderes Café. Langsam gewinne ich wieder menschenähnliche Züge. Mit Christian kann ich gut plaudern, auch mal eine Pause einlegen, die nicht peinlich wirkt.<br />
Mein leises Bedauern darüber, zu wenig Zeit für Köln zu haben, kontert Christian mit dem Hinweis auf das <a href="http://www.multimediatreff.de/naechstestreffen.php">nächste MMT</a>. Oha! Da habe ich gleich Lust drauf.</p>
<p>In die letzte Session werde ich von den Inpsyde-Leute sehr bestimmt hineingebeten. WordPress-Jeopardy. Die Besucher werden in zwei Gruppen aufgeteilt, die gegeneinander antreten. Ich darf in <em>keine</em> Gruppe. Ich bin der »Joker«, bekomme 1000 Punkte, weil ich einen semantischen Fehler korrigiere, statt die Frage zu beantworten, tue so, als fühlte ich mich nicht verarscht. Spiele mit.</p>
<p>Danach erwische ich endlich noch <a href="http://sprungmarker.de/">Sylvia</a> für einen kurzen Plausch, bedanke mich für ihre Hilfe bei einem Artikel, der schon viel zu lange seines letzten Schliffs wartet und dringend hier ans Licht möchte.<br />
Mit <a href="http://dnaber.de/">David</a> kann ich auch endlich schwatzen. Aus dem wird mal ein guter Nerd.<br />
Wir gehen zum <a href="http://www.flickr.com/search/?q=Aachener+Weiher">Aachener Weiher</a>, liegen auf der Wiese und sehen den Mädels zu. Ich koste die letzten Sonnenstrahlen aus. Jemand hext mir ein Kölsch in die Hand. Ich laufe umher, Musik in den Beinen. Eine Frau in roter Latzhose mit zwei Beuteln in der Hand führt Selbstgespräche. Wir teilen ein Lächeln.</p>
<p><a href="http://toscho.de/wp-content/uploads/2011/09/aachener-weiher.jpg"><img src="http://toscho.de/wp-content/uploads/2011/09/aachener-weiher-300x200.jpg" alt="Sonnenbad am Aachener Weiher" width="300" height="200" class="aligncenter size-medium wp-image-1811" /></a></p>
<p>Mit 30 Leuten irren wir zum <a href="http://www.maracana-rodizio-restaurant.de/" title="Vorsicht Flash.">Maracana Rodizio</a>. Hier haben wir 20 Plätze reserviert. Und kein Stuhl mehr frei. Die Gruppe schrumpft leider.<br />
Es gibt Caipirinha und leckere Vorspeisen, dann rennen Kellner um die Tische und schälen Fleisch auf unsere Teller. Alle halbe Stunde schlängeln Tänzerinnen zu ohrenbetäubend lauter Musik an der Theke entlang. Ich fliehe hinaus.</p>
<p>Gegen 22 Uhr zum Hotel zurück, schwatzen, noch einen Tee und Mitternacht ins Bett. Ich schlafe schlecht, ab 5 fechten die vielen scharf gewürzten Fleischstücke in meinem Magen einen Krieg aus.</p>
<p>7:45 Uhr Frühstück allein. Bis 10 fallen alle anderen aus ihren Betten, Gruppenfoto, Abfahrt. Die Tour zurück klappt reibungslos, allein Nicks iPhone nimmt sich eine Wärmepause.<br />
Kurz nach der Heimkehr bringt mein Bruder den Kater zurück, und sobald ich den original brasilianischen Tinnitus überwunden habe, kann ich die Stille genießen.</p>
<hr />
<p>Ich wollte noch eine Kundin treffen, die dort wohnt, hätte gerne mehr von der Stadt gesehen, vor allem von den Antiquariaten.<br />
Aber ich war schon bis zum Anschlag überreizt. Ich brauche öfter mal Pause, muß die Ideen wegschreiben, die sich unentwegt in mir auftürmen, Ruhe finden. Und ich kann das endlich auch. Manchmal.</p>
<p>Andere haben das WordCamp kritisiert. Manche haben einfach nur geschimpft. Es kommt wohl darauf an, was man erwartet. Ich bin zufrieden.</p>
<p>Alle Fotos hat <a href="http://de.xtreme-theme.com/">Alexander Frison (Xtreme Theme)</a> geschossen. Danke! Mehr Bilder gibt es in seinem <a href="http://de.xtreme-theme.com/2011/09/wordcamp-2011-nachlese-bilder-und-20-gutschein/">Artikel zum WordCamp</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordcamp-koeln-2011/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>WordPress: Headergrafik per Plugin ausblenden</title>
		<link>http://toscho.de/2011/wordpress-headergrafik-per-plugin-ausblenden/</link>
		<comments>http://toscho.de/2011/wordpress-headergrafik-per-plugin-ausblenden/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 05:02:18 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1805</guid>
		<description><![CDATA[Ein Header-Image aus einem bestehendem Theme entfernen: Hier zeige ich den Weg über ein Plugin als Alternative zum Child-Theme.]]></description>
			<content:encoded><![CDATA[<p>Seit Version 2.9 kann man in <a href="http://toscho.de/angebote/wordpress/themes/">WordPress-Themes</a> die internen Funktionen für eine eigene Kopfgrafik nutzen mit der Funktion <code><a href="http://codex.wordpress.org/Function_Reference/add_custom_image_header">add_custom_image_header()</a></code>. Jetzt bekommt der Nutzer des Themes im Backend unter <em>Design/Kopfzeile</em> eine nette kleine Bildverwaltung. Leider fehlt dort die Option, das Bild komplett wegzulassen.</p>
<p>Gute Themes bieten dafür eine Option an, TwentyTen und auch TwentyEleven leider nicht. Die nachträgliche Entfernung ist umständlich, wenn man kein Child-Theme erstellen möchte.</p>
<p>Deshalb habe ich ein kleines Plugin geschrieben, das sowohl das Bild im Frontend entfernt als auch den Menu-Eintrag im Backend.</p>
<p class="downloadlink"><a href="https://gist.github.com/1115203">Plugin Remove Header Image</a></p>
<p>Wie üblich – es gibt ein mindestens zwei Haken: Wenn im Theme nicht geprüft wird, ob überhaupt ein Bild vorhanden ist, ehe der Container dafür ausgegeben wird, bekommt man eine leere Fläche. Das ist dann eben ein Schrott-Theme. Davon gibt es leider zu viele.<br />
Und die Seite im Backend ist immer noch erreichbar, wenn man die URL dahin kennt. Bilder kann man aber nicht mehr hochladen.</p>
<p>Als Beispiel für den Einsatz in der Praxis sei das <a href="http://drehlog.de/">Videoblog Drehlog</a> genannt. Dort blogge ich mit ein paar Freunden ab und zu … tja … Videos.</p>
<p><a href="http://drehlog.de/"><img src="http://toscho.de/wp-content/uploads/2011/07/drehlog-300x300.png" alt="Screenshot Drehlog" width="300" height="300" class="aligncenter size-medium wp-image-1806" /></a></p>
<p>Irgendwie werde ich das Gefühl nicht los, einen leichteren Weg übersehen zu haben … sei’s drum.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-headergrafik-per-plugin-ausblenden/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>WordPress: Ein Plugin ist ein Plugin</title>
		<link>http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/</link>
		<comments>http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 13:25:16 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1793</guid>
		<description><![CDATA[Welcher Code gehört wohin? Wie mache ich es meinen Nutzern leicht – und mir selbst? Ein Blick auf meine Arbeitsweise und vielleicht sogar eine Entscheidungshilfe.]]></description>
			<content:encoded><![CDATA[<p>Ich will die Frage nicht mehr lesen: <i>Warum ist <a href="http://toscho.de/2010/wordpress-plugin-germanix/">Germanix</a> ein Plugin und keine <a href="https://github.com/bueltge/de_DE.php">de_DE.php</a> wie bei Frank Bültge?</i></p>
<p>Die erste Antwort darauf sieht ganz pragmatisch aus: Ungeachtet des schlecht gewählten Namens eignet sich Germanix für <strong>viele Sprachen:</strong> Dänisch, Türkisch, Französisch oder Spanisch zum Beispiel.<br />
Als <code>de_DE.php</code> wäre der Nutzen ohne Not reduziert, denn die benutzt WordPress ja nur, wenn in der <code>wp-config.php</code> eben diese Sprache angegeben wurde.</p>
<p>Die zweite – und mir wichtigere – Antwort fällt vielleicht eher unter <strong>Meinung,</strong> deshalb möchte ich vorausschicken, wie meine Sicht gefärbt ist: Ich schreibe pro Woche mindestens ein <a href="http://toscho.de/angebote/wordpress/plugins/">Plugin</a>, oft zwei, manchmal drei. Pro Monat schreibe ich zwei bis drei <a href="http://toscho.de/angebote/wordpress/themes/">Themes</a>. Ich weiß also ein wenig, was wo am besten funktioniert. Oder ich bin eingefahren, wie immer man das sehen möchte.</p>
<p>Was ich nicht bin: perfekt. Ich mache Fehler, schreibe <strong>Bugs</strong> in meinen Code, die ich dann wieder repariere. Bei einem komplexen System, dessen Bestandteile (Core, Themes und Plugins) separat aktualisiert oder ersetzt werden, kann sich so ein Bug recht gut verstecken. Manchmal entsteht so ein Fehler auch durch fremden Code, der nicht sauber geschrieben wurde, oder durch das Aufeinandertreffen zweier an sich ganz harmloser Codes.</p>
<p>Beispiel: Ein Beitrag wird plötzlich ganz anders ausgegeben, als er geschrieben wurde. Oder der Permalink dafür leitet auf die Fehlerseite.<br />
In solchen Fällen gehe ich wissenschaftlich vor: Ich ändere immer nur eine Variable, Schritt für Schritt, bis ich alle notwendigen Faktoren ermittelt habe. Dann weiß ich, wo ich suchen und flicken muß.</p>
<p><strong>Programmieren ist zu 80% Debuggen, also muß das einfach sein.</strong></p>
<p>Das heißt: Ich muß Code schnell und möglichst granular abschalten können. Als <code>de_DE.php</code> müßte ich zum Debuggen die Datei umbenennen, denn allein das Ändern der Sprache in der <code>wp-config.php</code> erfaßt zu viele weitere Faktoren. Das ist mir zu umständlich, obendrein vergesse ich es vielleicht.</p>
<p class="wideimg"><a href="http://www.flickr.com/photos/publicenergy/3325641526/"><img src="http://toscho.de/wp-content/uploads/2011/04/messy2.jpg" alt="" title="Messy! von publicenergy" width="560" height="420" class="aligncenter size-full wp-image-1796" /></a></p>
<p>Und für die Nutzer meines Plugins ist es noch umständlicher. Wer hat schon immer das FTP-Programm oder eine SSH-Shell geöffnet, wenn er an WordPress sitzt?</p>
<p>Als klassisches Plugin kann ich Germanix jederzeit einfach und isoliert abschalten.</p>
<p>Gleiches gilt auch für viele Hacks, die für die <code>functions.php</code> <a href="http://wordpress.stackexchange.com/questions/1567/best-collection-of-code-for-your-functions-php-file">empfohlen werden</a>. Wenn der eingebaute Code im Stylesheet oder in einer Template-Datei nicht berücksichtigt werden muß, dann gehört er in ein Plugin.<br />
Dabei entsteht keine zusätzliche Last, nur die Liste der aktiven Plugins wird um einen Eintrag erweitert. Und wenn diese paar Zeichen dein System schon in Not bringen, dann ist das System kaputt.</p>
<p>Wenn dir jemand sagt, er habe Plugin-Funktionalität <em>ohne ein Plugin</em>, dann glaub es nicht. Nicht der Ort des Codes entscheidet darüber, ob er ein Plugin ist, sondern das, was er tut. Auch ich habe diesen Fehler <a href="http://toscho.de/2009/no-no-no-nofollow/">schon begangen</a>. <strong>Sorry.</strong><br />
Mein <a class='piwik_download' href="https://github.com/toscho/Toscho-Dofollow">Dofollow-Code ist jetzt ein Plugin</a>, der Code zur <a href="http://toscho.de/2009/wordpress-umbruch-titel-steuern/">Kontrolle des Umbruchs</a> im Titel <a class='piwik_download' href="https://github.com/toscho/Prevent-Title-Widows">auch</a>.</p>
<p>Warum ist also Germanix ein Plugin? Weil es ein Plugin <em>ist</em>. Der Code benutzt die Plugin-API, er kann vom Theme komplett ignoriert werden, und er muß abschaltbar sein.</p>
<h2>Weitere Lektüre</h2>
<ul>
<li><a href="http://toscho.de/2010/wordpress-plugin-germanix/">WordPress-Plugin: Germanix</a></li>
<li><a href="http://toscho.de/2010/wordpress-cms-plugins/">WordPress als CMS: Hilfreiche Plugins</a></li>
<li><a href="http://toscho.de/2010/wordpress-tutorial-ein-framebreaker-plugin-schreiben/">WordPress-Tutorial: Ein Framebreaker-Plugin schreiben</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>WordPress: Adminbar in Systemfarben</title>
		<link>http://toscho.de/2011/wordpress-adminbar-in-systemfarben/</link>
		<comments>http://toscho.de/2011/wordpress-adminbar-in-systemfarben/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 20:38:19 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1788</guid>
		<description><![CDATA[Ein WordPress-Plugin für eine angenehm bedienbare Adminbar. Screenshots und Download.]]></description>
			<content:encoded><![CDATA[<p>Ich finde die neue Adminbar recht praktisch, zumindest mit der <a href="http://wordpress.org/extend/plugins/debug-bar/">Debug-Bar</a>.</p>
<p>Leider sieht sie dämlich aus: Hellgrau auf Mittelgrau, zeitgemäß verhunzt mit Schatten und abgerundeten Ecken. Kinkerlitzchen, CSS3 vom Schlimmsten.</p>
<p>Ich habe diesen Quatsch mal aufgeräumt, die Farben auf die des Betriebssystems umgestellt und ein Plugin daraus gemacht:</p>
<p class="downloadlink"><a class='piwik_download' href="https://github.com/toscho/Admin-Bar-In-System-Colors">Admin Bar In System Colors</a></p>
<p class="wideimg"><a href="http://toscho.de/wp-content/uploads/2011/04/admin-system-compare.png"><img src="http://toscho.de/wp-content/uploads/2011/04/admin-system-compare.png" alt="Vergleich der Adminbar mit und ohne Plugin" width="650" height="400" class="alignnone size-full wp-image-1789" /></a></p>
<p>Das kann hoffentlich jede und jeder gut lesen.</p>
<p>Forks, Fragen oder <del datetime="2011-04-06T20:15:54+00:00">Fer</del> Verbesserungsvorschläge?</p>
<p>Umfangreiche Browsertests habe ich noch nicht gemacht – keine Zeit! – und vielleicht sollte ich das Standardstylesheet komplett ersetzen, statt es zu überschreiben. Auch über die feste Höhe samt Pixelschriftgröße werde ich sicher nochmal nachdenken. Und die kleine Grafik für aufklappbare Menus kann man kaum noch erkennen …</p>
<h2>Weiterlesen</h2>
<ul>
<li><a href="http://toscho.de/2010/wordpress-plugin-backend-style-enhancements/">WordPress-Plugin: Backend Style Enhancements</a></li>
<li><a href="http://toscho.de/2010/wordpress-grundeinstellungen-per-plugin-setzen/">WordPress: Grundeinstellungen per Plugin setzen</a></li>
<li><a href="http://toscho.de/2009/wordpress-administrator-php-herausfinden/">WordPress: Administrator mit PHP herausfinden</a></li>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-adminbar-in-systemfarben/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>WordPress: Permanente Umleitung auf upgrade.php beheben</title>
		<link>http://toscho.de/2011/wordpress-umleitung-upgrade-php-beheben/</link>
		<comments>http://toscho.de/2011/wordpress-umleitung-upgrade-php-beheben/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 07:30:58 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1784</guid>
		<description><![CDATA[Wie man eine überflüssige Umleitung behebt.]]></description>
			<content:encoded><![CDATA[<p>Eben habe ich ein Blog auf Version 3.1 aktualisiert. Danach wurde ich immer auf <code>wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2Findex.php</code> umgeleitet, wenn ich auf den Link zum Dashboard – <code>/wp-admin/index.php</code> – geklickt habe.<br />
Ein direkter Aufruf der Adresse <code>/wp-admin/</code> (ohne <code>index.php</code>) hingegen klappte problemlos.</p>
<p>Eine kurze Suche im Quellcode ergab den Auslöser: In der <code>/wp-admin/admin.php</code> steht eine Abfrage, ob die Datenbank aktualisiert wurde. Steht der Wert <code>db_upgraded</code> in der Optionstabelle nicht auf <code>FALSE</code>, so wird die Umleitung erzeugt, die dann eigentlich den Wert nach dem ersten Aufruf korrekt setzen sollte. Warum das nicht klappt, kann ich noch nicht sagen, aber die Lösung liegt jetzt auf der Hand:</p>
<ol>
<li>Rufe <code>/wp-admin/options.php</code> auf. Diese URL mußt du vermutlich per Hand eingeben.</li>
<li>Suche nach dem Eintrag <code>db_upgraded</code> und setze eine <code>0</code> (Null) hinein.</li>
<li>Drücke auf »Änderungen übernehmen«. Fertig.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-umleitung-upgrade-php-beheben/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Magische Widgets</title>
		<link>http://toscho.de/2011/wordpress-plugin-magische-widgets/</link>
		<comments>http://toscho.de/2011/wordpress-plugin-magische-widgets/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 14:19:56 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Markup]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1768</guid>
		<description><![CDATA[Wie man Widgets auch in die heikelsten Stellen schiebt. Download und ausführliche Dokumentation inklusive.]]></description>
			<content:encoded><![CDATA[<p class="downloadlink"><a href="http://wordpress.org/extend/plugins/magic-widgets/">Download auf wordpress.org</a></p>
<p><i lang="en">For discussions in English about bugs and feature requests use the <a href="https://github.com/toscho/WP-Magic-Widgets/issues">GitHub issue tracker</a>.</i></p>
<p>Neulich stand ich vor einem spannenden Problem: Ein Freund wollte eine Zeile JavaScript und einen Link auf ein Stylesheet in den Header seines <a href="http://toscho.de/angebote/wordpress/themes/" title="Ich baue auch eigene!">Themes</a> bringen. Dieses Theme stammt aus dem <a href="http://wordpress.org/extend/themes/">Verzeichnis auf wordpress.org</a>, und es sollte weiterhin automatisch aktualisiert werden. Ich konnte also nicht direkt hineinschreiben.<br />
Nun hätte ich ein <a href="http://codex.wordpress.org/Child_Themes">Child-Theme</a> anlegen können, aber das fand ich dann etwas zu umständlich. Obendrein wäre das eine Speziallösung gewesen, und ich bin nun einmal Generalist.<br />
Ich wollte eine Lösung, die ich wiederverwenden kann. Und ihr vielleicht auch.</p>
<p>Zeit für einen kleinen Zaubertrick.</p>
<h2>Das Konzept</h2>
<p>Im Kopfteil eines jeden Themes, das auf wordpress.org zugelassen wird, finden wir die Funktion <a href="http://codex.wordpress.org/Plugin_API/Action_Reference/wp_head">wp_head</a>. Diese löst eine gleichnamige Aktion aus. Wenn wir uns in diese Aktion einklinken, können wir tun, was immer uns beliebt. Zum Beispiel Text ausgeben.</p>
<p>Als Plugin wäre das ein Vierzeiler:</p>
<pre class="notranslate">&lt;?php
<i>/* Plugin Name: Simple Head Insert */</i>
add_action( <code class="string">'wp_head'</code>, <code class="string">'simple_head_insert'</code> );
function simple_head_insert() { echo <code class="string">'&lt;!-- Buh! --&gt;'</code>; }</pre>
<p>Ganz nett, aber irgendwie … nicht gut genug. Es ist immer noch zu speziell, weil die Ausgabe fest im PHP-Code steht. Wenn die Ausgabe oder die Position geändert werden soll, muß das Plugin umgeschrieben werden. Das ist sehr fehleranfällig.</p>
<p>Jemand anderes möchte vielleicht Code im Backend einfügen. Der muß sich das Plugin im Grunde selbst neu schreiben.</p>
<p>Also habe ich mir gedacht: Dann hänge ich doch einfach an die Aktion <code>widgets_init</code> eine Funktion, die eine Instanz einer Klasse erzeugt, die für die Aktionen <code>wp_head</code>, <code>wp_footer</code>, <code>admin_head</code> und <code>admin_footer</code> eine weitere Funktion registriert, die wiederum den Inhalt einer ebenfalls registrierten Sidebar ausgibt, die man frei mit einem Widget befüllen kann, das ich in eine weiteren Klasse gepackt habe.</p>
<p>Klarsoweit?</p>
<p>Nicht? Dann kannst du dir den <strong><a href="https://github.com/toscho/WP-Magic-Widgets">Code auf GitHub ansehen und herunterladen</a></strong>. Für die Eingabe des HTML-Codes habe ich eine einfachere Variante des nativen Text-Widgets geschrieben; sie heißt <strong>Unfiltered Text Widget</strong>.</p>
<p>150 Zeilen mehr als die erste Version, dafür um so mächtiger. Frank wird mich sicher noch ermahnen, daß ich doch eine Sprachdatei einarbeiten sollte. Keine Lust. Insgesamt finde ich den Code immer noch angenehm einfach und enorm flexibel zugleich. Ich bin ausnahmsweise und sicher nur für kurze Zeit mal zufrieden damit.</p>
<h2>Einsatz</h2>
<p>Jetzt wollen wir uns noch ansehen, wie man das verdammte Ding benutzt.</p>
<p>Zunächst laden wir es herunter, packen es ins Pluginverzeichnis und aktivieren es. Ja, sehr spannend.</p>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/activate.png" alt="" title="Plugin aktivieren" width="588" height="109" class="alignnone size-full wp-image-1774 border" /></p>
<p>Jetzt gehen wir auf »Design/Widgets«, und da haben wir vier neue Sidebars und ein neues Widget namens »Unfiltered Text«.</p>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/sidebars-backend.png" alt="" title="Sidebars im Backend" width="309" height="281" class="alignnone size-full wp-image-1775 border" /><img src="http://toscho.de/wp-content/uploads/2011/01/unfiltered-text-widget.png" alt="" title="Widget Unfiltered Text" width="274" height="71" class="alignnone size-full wp-image-1776 border" /></p>
<p>Wir klappen zur Probe mal die Box für den »Front End Header« auf und ziehen das neue Widget hinein. Das können wir übrigens überall benutzen, auch in anderen Sidebars.</p>
<p>In das Eingabefeld schreiben wir ein Script:</p>
<pre class="notranslate">&lt;script&gt;alert('Buh!');&lt;/script&gt;</pre>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/unfiltered-text-widget-edit.png" alt="" title="Widget-Editor" width="375" height="339" class="alignnone size-full wp-image-1773 border" /></p>
<p>Und dann rufen wir das Frontend unserer Website auf:</p>
<p><img src="http://toscho.de/wp-content/uploads/2011/01/script-test.png" alt="" title="Script-Test" width="347" height="129" class="alignnone size-full wp-image-1777" /></p>
<p>Faaaantastisch! Jetzt kann uns nichts mehr bremsen.</p>
<ul>
<li>In den Footer des Frontends können wir den Tracking-Code des <a href="http://toscho.de/2009/piwik-ueberblick-installation/">Analyse-Tools unserer Wahl</a> eingeben – und schon geht das Gezähle los.</li>
<li>In den Header des Backends können wir schreiben:
<pre class="notranslate">&lt;style&gt;#footer{display:none}&lt;/style&gt;</pre>
<p>Und – zack! – ist der Footer weg.</li>
<li>Wir können den JavaScript-Code des <a href="http://toscho.de/2010/wordpress-plugin-icon-to-link/">Plugins Icon to Link</a> einbauen.</li>
<li>Wer so richtig Spaß haben will, schreibt sich dies in beide Header:
<pre class="notranslate">&lt;style&gt;body{display:none}&lt;/style&gt;</pre>
</li>
</ul>
<p>Für weitere kreative Ideen und die obligatorischen … Verbesserungsvorschläge stehen euch die Kommentare offen.</p>
<h2>Anpassen</h2>
<p>Für Hacker habe ich zwei Filter eingebaut, die eine Kombination des Plugins mit dem eigenen Theme erlauben:</p>
<ol>
<li><code class="string">'magic_widgets_actions'</code> übergibt einen Array mit den Aktionen. Den können wir per Filter in der <code>functions.php</code> frei ändern:
<pre class="notranslate">add_filter( <code class="string">'magic_widgets_actions'</code>, <code class="string">'change_magic_widget_actions'</code>, 10, 1 );
function change_magic_widget_actions( <var>$arr</var> )
{
    <i>// Add</i>
    <var>$arr</var>[<code class="string">'loop_start'</code>] = <code class="string">'Post List Start'</code>;
    <i>// Remove</i>
    unset( <var>$arr</var>[<code class="string">'admin_footer'</code>] );
    <i>// Rename</i>
    <var>$arr</var>[<code class="string">'admin_head'</code>] = <code class="string">'HTML-Kopf Administration'</code>;
    return <var>$arr</var>;
}</pre>
<p>Mehr Aktionen findet ihr im <a href="http://codex.wordpress.org/Plugin_API/Action_Reference">Codex</a>, bei <a href="http://adambrown.info/p/wp_hooks">Adam R Brown</a> und auf <a href="http://docs.der-design.com/wp-actions-filters/">der-design.com</a>.</p>
<p>Ich habe mich auf die vier oben genannten Aktionen beschränkt, um die Widgetliste im Backend übersichtlich zu halten. Im Prinzip können wir aber auch 40 oder 400 Aktionen ansprechen.
</li>
<li>Den Namen <strong>Unfiltered Text</strong> können wir über den Filter <code class="string">'magic_widgets_name'</code> ändern (I18n für Arme!).</li>
</ol>
<p>Fehlt was? Funktioniert alles?</p>
<h2>Weitere Artikel dazu hier im Blog</h2>
<ul>
<li><a href="http://toscho.de/2010/wordpress-tutorial-ein-framebreaker-plugin-schreiben/">WordPress-Tutorial: Ein Framebreaker-Plugin schreiben</a></li>
<li><a href="http://toscho.de/2010/wordpress-tutorial-eigenes-widget-schreiben/">WordPress-Tutorial: Eigenes Widget schreiben</a></li>
<li><a href="http://toscho.de/2009/wordpress-parallele-widgets/">WordPress: Parallele Widgets</a></li>
<li><a href="http://toscho.de/2010/wordpress-plugin-backend-style-enhancements/">WordPress-Plugin: Backend Style Enhancements</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2011/wordpress-plugin-magische-widgets/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>WordPress-Plugin: Icon to Link</title>
		<link>http://toscho.de/2010/wordpress-plugin-icon-to-link/</link>
		<comments>http://toscho.de/2010/wordpress-plugin-icon-to-link/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 17:39:07 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[icon]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1759</guid>
		<description><![CDATA[Ein kleines Plugin, das den Editor verständlicher gestaltet.]]></description>
			<content:encoded><![CDATA[<p>Die Icons über dem Editor in WordPress sparen zwar Platz, verstanden werden sie leider nicht immer. Müde dieser Art Support habe ich kleines Plugin verzapft, das aus den Icons klassische Textlinks macht: <a href="https://github.com/toscho/Icon-to-link">Plugin Icon to Link auf GitHub</a>.</p>
<p>So wirkt es:<br />
<img src="http://toscho.de/wp-content/uploads/2010/12/icon-to-link.png" alt="" title="Icon to Link" width="293" height="199" class="alignnone size-full wp-image-1762" /></p>
<p>Und das ist der <del datetime="2010-12-29T21:04:09+00:00">gegenwärtige</del> <ins datetime="2010-12-29T21:04:09+00:00">alte</ins> Code, den man <a href="https://github.com/toscho/Icon-to-link/blob/176b91b8c3812c11c0abe40b44a8926b6dde92cd/icon-to-link.php">im Archiv herunterladen</a> kann:</p>
<pre class="notranslate php">&lt;?php
<i>/*
Plugin Name: Icon to Link
Plugin URI: http://toscho.de/2010/wordpress-plugin-icon-to-link/
Description: Changes upload icons in the edit screen into text links.
Version: 0.3
Author: Thomas Scholz
Author URI: http://toscho.de
*/</i>

add_action( <code class="string">'admin_head'</code>, <code class="string">'itb_change'</code> );
function itb_change()
{   ?&gt;
&lt;script type=<code class="string">"text/javascript"</code>&gt;jQuery(document).ready(function($){
    $(<code class="string">'a#add_image'</code>).text( '&lt;?php _e(<code class="string">'Image'</code>); ?&gt;' );
    $(<code class="string">'a#add_video'</code>).text( '&lt;?php _e(<code class="string">'Video'</code>); ?&gt;' );
    $(<code class="string">'a#add_audio'</code>).text( '&lt;?php _e(<code class="string">'Audio'</code>); ?&gt;' );
    $(<code class="string">'a#add_media'</code>).text( '&lt;?php _ex(<code class="string">'File'</code>, <code class="string">'column name'</code> ); ?&gt;' );
});&lt;/script&gt;
    &lt;?php
}</pre>
<p>Auf zwei Details sei hingewiesen: Dazu braucht man kein jQuery. Aber da es ohnehin geladen wird, habe ich es um der Kürze gleich verwendet.<br />
<del datetime="2010-12-28T19:47:08+00:00">Und der Text <i lang="en">File</i> wird seltsamerweise nicht übersetzt, obwohl er genau so in der Sprachdatei steht. Das finde ich noch heraus …</del><br />
<i lang="en">File</i> wird nur ersetzt, wenn man den passenden Kontext angibt, hier <code>column name</code>.</p>
<h2>Update 29.12.</h2>
<p>Ich habe das Javascript jetzt in eine separate Datei ausgelagert, einen Filter für die Namen eingebaut und sichergestellt, daß der Code nur auf Seiten mit einem Editor und dort erst am Seitenende geladen wird.</p>
<h3>PHP-Code</h3>
<div class="php-code">
<pre class="notranslate php-code"><span class='openclose'>&lt;?php
</span><i class='comment'>/*
Plugin Name: Icon to Link
Plugin URI: <a href="http://toscho.de/2010/wordpress-plugin-icon-to-link/">http://toscho.de/2010/wordpress-plugin-icon-to-link/</a>
Description: Changes upload icons in the edit screen into text links.
Version: 0.4
Author: Thomas Scholz
Author URI: <a href="http://toscho.de">http://toscho.de</a>
*/</i>

add_action( <span class='string'>&#039;admin_init&#039;</span>, <span class='string'>&#039;itb_change&#039;</span> );
<span class='internal'>function</span> itb_change()
{
    <i class='comment'>// Load the script on editor pages only.
</i>    <span class='internal'>if</span> ( <span class='internal'>empty</span> ( <var>$GLOBALS</var>[<span class='string'>&#039;pagenow&#039;</span>] )
        <span class='internal'>or</span> <span class='operator'>!</span> ( <span class='string'>&#039;post.php&#039;</span> <span class='operator'>==</span> <var>$GLOBALS</var>[<span class='string'>&#039;pagenow&#039;</span>]
            <span class='internal'>or</span> <span class='string'>&#039;post-new.php&#039;</span> <span class='operator'>==</span> <var>$GLOBALS</var>[<span class='string'>&#039;pagenow&#039;</span>] )
    )
    {
        <span class='internal'>return</span>;
    }

    <var>$handle</var>  <span class='operator'>=</span> <span class='string'>&#039;icon-to-links&#039;</span>;

    wp_register_script( <var>$handle</var>, plugins_url( <span class='string'>&#039;itl.js&#039;</span>, <span class='constant'>__FILE__</span> ), <span class='string'>&#039;jquery&#039;</span>, <span class='string'>&#039;0.4&#039;</span>, <span class='internal'>TRUE</span> );
    wp_enqueue_script( <var>$handle</var> );

    <i class='comment'>// Localize
</i>    <var>$text</var> <span class='operator'>=</span> <span class='internal'>array</span> (
        <span class='string'>&#039;image&#039;</span> <span class='operator'>=&gt;</span> __( <span class='string'>&#039;Image&#039;</span> )
    ,   <span class='string'>&#039;video&#039;</span> <span class='operator'>=&gt;</span> __( <span class='string'>&#039;Video&#039;</span> )
    ,   <span class='string'>&#039;audio&#039;</span> <span class='operator'>=&gt;</span> __( <span class='string'>&#039;Audio&#039;</span> )
    ,   <span class='string'>&#039;file&#039;</span>  <span class='operator'>=&gt;</span> _x( <span class='string'>&#039;File&#039;</span>, <span class='string'>&#039;column name&#039;</span> )
    );
    <i class='comment'>// To change the names, add a filter for &#039;itl_names&#039;.
</i>    <var>$text</var> <span class='operator'>=</span> apply_filters( <span class='string'>&#039;itl_names&#039;</span>, <var>$text</var> );
    wp_localize_script( <var>$handle</var>, <span class='string'>&#039;i2l&#039;</span>, <var>$text</var> );

    <span class='internal'>return</span>;
}

<i class='comment'>/**
 * Sample filter:

add_filter( &#039;itl_names&#039;, &#039;change_itl_names&#039;, 10, 1 );
function change_itl_names( $names )
{
    $names[&#039;image&#039;] = &#039;Foto&#039;;
    return $names;
}

*/</i></pre>
</div>
<h3>Javascript (itl.js)</h3>
<pre class="notranslate">jQuery(document).ready(function(<var>$</var>){
    $(<code class="string">'a#add_image'</code>).text( <var>i2l.image</var> );
    $(<code class="string">'a#add_video'</code>).text( <var>i2l.video</var> );
    $(<code class="string">'a#add_audio'</code>).text( <var>i2l.audio</var> );
    $(<code class="string">'a#add_media'</code>).text( <var>i2l.file</var>  );
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/wordpress-plugin-icon-to-link/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Database Caching using disk: basic
Object Caching 604/740 objects using disk: basic

Served from: toscho.de @ 2012-05-21 16:06:28 -->
