<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>bueltge.de [by:ltge.de] &#187; Adventskalender</title>
	<atom:link href="http://bueltge.de/tag/adventskalender/feed/" rel="self" type="application/rss+xml" />
	<link>http://bueltge.de</link>
	<description>Frank Bültge schreibt auf bueltge.de zu den Themen Webentwicklung &#38; design, WordPress, Literatur und andere Themen bezüglich Internet und Development</description>
	<lastBuildDate>Tue, 22 May 2012 20:02:25 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordPress mehrsprachig nutzen - ein Lösungsvorschlag</title>
		<link>http://bueltge.de/wordpress-mehrsprachig-nutzen-ein-loesungsvorschlag/1339/</link>
		<comments>http://bueltge.de/wordpress-mehrsprachig-nutzen-ein-loesungsvorschlag/1339/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 07:33:02 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1339</guid>
		<description><![CDATA[WordPress muss ebenso im mehrsprachigen Umfeld genutzt werden, verschiedene Lösungen haben unterschiedliche Herangehensweisen. Ich habe eine Lösung via Multisite immer bekräftigt und hier einige Worte und eine Plugin Lösung als Unterstützung.]]></description>
			<content:encoded><![CDATA[<p>Ja, es gibt WordPress schon lange und fast ebenso lange möchte man den Inhalt in verschiedenen Sprachen ausgeben und dem Leser den Inhalt entsprechend aufbereiten. Das Thema kann schnell vielschichtig und komplex werden, denn nicht nur das Darstellen von Inhalt in Form von Text in unterschiedlichen Sprachen ist ein Thema; es geht ebenfalls um die Meta Daten zum Inhalt, um Bilder, die je nach Sprache verschieden sein können und es geht um die Nutzung der Admin-Oberfläche in der bevorzugten Sprache. Damit ist nur ein Teil angedeckt und je nach Anforderungen (<a href="http://wordpress.stackexchange.com/questions/1552/best-practices-for-localizing-wordpress-content">ein Bsp. bei StackExchange</a>) wird dies schnell ein eigenes Projekt und WordPress ist nur ein "kleines" Framework im Hintergrund. Es gibt schon jetzt eine <a href="http://codex.wordpress.org/Multilingual_WordPress">Reihe von Plugins</a>, die verschiedenen Ansätze fahren - von neuen Tabellen im System oder de Trennung von Content nach Sprache in einem Tabelleneintrag zum Post bis hin zu Ablage in den Metadaten des Artikels.</p>
<p>Alle diese Lösungen haben ihre Grenzen, sind unflexibel und man begibt sich in eine Abhängigkeit, die man nur schwer wieder los wird und mit jedem Update von WordPress bekommt man es mit der Angst oder Minimum einem recht großen Aufwand im Testen zu tun. Darum möchte ich eine Lösung vorstellen, die wir im Team <a title="Inpsyde GmbH" href="http://inpsyde.com">Inpsyde</a> vielfach bei Kunden einsetzen und die ihre Stärke in der Flexibilität hat, in der Erweiterbarkeit und in der Eigenschaft, den WordPress Standard zu nutzen und nicht zu verbiegen. Ein Abschalten ist jederzeit möglich; das System bleibt in seinem Zustand.<br />
<span id="more-1339"></span></p>
<p><a href="http://bueltge.de/wordpress-mehrsprachig"><iframe src="http://bueltge.de/wordpress-mehrsprachig//?full#Cover" width="650" height="406" title="via Cursortasten blättern"></p>
<p>Die Slides zum Thema sind eingebettet; dein Form des Lesens lässt dies nicht zu, daher schaue dir die Slides unter folgenden Link an: <a href="http://bueltge.de/wordpress-mehrsprachig/">Mehrsprachigkeit mit WordPress</a>.</p>
<p></iframe></a></p>
<h3>Warum mehrsprachig?</h3>
<ul>
<li>2/3 der Weltbevölkerung sprechen mehr als eine Sprache</li>
<li>Globale Aufstellung von Unternehmen</li>
<li>Streuung von Inhalten</li>
<li>Service am Kunden</li>
<li>Suchmaschinenoptimierung</li>
</ul>
<h3>Die Lösung</h3>
<p>WordPress Multisite liefert die Lösung am Standard.<br />
Damit wird die Verwaltung verschiedener Instanzen, mit Gemeinsamkeiten und Unterschieden, mit Hilfe einer Installation möglich. Der Austausch von Daten ist via Core-Funktionen möglich, welche mittels Plugins gebündelt und vereinfacht werden.</p>
<h3>Vorteile</h3>
<ul>
<li>WordPress Core Funktionen</li>
<li>Keine Abhängigkeiten von Plugins – überlebensfähig</li>
<li>Unabhängig von WordPress Entwicklung*</li>
<li>Themes, Plugins zentral steuern, dezentral nutzen</li>
<li>Geringer Wartungsaufwand</li>
<li>Trennung Sprachen in Backend/Frontend (Userabhänig)</li>
<li>Komplett gespiegelt oder in jeder Inhaltsform getrennt</li>
<li>Kulturelle Hintergründe getrennt umsetzbar</li>
<li>Subdomains oder Subdirectories</li>
<li>de.example.com, example.com/de</li>
<li>Getrennte Domains via Domainmapping</li>
<li>example.de, example.com</li>
<li>Freiheit der Entwicklung in Design und Nutzeranforderung</li>
<li>Optimierung nicht nur im sichtbaren Bereich, lang-Attribute, SEO</li>
</ul>
<p>Weitere Ausführungen zu Frage, Ansatz und Lösung findet ihr den <a href="http://bueltge.de/wordpress-mehrsprachig/" title="Slides: Mehrsprachigkeit mit WordPress Einfach &#038; flexibel, mit WordPress Standard">Slides</a> zum WordCamp 2011.</p>
<h3>Unterstützung via Plugin</h3>
<p>Mit all diesen Anforderungen und Vorteilen nutzen wir eine Basis, die als Plugin im offiziellen Repository von WordPress zur Verfügung steht <a href="http://wordpress.org/extend/plugins/multilingual-press/">Multilingual Press</a>. Das Plugin liefert einige Werkzeuge um Multisite komfortabel für den Einsatz in der Mehrsprachigkeit umzusetzen.</p>
<p><a href="http://bueltge.de/wp-content/images/screenshot-2.png"><img src="http://bueltge.de/wp-content/images/screenshot-2-450x280.png" alt="Settings pro Blog" title="screenshot-2" width="450" height="280" class="aligncenter size-medium wp-image-1342" /></a></p>
<p>Dieses Plugin erleichtert die Zuordnung der unterschiedlichen Blogs im Netzwerk zu einer Sprache und der Verknüpfung zu anderen Blogs, so dass beim Publizieren in Blog A der Inhalt in anderen Blogs als Draft abgelegt wird. So stehen die Artikel in Relation, das System kennt ihre Zugehörigkeit und mit Hilfe einiger Funktionen kann dies im Frontend und Backend genutzt werden.<br />
Das Plugin liefert die Möglichkeit, dass am Artikel und Seite eine Meta Box mit dem Inhalt der verlinkten Daten zu sehen ist; im einfachsten Fall als Übersetzungshilfe. Ebenso gibt es ein Widget, welches im Frontend die Umschaltung erleichtert. Je Blog können einige Einstellungen vorgenommen werden, so dass eine Sprache, Flagge zugeordnet ist.</p>
<h3>Ausblick</h3>
<p>Wir haben eine weitere Version in Arbeit, die zusätzliche Hilfe mitbringt; z.B. ein Dashboardwidget mit der Übersicht alles Artikel und Verknüpfungen, einer Erweiterungen der Mediathek um globale Inhalte über alle Blogs und eigenständige Inhalte pro Blog zu trennen, in den Rechten und der Bedienung. Ebenso gibt es Helfer für das Updaten von bestehenden Installationen. Im weiteren besteht die Möglichkeit die Sprachpakete direkt im Backend zu laden, ohne via FTP/SSH auf den Server zu greifen und die Sprachen zuzuordnen. Unterstützen können wir auch, wenn ein Blog neu im Netzwerk angelegt wird, in dem bestehende Blogs als Vorlage dienen und Optionen u.a. kopiert werden. Dies aber nur ein kleiner Ausblick.</p>
<h3>Fazit</h3>
<p>WordPress Multisite liefert die Basis und mit einigen Anpassungen ensteht eine saubere, kontrollierte Lösung für die Nutzung von WordPress im mehrsprachigen Umfeld. Nun liegt es an euch - Multisite nutzen, Plugin testen und Rückmeldungen sehen wir gern am <a href="https://github.com/inpsyde/multilingual-press">Repo auf Github</a>.</h3>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-mehrsprachig-nutzen-ein-loesungsvorschlag/1339/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-mehrsprachig-nutzen-ein-loesungsvorschlag/1339/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/screenshot-2-200x200.png" />
		<media:content url="http://bueltge.de/wp-content/images/screenshot-2.png" medium="image">
			<media:title type="html">screenshot-2</media:title>
			<media:thumbnail url="http://bueltge.de/wp-content/images/screenshot-2-200x200.png" />
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Optionen aus WordPress an JavaScripts übergeben #1</title>
		<link>http://bueltge.de/optionen-aus-wordpress-an-javascripts-uebergeben/1329/</link>
		<comments>http://bueltge.de/optionen-aus-wordpress-an-javascripts-uebergeben/1329/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 09:19:50 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1329</guid>
		<description><![CDATA[Von PHP auf Werte in der DB zugreifen und an JavaScript übergeben, das JSON Objekt ist eine Möglichkeit dies zu tun und dieses Beispiel soll es verdeutlichen.]]></description>
			<content:encoded><![CDATA[<p>Auch in WordPress bleibt man nicht konstant in der PHP-Welt und so müssen Einstellungen, Daten aus der Datenbank an Scripte übergeben werden. In vielen Plugins findet man Lösungen in dem die <code>wp-load.php</code> geladen wird und damit der Zugriff auf alle Funktionen von WordPress. Vor geraumer Zeit hat <a href="http://ottopress.com/2010/dont-include-wp-load-please/">Otto (Samuel Wood)</a> auf diesen Umstand schon aufmerksam gemacht und der Artikel zeigt Lösungsansätze. Noch immer kommen dazu Fragen auf und noch immer erscheinen Plugins, die die wp-load.php genau auf Grund solcher Probleme laden.</p>
<p>Eine ähnliche Problematik stellt sich, wenn man den Source der Scripte nicht einfach in den Footer-Bereich von WordPress schreibt, sondern sauber in eine Datei auslagert und via <code>wp_enqueue_script()</code> inkludiert. Nur so kann WordPress diese Scripte mit verwalten, packen und optimiert ausliefern. Daher möchte ich in zwie Beispielen aufzeigen, wie man Daten von PHP an JS übergibt.<br />
<span id="more-1329"></span><br />
Die ersten Schnipsel nutzen die Übergabe von Werten via JSON; wobei ich die Werte aus der Datenbank mit den gängigen Mitteln in PHP hole und das Script direkt im head der Seite die Werte als Objekt ablegt.</p>
<pre><code>
add_action( 'admin_enqueue_scripts', 'fb_print_scripts' );

function fb_print_scripts() {
	global $current_screen;
	
	if ( isset( $current_screen -&gt; id ) &amp;&amp; ! in_array( $current_screen -&gt; id, array( 'post', 'page' ) ) )
		return;
	
	if ( is_plugin_active_for_network( plugin_basename( __FILE__ ) ) )
		$options = get_site_option( 'my_options_id' );
	else
		$options = get_option( 'my_options_id' );
	
	if ( ! $options )
		return;
	?&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		var my_json_object = &lt;?php echo htmlspecialchars( json_encode( $options ) ); ?&gt;;
	&lt;/script&gt;
	&lt;?php
}
</code></pre>
<p>Die obige Funktion gibt nun die Werte aus der Datenbank als JSON-Objekt in den head im Backend, da im ersten Schritt der Funktion die Seite abgefragt wird. Mittes <code>$current_screen</code> wird geprüft, so dass nur ausgeliefert wird, wenn man auf der definierten Seiten (post, page) ist.</p>
<p>Der folgende Schritt ist üblich und best practice in WordPress um Scripte einzubringen. Dabei inkludiere ich das JS-File, welches dann auf das JSON-Objekt zugreift.</p>
<pre><code>
add_action( 'admin_enqueue_scripts', 'fb_admin_enqueue_scripts' );

function fb_admin_enqueue_scripts( $where ) {
	
	if ( ! in_array( $where, array( 'post.php', 'post-new.php', ) )
		return;
	
	$suffix = defined('SCRIPT_DEBUG') &amp;&amp; SCRIPT_DEBUG ? '.dev' : '';
	
	wp_enqueue_script(
		self :: get_textdomain() . '_script', 
		plugins_url( '/js/my_script' . $suffix. '.js', __FILE__ ), 	
		array( 'jquery', 'my_other_script' ),
		'',
		TRUE
	);
	
}
</code></pre>
<p>Im Script wird dann direkt auf das Objekt zugegriffen, welches verarbeitet wird.</p>
<pre><code class="javascript">
jQuery( document ).ready( function( $ ) {
	
	if ( typeof my_json_object == 'undefined' )
		return;

// debug in console of Browser
console.dir( my_json_object ); 

});
</code></pre>
<p>Eine weitere Lösung soll im Folgebeitrag der diesjährigen Serie vorgestellt werden; der Link folgt. - hier nun <a href="http://bueltge.de/daten-aus-wordpress-an-javascript-uebergeben-2/1334/">der Link</a>, nach dem der <a href="http://bueltge.de/daten-aus-wordpress-an-javascript-uebergeben-2/1334/" title="Daten aus WordPress an JavaScript übergeben #2">Artikel</a> online ist.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/optionen-aus-wordpress-an-javascripts-uebergeben/1329/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/optionen-aus-wordpress-an-javascripts-uebergeben/1329/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress, WPCron und die richtige Zeit</title>
		<link>http://bueltge.de/wordpress-wpcron-und-die-richtige-zeit/1333/</link>
		<comments>http://bueltge.de/wordpress-wpcron-und-die-richtige-zeit/1333/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 08:38:59 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1333</guid>
		<description><![CDATA[Probleme mit dem WordPress Cron und der richtigen Zeit muss man wissen, dann lassen sie sich einfach umgehen.]]></description>
			<content:encoded><![CDATA[<p>WordPress bietet eine Pseudo-Cronjob-Funktionalität, welche es dem Entwickler erlaubt zeitgesteuerte Events auszuführen. Zum Beispiel funktioniert die komplette Update-Notification darüber. In diesen sogenannten <em>Scheduled Events</em> kann man auch selbst eigene Jobs definieren. Dabei sollte man aber auf eine wichtige Sache achten: Die Zeit.<br />
<span id="more-1333"></span><br />
Die <code>wp-cron.php</code> arbeit etwas abseits vom Core und lädt nur die wichtigsten Sachen und lässt sämtliche Einstellungen von WordPress offen. Die in <em>Settings -> General</em> eingestellte Timezone wird dabei nicht berücksichtigt. <code>wp-cron.php</code> läuft also definitiv und unveränderlich auf UTC.</p>
<p>Das heisst also folgendes: Sind wir in der Zeitzone Berlin ist die lokale Zeit UTC+1. Tragen wir ein Scheduled Event ein, hängt er immer eine Stunde nach. Um das zu ändern hilft folgende Funktion:</p>
<pre><code>
function get_offset_to_gmt_in_seconds() {

	$current_timezone_offset = get_option( 'gmt_offset' );
	$offset = $current_timezone_offset * 3600;

	return $offset;
}
</code></pre>
<div class="contentdiv">
<h4>Gastbeitrag</h4>
<p><img src="http://wpengineer.com/wp-content/uploads/dasllama-150x150.png" alt="Thomas Herzog Avatar" title="twitter_bigger" width="73" height="73" class="alignleft size-full wp-image-2132" /><br />
Dieser Beitrag ist aus der Feder von Thomas Herzog - <a href="http://hughwillfayle.de/">hughwillfayle.de</a> und ist ein Beitrag zum Adventskalender auf <a href="http://wpengineer.com/">wpengineer.com</a> zum Thema WordPress.<br />
Thomas Herzog ist Webentwickler im Team der <a href="http://inpsyde.com/">WordPress Agentur - Inpsyde GmbH</a>.</p>
<p>Vielen Dank auch hier nochmal von meiner Seite an <a href="http://profiles.wordpress.org/users/hughwillfayle/">Thomas</a>.
</div>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-wpcron-und-die-richtige-zeit/1333/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-wpcron-und-die-richtige-zeit/1333/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/dasllama-150x150.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/dasllama-150x150.png" medium="image">
			<media:title type="html">twitter_bigger</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>XML zu Array mit PHP</title>
		<link>http://bueltge.de/xml-zu-array-mit-php/1330/</link>
		<comments>http://bueltge.de/xml-zu-array-mit-php/1330/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 07:44:50 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1330</guid>
		<description><![CDATA[Das Auslesen von XML ist mit PHP 5 extrem vereinfacht worden, hier eine Lösung um nach dem Auslesen einfach ein Array in PHP zur Verfügung zu haben.]]></description>
			<content:encoded><![CDATA[<p>Im Bezug auf das Importieren von Daten wird nicht selten auf XML gesetzt und im Anschluss muss ein Array an WordPress übergeben werden, welches in die Datenbank übergibt. Im Umfeld von Optionen in WordPress ist das gern genutzt.<br />
Um nach dem Parsen von XML ein Array in PHP zu bekommen, findet man immer wieder diverse Threads und Fragen. Im folgenden daher ein einfache und schnelle Lösung, die seit PHP 5 wunderbar funktioniert.<br />
<span id="more-1330"></span></p>
<pre><code class="php">
// only for errors an parse
$filename = preg_replace( 
    &quot;/\&lt;\!\[CDATA\[(.*?)\]\]\&gt;/ies&quot;,
    &quot;'[CDATA]' . base64_encode('$1') . '[/CDATA]'&quot;,
    $filename
);
// load cml file
$xml      = simplexml_load_string( $filename );
$json     = json_encode( $xml );
$options  = json_decode( $json,TRUE );
// see result
var_dump( $options );

// update in WordPress
update_option( 'my_settings_id', $options );
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/xml-zu-array-mit-php/1330/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/xml-zu-array-mit-php/1330/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Einstellungen setzen bei WordPress Multisite</title>
		<link>http://bueltge.de/einstellungen-setzen-bei-wordpress-multisite/1331/</link>
		<comments>http://bueltge.de/einstellungen-setzen-bei-wordpress-multisite/1331/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 07:44:50 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1331</guid>
		<description><![CDATA[WordPress Plugin-Optionen sind wichtig, das Setzen unter Multisite  und der Single-Installation hat einige Besonderheiten die man wissen muss und schon ist ein Plugin schnell für beiden Formen vorbereitet.]]></description>
			<content:encoded><![CDATA[<p>Die Nutzung von WordPress für diverse Blogs im Netzwerk ist sinnvoll, kann diverse Schritte vereinfachen und wird immer beliebter. Sei es um klassische Scenarios des Bloghosting durchzuführen oder mehrsprachige Landschaften zu erstellen bis hin zu anders getrimmten Ideen. Daher ist es auch für Pluginentwickler wichtig, die Funktionen zu nutzen und eigene Plugins dafür zu erweitern oder speziell zu entwicklen.</p>
<p>Vielen ist gleich, aber nicht alles und in diesem kleinen Beitrag möchte ich kurz darstellen, wie man beim Aktivieren eines Plugins gesetzte Einstellungen in der Datenbank absetzt. <span id="more-1331"></span>Der optimale Fall dafür ist eine Funktion von WordPress, die beim Aktivieren eines Plugins getriggert wird <code>register_activation_hook()</code>. Diese Funktion wird üblicher weise beim init oder im Construktor des Plugins aufgerufen. In der damit aufgerufenen Funktion stecken die Funktionen um die Voreinstellungen in WordPress in der Tabelle options abzulegen - <code>add_option()</code>. In Multisite gibt es auch dafür eine Funktion - <code>add_site_option()</code>.</p>
<p>Nun gilt es nur noch zu trennen, ob das Plugin innerhalb des Network, in der Verwaltung der Multisite-Installation aktiviert wird, oder ob es lediglich in einer der Blogs des Netzwerkes oder einer Single-installation genutzt wird. Dafür gibt es aktuell keine Funktion, aber einen Wert, der übergeben wird. Das nachfolgenden Beispiel verdeutlicht es sicher.</p>
<pre><code>
register_activation_hook( __FILE__, 'fb_add_config' );
function fb_add_config() {

	$data = array( 
		'active' =&gt; 0, 
		'radio'  =&gt; 0,
		'link'   =&gt; 1, 
		'theme'  =&gt; 1, 
		'role'   =&gt; 'administrator', 
		'unit'   =&gt; 1, 
	);
	// if is active in network of multisite
	if ( is_multisite() &amp;&amp; isset($_GET['networkwide']) &amp;&amp; 1 == $_GET['networkwide'] ) {
		add_site_option( 'my_settings_id', $data );
	} else {
		add_option( 'my_settings_id', $data );
	}
}
</code></pre>
<p>Die Abfrage des Wertes in der globalen <code>GET</code> ist sicher schlüssig und die Abbildung dieser Abfrage kann sauber in die bereits vor geraumer Zeit <a href="http://wpengineer.com/2221/wordpress-multisite-plugins-and-activation/">angesprochene Lösung für Multisite</a> und Settings von Thomas integriert werden.<br />
Um weitere Abfragen im Umfeld Multisite zu lösen und die Einstellungen wieder zu entfernen, oder Menus im Network-Admin-Bereuch zu integrieren, ist die Funktion <code>is_plugin_active_for_network()</code> nützlich.</p>
<p>So lassen sich beispielsweise die Optionen wieder kontrolliert in Abhängigkeit der Installationsform von WordPress holen.</p>
<pre><code class="php">
if ( is_multisite() &amp;&amp; is_plugin_active_for_network( plugin_basename( __FILE__ ) ) )
	$values = get_site_option( 'my_settings_id' );
else
	$values = get_option( 'my_settings_id' );
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/einstellungen-setzen-bei-wordpress-multisite/1331/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/einstellungen-setzen-bei-wordpress-multisite/1331/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Scripte von WordPress debuggen</title>
		<link>http://bueltge.de/scripte-von-wordpress-debuggen/1301/</link>
		<comments>http://bueltge.de/scripte-von-wordpress-debuggen/1301/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 08:18:41 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1301</guid>
		<description><![CDATA[Die Ausgabe der verwalteten Scripte und Stylesheets kann mit der kleinen Funktion recht schnell gesichtet werden, eine kleine Lösung um Debuggen zu vereinfachen.]]></description>
			<content:encoded><![CDATA[<p>WordPress kann sich komfortabel um das verwalten von Scripten und Stylesheets kümmern, Vorraussetzung ist die Nutzung der Möglichkeiten rund um <code>wp_enqueue_script()</code> und <code>wp_enqueue_style()</code>. Will man sich um die darin übergeben Dateien kümmern, so kann eine kleine Funktion helfen und die integrierten Scripte und Styles zurück geben.<br />
<span id="more-1301"></span></p>
<h4>Einige Hintergründe</h4>
<p>Scripte und Stylesheets kann man in WordPress auf verschieden Art in die Ausgabe einbringen, das gilt für Backend und Frontend. Dabei ist das klassiche Verfahren eines meta-Elementes im head oder footer-Bereich nicht zu empfehlen, denn WordPress kann seit Version 2.1 die Verwaltung der Scripte und Stylesheets übernehmen - Vorraussetzung ist die Nutzung der Möglichkeiten rund um <code>wp_enqueue_script()</code> und <code>wp_enqueue_style()</code>. Damit werden diverse Vorteile direkt duch den WordPress-Kern übernommen; komprimieren und gemeinsames Ausliefern in jeweils einer Datei alle Scripte und Stylesheets. Ebenso kümmert sich WordPress darum, dass jedes Script nur einmal in der Auslieferung vorhanden ist; also nicht ein bekanntes Problem wie die mehrfache Verwendung von jQuery zulassen.<br />
Aktuell gibt es dazu immer wieder ähnliche Ansätze mit diversen JS-Lösungen. WordPress kann sich darum kümmern und optimiert ausliefern, jedes Script nur einmal und einfach via ID auf die Scripte zugreifen. </p>
<p>Um nun aber die includierten Scripte und Stylesheets sauber auszuwerten, bedarf es einiger Zugriffe oder die kleine folgende Lösung und schon sind alle eingebundenen Dateien in einer Liste. Die folgenden Funktion kippt die Adressen  einfach in den Footer von WordPress, Frontend - <code>wp_footer</code> und Backend - <code>admin_footer</code>, dies kann via Hook natürlich angepasst werden; dies soll nur eine Idee sein und einen Ansatz liefern.<br />
Parallel habe ich es im Plugin <a href="http://wordpress.org/extend/plugins/debug-objects/">Debug Objects</a> integriert und die neue Version sollte in den weihnachtlichen Tagen online gehen.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/wp-scripts-styles.png" alt="Beispiel für Script und Stylesheet Listings" width="450" height="598" /></p>
<pre><code>
// view on frontend footer
add_action( 'wp_footer', 'fb_urls_of_enqueued_stuff' );
// view on backend footer
add_action( 'admin_footer', 'fb_urls_of_enqueued_stuff' );
// get engueued scripts and style urls
function fb_urls_of_enqueued_stuff( $handles = array() ) {
	global $wp_scripts, $wp_styles;
	
	// scripts
	foreach ( $wp_scripts -&gt; registered as $registered )
		$script_urls[ $registered -&gt; handle ] = $registered -&gt; src;
	// styles
	foreach ( $wp_styles -&gt; registered as $registered )
		$style_urls[ $registered -&gt; handle ] = $registered -&gt; src;
	
	if ( empty( $handles ) ) {
		$handles = array_merge( $wp_scripts -&gt; queue, $wp_styles -&gt; queue );
		array_values( $handles );
	}
	$output = '';
	foreach ( $handles as $handle ) {
		if ( ! empty( $script_urls[ $handle ] ) )
			$output .= $script_urls[ $handle ] . '&lt;br&gt;';
		if ( ! empty( $style_urls[ $handle ] ) )
			$output .= $style_urls[ $handle ] . '&lt;br&gt;';
	}
	
	echo $output;
}
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/scripte-von-wordpress-debuggen/1301/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/scripte-von-wordpress-debuggen/1301/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/wp-scripts-styles.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/wp-scripts-styles.png" medium="image">
			<media:title type="html">Beispiel für Script und Stylesheet Listings</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>unserialize() Error at offset... Einige Ansätze</title>
		<link>http://bueltge.de/unserialize-error-at-offset-einige-ansaetze/1332/</link>
		<comments>http://bueltge.de/unserialize-error-at-offset-einige-ansaetze/1332/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 01:16:10 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1332</guid>
		<description><![CDATA[Nicht immer ist das Problem offensichtlich und dazu gehört eine Fehlerausgabe im Bezug auf die Funktion unserialize(). In diesem Umfeld kommt es auf Grund unsauberer Daten im übergebenen Wert ab und an zu Problemen. Schaut man sich im Netz dazu um, findet man unzählige Hilfesuche und wenige Antworten, da meist das Problem in Quelle liegt, [...]]]></description>
			<content:encoded><![CDATA[<p>Nicht immer ist das Problem offensichtlich und dazu gehört eine Fehlerausgabe im Bezug auf die Funktion <code>unserialize()</code>. In diesem Umfeld kommt es auf Grund unsauberer Daten im übergebenen Wert ab und an zu Problemen. Schaut man sich im Netz dazu um, findet man unzählige Hilfesuche und wenige Antworten, da meist das Problem in Quelle liegt, im Wert der übergeben wird. Aber nicht immer hat man darauf Einfluss, insbesondere bei Debugginghelfern kommen da unterschiedliche Inhalte.</p>
<p>Um einigen Hilfesuchenden zu helfen, hier einige Lösungsvorschläge, die man abarbeiten kann. Einige sind nur im Zusammenhang mit WordPress zu nutzen, da die Funktion aus dem Core kommt. Ähnliche Sachen gibt es natürlich auch ohne WP.<br />
<span id="more-1332"></span><br />
Die Erste Lösung ist direkt in den Kommentaren von <a href="http://www.php.net/manual/de/function.unserialize.php#71270">PHP.net</a> zur Funktion hinterlegt. </p>
<pre><code class="php">
$object = preg_replace( '!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $object );
</code></pre>
<p>Ähnlich geht der folgende Ansatz:</p>
<pre><code class="php">
$object = preg_replace( '/;n;/', ';N;', $object );
</code></pre>
<p>Alternativ schwören <a href="http://ryanbosinger.com/blog/2009/php-unserialize-error-at-offset-simple-solution/">andere</a> auf die Verwendung von <code>trim()</code></p>
<pre><code class="php">
$object = trim( $object );
</code></pre>
<p>Aber auch mit diesen Lösungen kommt man nicht immer ans Ziel und die Abfrage, ob es sich um serialisierte Daten handelt muss her. Normalerweise kümmert sich <code>unserialize()</code> darum, aber wie gesagt; nicht immer hilft dies. WordPress stellt eigene Funktionen dafür zur Verfügung.</p>
<ul>
<li><code>is_serialized( $data )</code></li>
<li><code>is_serialized_string( $data )</code></li>
</ul>
<p>Mit diesen beiden Funktion kann sauber abgefragt werden.<br />
Aber auch da kann man mit einem einfachen Snippet ran; eventuell nicht der Weisheit letzter Schluss, daher lieber die Funktionen nutzen oder außerhalb von WP eine eigene Funktion, siehe <a href="https://gist.github.com/1415653" title="gist.github.com/1415653">Gist 1415653</a>.</p>
<pre><code class="php">
$is_serialized = preg_match( "/^(O:|a:)/", $object );
</code></pre>
<p>Vielleicht hilft es dem einen oder anderen, ansonsten nutze ich es als Gedächtnisstütze.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/unserialize-error-at-offset-einige-ansaetze/1332/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/unserialize-error-at-offset-einige-ansaetze/1332/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Plugins automatisch aktivieren</title>
		<link>http://bueltge.de/wordpress-plugins-automatisch-aktivieren/1258/</link>
		<comments>http://bueltge.de/wordpress-plugins-automatisch-aktivieren/1258/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 09:18:24 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1258</guid>
		<description><![CDATA[WordPress Plugins über eine eigene Funktion aktivieren kann nützlich sein, ein kleiner Ansatz sorgt für eine Grundlösung.]]></description>
			<content:encoded><![CDATA[<p>WordPress speichert die aktiven Plugins in der Datenbank, Tabelle <code>options</code>, Feld <code>activate_plugins</code>; damit ist es ein leichtes diesen Wert zu verändern und so kann man sauber diverse Plugins von WordPress aktivieren lassen; sei es als Plugin-Lösung nach dem Einrichten einer neuen Installation oder weil eigene Plugins einge andere Plugins brauchen.<br />
<span id="more-1258"></span><br />
Im folgenden eine kleine Beispiel-Lösung, die die Ansätze liefert. Dabei ist wichtig, dass nicht die Plugin-Namen genutzt werden, sondern der String der Datei; der auch in diversen Hooks benötigt wird. Im Anschluss eine einfache Lösung um an diesen String im Backend zu kommen, nicht in die Funktion integriert und rein eine schnelle Hilfe; aber mehr soll der Beitrag auch nicht sein - Copy &#038; Paste ja, aber bedacht.</p>
<pre><code>
// only example; control about register_activation_hook() 
add_action( 'admin_init', 'fb_activate_plugins' );
function fb_activate_plugins() {
	
	if ( ! current_user_can('activate_plugins') )
		wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
	$plugins = FALSE;
	$plugins = get_option('active_plugins'); // get active plugins
	
	if ( $plugins ) {
		// plugins to active
		$pugins_to_active = array(
			'hello.php', // Hello Dolly
			'adminimize/adminimize.php', // Adminimize
			'akismet/akismet.php' // Akismet
		);
		
		foreach ( $pugins_to_active as $plugin ) {
			if ( ! in_array( $plugin, $plugins ) ) {
				array_push( $plugins, $plugin );
				update_option( 'active_plugins', $plugins );
			}
		}
		
	} // end if $plugins

}
</code></pre>
<p>Die nachstehende Funktion und dessen Hook sorgen für eine direkte Ausgabe auf der Plugin-Seite im Backend des Strings zur Plugin-Datei, also bitte nur zum schnellen Finden nutzen.</p>
<pre><code>
add_filter( 'plugin_row_meta', 'fb_get_plugin_string' , 10, 4 );
function fb_get_plugin_string( $plugin_meta, $plugin_file, $plugin_data, $status ) {
	// echo plugin file string
	echo '&lt;code&gt;' . $plugin_file . '&lt;/code&gt;&lt;br&gt;';
	return $plugin_meta;
}
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-plugins-automatisch-aktivieren/1258/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-plugins-automatisch-aktivieren/1258/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Kleine Erweiterung an der WordPress Mediathek</title>
		<link>http://bueltge.de/kleine-erweiterung-an-der-wordpress-mediathek/1241/</link>
		<comments>http://bueltge.de/kleine-erweiterung-an-der-wordpress-mediathek/1241/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 00:59:37 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1241</guid>
		<description><![CDATA[Eine kleine Veränderung innerhalb der Mediathek und Bilder lassen sich einfach wieder verwenden.]]></description>
			<content:encoded><![CDATA[<p>Kleine Veränderungen können manchmal viel bewirken. Wer die Mediathek viel nutzt und von dort Bilder in den Beiträgen verwendet, dem wird der folgenden kleine Link in der Mediathek sicher helfen. Damit können Bilder einfach wiederverwendet werden. Es wird damit das Bild mit dem Post verknüpft, so dass man über Funktionen direkt an das verknüpfte Bild gelangt. Hinweise dazu gibt es beispielsweise in <a href="http://bueltge.de/wordpress-attachment-metadaten-nutzen/625/">diesem Beitrag</a>.<br />
<span id="more-1241"></span><br />
Eine weitere Lösung ist das Plugin <a href="http://wordpress.org/extend/plugins/post2media/">Post2Media</a>, welches einen Link innerhalb der Thickbox zu den Attachments bereit stellt und die komplette Datenbank-Verknüpfung herstellt, also die 1xn-Beziehung, die WordPress so nicht zulässt (Klassisches Manko in einem CMS, wenn es das sein will).<br />
Der folgende Code sollte in ein Plugin abgelegt werden; alternativ greift auch die <code>functions.php</code> des Themes.</p>
<p><a href="http://wpengineer.com/wp-content/uploads/medialibrary21.png"><img src="http://wpengineer.com/wp-content/uploads/medialibrary21-300x117.png" alt="medialibrary" width="300" height="117" class="centered" /></a></p>
<pre><code>
function upload_columns($columns) {
	unset($columns['parent']);
	$columns['better_parent'] = __( 'Parent' );
	return $columns;
}

function media_custom_columns($column_name, $id) {
	$post = get_post($id);
	
	if ( $column_name != 'better_parent' )
		return;
	
	if ( $post-&gt;post_parent &gt; 0 ) {
		if ( get_post($post-&gt;post_parent) )
			$title = _draft_or_post_title($post-&gt;post_parent);
		?&gt;
		&lt;strong&gt;
			&lt;a href=&quot;&lt;?php echo get_edit_post_link( $post-&gt;post_parent ); ?&gt;&quot;&gt;&lt;?php echo $title ?&gt;&lt;/a&gt;
		&lt;/strong&gt;, &lt;?php echo get_the_time( get_option('date_format') ); ?&gt;
		&lt;br /&gt;
		&lt;a class=&quot;hide-if-no-js&quot; onclick=&quot;findPosts.open('media[]','&lt;?php echo $post-&gt;ID ?&gt;');return false;&quot; href=&quot;#the-list&quot;&gt;&lt;?php _e( 'Re-', 'textdomain' ); _e('Attach'); ?&gt;&lt;/a&gt;
		&lt;?php
	} else {
		_e( '(Unattached)' ); ?&gt;
		&lt;br /&gt;
		&lt;a class=&quot;hide-if-no-js&quot; onclick=&quot;findPosts.open('media[]','&lt;?php echo $post-&gt;ID ?&gt;');return false;&quot; href=&quot;#the-list&quot;&gt;&lt;?php _e('Attach'); ?&gt;&lt;/a&gt;
	&lt;?php
	}
}
add_filter( 'manage_upload_columns', 'upload_columns' );
add_action( 'manage_media_custom_column' , 'media_custom_columns', 0, 2 );
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/kleine-erweiterung-an-der-wordpress-mediathek/1241/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kleine-erweiterung-an-der-wordpress-mediathek/1241/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/medialibrary21-300x117.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/medialibrary21-300x117.png" medium="image">
			<media:title type="html">medialibrary</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Kategorie- und Archiv-Dropdowns mit unobtrusive JavaScript</title>
		<link>http://bueltge.de/kategorie-und-archiv-dropdowns-mit-unobtrusive-javascript/1238/</link>
		<comments>http://bueltge.de/kategorie-und-archiv-dropdowns-mit-unobtrusive-javascript/1238/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 05:09:41 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS, xHTML, JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1238</guid>
		<description><![CDATA[Eine gute Website funktioniert, wenn ein Benutzer mit deaktiviertem JavaScript vorbeikommt, genau so gut wie mit aktiviertem Scripting. Eine Navigation der Kategorien und des Archivs mit WordPress ist mit Standards von WordPress möglich, allerdings nur mit aktiviertem JavaScript. Eine Alternative stellt dieses Tutorial von Peter Kröner bereit.]]></description>
			<content:encoded><![CDATA[<p>Eine gute Website funktioniert, wenn ein Benutzer mit deaktiviertem JavaScript vorbeikommt, genau so gut wie mit aktiviertem Scripting. Man trennt die JS-Schicht der Website sauber von allem anderen (und verzeichtet zum Beispiel auf onclick-Handler im HTML) und legt seine Scripts so an, dass nur die schon vorhandene Funktionalität der Seite verbessern und umformen. So kommen die Besucher sowohl mit als auch ohne JS an ihr Ziel, wenn der Weg ohne Scripting vielleicht etwas mühsamer oder weniger schön ausfällt. Diese Herangehensweise an Scripting auf Websites nennt sich Unobtrusive JavaScript und warum das eine Gute Sache ist, <a href="http://jsconf.blip.tv/file/4002810/">erklärt Jenn Lukas in diesem Talk von der JSConf 2010</a>. Neben all den guten Gründen ist das wichtigste Argument für unobtrusive JavaScript, dass es bei entsprechender Planung so einfach umzusetzen ist, dass es grundlos verschenktes Potenzial wäre wenn man darauf verzichten würde. Problematisch kann es allein dann werden, wenn das einem das für die Website verwendete CMS einem einen Strich durch die Rechnung macht – womit wir beim Thema WordPress wären.</p>
<p>Gelegentlich möchte man in seiner Blog-Sidebar Dropdowns-Menüs (select-Elemente) zur Navigation der Kategorien und des Archivs unterbringen und der WordPress-Codex bietet in den Dokumentationen auch entsprechende Lösungen für <a href="http://codex.wordpress.org/Function_Reference/get_categories#Dropdown_Box">Kategorien</a> und <a href="http://codex.wordpress.org/Function_Reference/wp_get_archives#Dropdown_Box">Archiv</a> an, die allerdings beide nur mit aktiviertem JavaScript funktionieren. In beiden Fällen wird die URL der Ziel-Seite im <code>value</code>-Wert der im Dropdown-Menü verbauten <code>option</code>-Elemente gespeichert und sobald man einen Eintrag auswählt, wird man via JavaScript auf eben jene URL weitergeleitet. Die fast gleiche Funktionalität ließe sich aber auch ganz ohne Scripts erreichen:<br />
<span id="more-1238"></span></p>
<ol>
<li>Ein altmodisches GET-Formular mit Absendebutton anlegen, das an die Basisadresse der Website sendet</li>
<li>Das <code>select</code> in eben dieses Formular stecken und <code>name="cat"</code> angeben</li>
<li>Den <code>option</code>-Elementen als <code>value</code> den Slug der Kategorien geben</li>
</ol>
<p>Das Absenden des Formulars resultiert dann in einem Aufruf von <code>blog.de/?cat=kategorie</code> und damit der gewünschten Kategorie, ggf. mit einem Redirect auf die suchmaschinenfreundliche Variante der URL. Das funktioniert für den Besucher genau so gute wie die Lösung aus dem Codex, sieht man einmal davon ab, dass man einen Button anklicken muss. Doch genau hier kann man mit JavaScript eingreifen, den Button verstecken und das Absenden des Formulars über einen via Script eingefügten <code>onclick</code>-Handler übernehmen. Das Endresultat sieht dann für Surfer mit Script wie die Codex-Lösung aus und alle anderen kommen dann eben über einen Klick auf den Button an ihr Ziel und alle sind zufrieden. Also an die Arbeit!</p>
<p>Die Grundlage für das Kategorie-Dropdown bildet ein ganz normales HTML-Formular:</p>
<pre><code class="php">
&lt;form id=&quot;kategorienform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;&quot; method=&quot;get&quot;&gt;
    &lt;label for=&quot;kategorienselect&quot;&gt;Zu Kategorie springen&lt;/label&gt;
    &lt;select id=&quot;kategorienselect&quot; name=&quot;cat&quot;&gt;
        &lt;option value=&quot;&quot;&gt;-- Bitte auswählen&lt;/option&gt;
        &lt;?php
            $categories = get_categories('hierarchical=0');
            foreach($categories as $category){
                $selected = (is_category($category-&gt;cat_ID)) ? 'selected' : '';
                echo '&lt;option '.$selected.' value=&quot;'.$category-&gt;cat_ID.'&quot;&gt;'.$category-&gt;cat_name.' ('.$category-&gt;count.')&lt;/option&gt;';
            }
        ?&gt;
    &lt;/select&gt;
    &lt;input id=&quot;kategorienbutton&quot; value=&quot;Kategorie abrufen&quot; type=&quot;submit&quot;&gt;
&lt;/form&gt;
</code></pre>
<p>Dieses könnte man so in die Seitenleiste des Dokuments werfen und es würde funktionieren, doch wir wollen ja noch den Absenden-Button loswerden und die Umleitung direkt bei der Auswahl einer Kategorie starten. Hierzu braucht es nicht mehr als 6 Zeilen JavaScript, die man direkt unter dem Formular einfügen kann:</p>
<pre><code class="javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
    document.getElementById('kategorienselect').onchange = function(){
        if(this.value){
            document.getElementById('kategorienform').submit();
        }
    };
    document.getElementById('kategorienbutton').style.display = 'none';
&lt;/script&gt;
</code></pre>
<p>Ändert der Benutzer seine Auswahl im <code>select</code>-Element, wird (sofern nicht gerade der „Bitte auswählen“-Eintrag gewählt wird) das Formular automatisch abgesendet, auch ohne den mit <code>style.display = 'none'</code> unsichtbar gemachten Button aktivieren zu müssen – und fertig ist das benutzerfreundliche und trotzdem auch ohne JavaScript funktionierende Kategorie-Dropdown! Das ist zwar etwas mehr Code als die drei Zeilen aus dem Codex, funktioniert dafür aber garantiert bei jedem Besucher. Und das Prinzip ist recht simpel, vorausgesetzt man plant von vornherein entsprechend. Da eben das bei WordPress selbst nicht passiert ist, müssen wir etwas mehr tippen – beziehungsweise im Falle des Archiv-Dropdowns sogar sehr viel mehr:</p>
<pre><code class="php">
&lt;form id=&quot;archivform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;&quot; method=&quot;get&quot;&gt;
    &lt;label for=&quot;archivselect&quot;&gt;Zu Monat springen&lt;/label&gt;
    &lt;select id=&quot;archivselect&quot; name=&quot;m&quot;&gt;
        &lt;option value=&quot;&quot;&gt;-- Bitte auswählen&lt;/option&gt;
        &lt;?php
            $query = &quot;SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, COUNT(ID) as `posts`
                FROM $wpdb-&gt;posts
                WHERE post_type = 'post' AND post_status = 'publish'
                GROUP BY YEAR(post_date), MONTH(post_date)
                ORDER BY post_date DESC&quot;;
            $key = md5($query);
            $cache = wp_cache_get('select_archives', 'general');
            if(!isset($cache[$key])){
                $arcresults = $wpdb-&gt;get_results($query);
                $cache[$key] = $arcresults;
                wp_cache_set('select_archives', $cache, 'general');
            }
            else{
                $arcresults = $cache[$key];
            }
            if($arcresults){
                global $wp_locale;
                foreach((array) $arcresults as $arcresult){
                    $value = $arcresult-&gt;year.$arcresult-&gt;month;
                    $text = sprintf(__('%1$s %2$d'), $wp_locale-&gt;get_month($arcresult-&gt;month), $arcresult-&gt;year);
                    $count = '&amp;nbsp;('.$arcresult-&gt;posts.')';
                    $selected = (is_month() &amp;&amp; get_query_var('year').get_query_var('monthnum') == $value) ? 'selected' : '';
                    echo '&lt;option '.$selected.' value=&quot;'.$value.'&quot;&gt;'.$text.$count.'&lt;/option&gt;';
                }
            }
        ?&gt;
    &lt;/select&gt;
    &lt;input id=&quot;archivbutton&quot; value=&quot;Archiv abrufen&quot; type=&quot;submit&quot;&gt;
&lt;/form&gt;
</code></pre>
<p>Das Problem beim Monatsarchiv ist, dass man ohne einen eigenen SQL-Query nicht an die Informationen herankommt, die man für ein Monats-Archiv braucht. So kommt man nicht drum herum, manuell die Datenbank zu bemühen und das Ergebnis händisch zu cachen. Das Prinzip ist aber identisch: einfach ein herkömmliches Formular ausgeben und wieder mit sechs kleinen Zeilen JavaScript aufwerten:</p>
<pre><code class="javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
    document.getElementById('archivselect').onchange = function(){
        if(this.value){
            document.getElementById('archivform').submit();
        }
    };
    document.getElementById('archivbutton').style.display = 'none';
&lt;/script&gt;
</code></pre>
<p>Wir fassen zusammen: viele Zeilen Code, aber kompliziert ist das Prinzip nicht. Unobtrusive JavaScript ist eine Frage der intelligenten Planung und wenn die mal, wie bei WordPress, nicht von Haus aus mitgeliefert wird, muss man sich eben behelfen. Bei herkömmlichen Websites gibt es keinen Grund, die Bedienung komplett von JavaScript abhängig zu machen und falls doch mal etwas Mehraufwand entsteht, so ist er die saubere Trennung der Schichten und den Zugänglichkeits-Bonus allemal wert.</p>
<div class="contentdiv">
<h4>Gastbeitrag</h4>
<p><img src="http://wpengineer.com/wp-content/uploads/twitter_bigger.png" alt="" title="twitter_bigger" width="73" height="73" class="alignleft size-full wp-image-2132" /><br />
Dieser Beitrag ist aus der Feder von Peter Kröner - <a href="http://www.peterkroener.de/">peterkroener.de</a> und ist ein Beitrag zum Adventskalender auf <a href="http://wpengineer.com/">wpengineer.com</a> zum Thema WordPress.<br />
Peter Kröner ist selbstständiger Webdesigner und -entwickler sowie Autor des <a href="http://html5-buch.de/">HTML5-Buchs</a>.<br />
Auf <a href="http://www.peterkroener.de/weblog/">peterkroener.de</a> bloggt er über alle Themen rund um Webtechnologie.</p>
<p>Vielen Dank auch hier nochmal von meiner Seite an <a href="http://www.peterkroener.de/">Peter</a>.
</div>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/kategorie-und-archiv-dropdowns-mit-unobtrusive-javascript/1238/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kategorie-und-archiv-dropdowns-mit-unobtrusive-javascript/1238/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/twitter_bigger.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/twitter_bigger.png" medium="image">
			<media:title type="html">twitter_bigger</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Adventskalender - 24 Tage Tipps und Tricks zu WordPress</title>
		<link>http://bueltge.de/adventskalender-24-tage-tipps-tricks-wordpress/1225/</link>
		<comments>http://bueltge.de/adventskalender-24-tage-tipps-tricks-wordpress/1225/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 12:07:34 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Linktipp]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1225</guid>
		<description><![CDATA[Bueltge.de wird in diesem Jahr keine Türchen für die Weihnachtszeit bereit stellen - aber in unserem gemeinsamen Projekt WP Engineer werden wir jeden Tag für euch ein Türchen öffnen.]]></description>
			<content:encoded><![CDATA[<p>In diesem Jahr, im Gegensatz zur letzten <a href="http://bueltge.de/tag/adventskalender/page/3/">Adventszeit</a>, werde ich nicht die Zeit für einen Weihnachtskalender hier im Blog finden. Es ist als alleiniger Schreiber einfach zu viel Arbeit bei aktuell zu wenig Zeit.</p>
<p>Aber nicht verzagen, Freunde fragen - auf unserem gemeinsamen Blog <a href="http://wpengineer.com/">WP Engineer</a>, geführt durch <a href="http://www.alexfrison.com/">Alex</a>, <a href="http://dynamicinternet.eu/">Micha</a> und mich, wird es wieder einen Adventskalender mit 24 Türchen voller Tipps und Tricks zum Thema WordPress geben, in englischer Sprache - aber verständlich. Vielleicht schaut der eine oder andere Leser dieses Blogs auch dort mit rein.</p>
<p><img src="http://wpengineer.com/wp-content/uploads/WordPress-Christmas-2010.jpg" width="600" hight="400" alt="WP Engineer Christmas 2010" /><br />
<span id="more-1225"></span><br />
Ebenso nehmen wir sehr gern Gastbeiträge; also her mit euren Tipps und Tricks zu WordPress und mitmachen beim <a href="http://wpengineer.com/2101/advent-calendar-%E2%80%93-24-days-tips-and-tricks-each-day/">Weihnachtsspezial auf WPEngineer.com</a>.</p>
<p>Lasst euch also überraschen, genießt die Zeit auch mal ohne Rechner und sendet <a href="http://bueltge.de/kontakt/">mir</a>/uns eure Beiträge, wenn ihr mögt.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/adventskalender-24-tage-tipps-tricks-wordpress/1225/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/adventskalender-24-tage-tipps-tricks-wordpress/1225/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/WordPress-Christmas-2010.jpg" />
		<media:content url="http://wpengineer.com/wp-content/uploads/WordPress-Christmas-2010.jpg" medium="image">
			<media:title type="html">WP Engineer Christmas 2010</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Plugin für mehr Flexibilität beim Schreiben</title>
		<link>http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/</link>
		<comments>http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 04:20:27 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1086</guid>
		<description><![CDATA[Heute ist er nun da, der letzte Tag im Kalender und der letzte Tag, der mich zwingt, jeden Tag einen Beitrag zu veröffentlichen. Nicht selten habe ich über Nacht noch einen kleinen Beitrag geschrieben um die Leser am kommenden Morgen mit einem neuen Türchen zu beglücken. Nicht nur Kinder mögen die Überraschung am Morgen beim Öffnen eines neuen Türchens. Für mich ist nun erst mal Pause, andere Themen sind wichtiger und nur wenige werden vermutlich diesen Beitrag hier lesen; ist doch heute Weihnachten. Mir bleibt nur noch zu sagen:
Alles liebe und Gute, die herzlichsten Wünsche, ein friedliches Weihnachtsfest und einen guten Rutsch in das neue Jahr wünsche ich allen Lesern, allen Kunden, allen netten Kontakten und jedem, der irgendwie Mensch ist und mit mir zu tun hatte. Ich freue mich auf ein neues Jahr mit euch und hadere der Dinge, die uns im neuen Jahr erreichen werden. Als kleines Präsent zum heiligen Abend heute habe ich euch ein Plugin erstellt, was euch zum einen zusätzliche Felder in den Bereich Schreiben von WordPress bringt, was euch zeigt, wie einfach man den Bereich erweitern kann und was nach belieben von euch genutzt werden darf.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-24.jpg" alt="WP Adventskalender 24" /><br />
Heute ist er nun da, der letzte Tag im Kalender und der letzte Tag, der mich zwingt, jeden Tag einen Beitrag zu veröffentlichen. Nicht selten habe ich über Nacht noch einen kleinen Beitrag geschrieben um die Leser am kommenden Morgen mit einem neuen Türchen zu beglücken. Nicht nur Kinder mögen die Überraschung am Morgen beim Öffnen eines neuen Türchens. Für mich ist nun erst mal Pause, andere Themen sind wichtiger und nur wenige werden vermutlich diesen Beitrag hier lesen; ist doch heute Weihnachten. Mir bleibt nur noch zu sagen:<br />
<strong>Alles liebe und Gute, die herzlichsten Wünsche, ein friedliches Weihnachtsfest und einen guten Rutsch in das neue Jahr wünsche ich allen Lesern, allen Kunden, allen netten Kontakten und jedem, der irgendwie Mensch ist und mit mir zu tun hatte. Ich freue mich auf ein neues Jahr mit euch und harre der Dinge, die uns im neuen Jahr erreichen werden.</strong></p>
<p><img class="centeredob" src="http://bueltge.de/wp-content/images/weihnacht.png" alt="Es weihnachtet" /></p>
<p>Als kleines Präsent zum heiligen Abend heute habe ich euch ein Plugin erstellt, was euch zum einen zusätzliche Felder in den Bereich Schreiben von WordPress bringt, was euch zeigt, wie einfach man den Bereich erweitern kann und was nach belieben von euch genutzt werden darf.<br />
<span id="more-1086"></span><br />
Das Plugin bringt 3 neue Felder in einer Metabox mit:</p>
<ul>
<li><strong>Untertitel</strong> - wie der Name schon sagt, eine Zeile ohne Formatierung in der Ausgabe</li>
<li><strong>Zusatzinformationen</strong> - ein vollwertiger Editor, ebenso kann man jede Art von Attachments hinzufügen, also fast gleich dem Content-Editor.</li>
<li><strong>Listdaten</strong> - Hier wird ermöglicht, dass man pro Zeile einen Inhalt pflegt und jede Zeile als List-Element ausgeben wird, ungeordnete Liste <code>ul</code></li>
</ul>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/different-type/screenshot-1.png" alt="Screenshot im Edit-Bereich von WordPress" /></p>
<p>Jedes dieser Felder kann gezielt im Template des Themes eingesetzt werden, hat also einen Template Tag, der die Ausgabe steuert. Nur wenn es in diesem Feld Daten gibt, dann werden sie auch ausgegeben. Im folgenden ein Beispiel, der die drei neuen Felder ausgibt.</p>
<pre><code>
&lt;div &lt;?php post_class() ?&gt; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;

	&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;

	&lt;h3&gt;&lt;?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post-&gt;ID, 'heading'); ?&gt;&lt;/h3&gt;

	&lt;div class=&quot;entry&quot;&gt;

		&lt;?php the_content('&lt;p class=&quot;serif&quot;&gt;Read the rest of this entry &amp;raquo;&lt;/p&gt;'); ?&gt;

		&lt;?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post-&gt;ID, 'additional-info'); ?&gt;

		&lt;?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post-&gt;ID, 'listdata'); ?&gt;
</code></pre>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/different-type/screenshot-2.png" alt="Screenshot im Frontend von WordPress" /></p>
<p>Das Plugin soll als Vorlage dienen, wer also mag, der passt es an und schafft eine Oberfläche, in der sich die Autoren wohl fühlen, keine Pflege der benutzerdefinierten Felder.</p>
<p>Das Plugin sorgt dafür, dass die Metaboxen "Benutzerdefinierte Felder" und "Trackbacks" nicht mehr da sind (<code>remove_meta_box()</code>); auch das als Beispiel für die Nutzung. Zu jedem der genutzten Code-Schnipsel im Plugin gibt es hier im Blog einen Beitrag und so sollte man damit klar kommen. Im folgenden der Code ohne Zusatzfiles und im Anschluss das Plugin als Download, inkl. readme, Sprachfiles für deutsche User und die nötigen Scripte.</p>
<pre><code>
&lt;?php
/**
 * @package Different Type
 * @author Frank B&amp;uuml;ltge
 * @version 0.1
 */
 
/*
	Plugin Name: Different Type
	Plugin URI: http://bueltge.de/
	Description: Add different types to posts
	Author: Frank B&amp;uuml;ltge
	Version: 0.1
	License: GPL
	Author URI: http://bueltge.de/
	Last change: 24.12.2009 00:00:00
*/

/**
 * Example for use outside the loop:
 * &lt;?php the_DifferentTypeFacts($post-&gt;ID); ?&gt;
 * @param $id Integer - Post-ID
 * @param $type String - heading, additional-info, listdata (default is ''-empty)
 *
 * Example: &lt;?php the_DifferentTypeFacts($post-&gt;ID, 'heading'); ?&gt;
 */

//avoid direct calls to this file, because now WP core and framework has been used
if ( !function_exists('add_action') ) {
	header('Status: 403 Forbidden');
	header('HTTP/1.1 403 Forbidden');
	exit();
}

if ( function_exists('add_action') ) {
	//WordPress definitions
	if ( !defined('WP_CONTENT_URL') )
		define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
	if ( !defined('WP_CONTENT_DIR') )
		define('WP_CONTENT_DIR', ABSPATH . 'wp-content');
	if ( !defined('WP_PLUGIN_URL') )
		define('WP_PLUGIN_URL', WP_CONTENT_URL.'/plugins');
	if ( !defined('WP_PLUGIN_DIR') )
		define('WP_PLUGIN_DIR', WP_CONTENT_DIR.'/plugins');
	if ( !defined('PLUGINDIR') )
		define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH.  For back compat.
	if ( !defined('WP_LANG_DIR') )
		define('WP_LANG_DIR', WP_CONTENT_DIR . '/languages');
	
	// plugin definitions
	define( 'FB_DT_BASENAME', plugin_basename(__FILE__) );
	define( 'FB_DT_BASEDIR', dirname( plugin_basename(__FILE__) ) );
	define( 'FB_DT_TEXTDOMAIN', 'different-types' );
}

if ( !class_exists( 'DifferentType' ) ) {
	class DifferentType {
		
		// constructor
		function DifferentType() {
			
			if (is_admin() ) {
				add_action( 'admin_init', array(&amp;$this, 'on_admin_init') );
				add_action( 'wp_insert_post', array(&amp;$this, 'on_wp_insert_post'), 10, 2 );
				add_action( 'init', array(&amp;$this, 'textdomain') );
				register_uninstall_hook( __FILE__, array(&amp;$this, 'uninstall') );
				add_action( &quot;admin_print_scripts-post.php&quot;, array($this, 'enqueue_script') );
				add_action( &quot;admin_print_scripts-post-new.php&quot;, array($this, 'enqueue_script') );
				add_action( &quot;admin_print_scripts-page.php&quot;, array($this, 'enqueue_script') );
				add_action( &quot;admin_print_scripts-page-new.php&quot;, array($this, 'enqueue_script') );
			}
		}
		
		// active for multilanguage
		function textdomain() {
			
			if ( function_exists('load_plugin_textdomain') )
				load_plugin_textdomain( FB_DT_TEXTDOMAIN, false, dirname( FB_DT_BASENAME ) . '/languages' );
		}
		
		// unsintall all postmetadata
		function uninstall() {
			
			$all_posts = get_posts('numberposts=0&amp;post_type=post&amp;post_status=');

			

			foreach( $all_posts as $postinfo) {

				delete_post_meta($postinfo-&gt;ID, '_different-types');

			}
		}
		
		// add script
		function enqueue_script() {
			wp_enqueue_script( 'tinymce4dt', WP_PLUGIN_URL . '/' . FB_DT_BASEDIR . '/js/script.js', array('jquery') );
		}
		
		// admin init
		function on_admin_init() {
			
			if ( !current_user_can( 'publish_posts' ) )
				return;
			
			add_meta_box( 'different_types',
									__( 'Different Types', FB_DT_TEXTDOMAIN ),
									array( &amp;$this, 'meta_box' ),
									'post', 'normal', 'high'
									);
									
			// remove meta box for trackbacks
			remove_meta_box('trackbacksdiv', 'post', 'normal');
			// remove meta box for custom fields
			remove_meta_box('postcustom', 'post', 'normal');
		}
		
		// check for preview
		function is_page_preview() {
			$id = (int)$_GET['preview_id'];
			if ($id == 0) $id = (int)$_GET['post_id'];
			$preview = $_GET['preview'];
			if ($id &gt; 0 &amp;&amp; $preview == 'true') {
				global $wpdb;
				$type = $wpdb-&gt;get_results(&quot;SELECT post_type FROM $wpdb-&gt;posts WHERE ID=$id&quot;);
				if ( count($type) &amp;&amp; ($type[0]-&gt;post_type == 'page') &amp;&amp; current_user_can('edit_page') )
					return true;
			}
			return false;
		}
		
		// after save post, save meta data for plugin
		function on_wp_insert_post($id) {
			global $id;
			
			if ( !isset($id) )
				$id = (int)$_REQUEST['post_ID'];
			if ( $this-&gt;is_page_preview() &amp;&amp; !isset($id) )
				$id = (int)$_GET['preview_id'];
			
			if ( !current_user_can('edit_post') )
				return;
			
			if ( isset($_POST['dt-heading']) &amp;&amp; $_POST['dt-heading'] != '' )
				$this-&gt;data['heading'] = esc_attr( $_POST['dt-heading'] );
			if ( isset($_POST['dt-additional-info']) &amp;&amp; $_POST['dt-additional-info'] != '' )
				$this-&gt;data['additional-info'] = $_POST['dt-additional-info'];
			if ( isset($_POST['dt-listdata']) &amp;&amp; $_POST['dt-listdata'] != '' )
				$this-&gt;data['listdata'] = esc_attr( $_POST['dt-listdata'] );
			
			if ( isset($this-&gt;data) &amp;&amp; $this-&gt;data != '' )
				update_post_meta($id, '_different-types', $this-&gt;data);
		}

		// load post_meta_data
		function load_post_meta($id) {
			
			return get_post_meta($id, '_different-types', true);
		}

		// meta box on post/page
		function meta_box($data) {
			
			$value = $this-&gt;load_post_meta($data-&gt;ID);
			?&gt;
			&lt;table id=&quot;dt-page-definition&quot; width=&quot;100%&quot; cellspacing=&quot;5px&quot;&gt;
				&lt;tr valign=&quot;top&quot;&gt;
					&lt;td style=&quot;width:20%;&quot;&gt;&lt;label for=&quot;dt-heading&quot;&gt;&lt;?php _e( 'Subtitle:', FB_DT_TEXTDOMAIN ); ?&gt;&lt;/label&gt;&lt;/td&gt;
					&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;dt-heading&quot; name=&quot;dt-heading&quot; class=&quot;heading form-input-tip&quot; size=&quot;16&quot; autocomplete=&quot;off&quot; value=&quot;&lt;?php echo $value['heading']; ?&gt;&quot; tabindex=&quot;6&quot; style=&quot;width:99.5%&quot;/&gt;&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr valign=&quot;top&quot;&gt;
					&lt;td&gt;&lt;label for=&quot;dt-additional-info&quot;&gt;&lt;?php _e( 'Additional information:', FB_DT_TEXTDOMAIN ); ?&gt;&lt;/label&gt;&lt;/td&gt;
					&lt;td&gt;&lt;textarea cols=&quot;16&quot; rows=&quot;5&quot; id=&quot;dt-additional-info&quot; name=&quot;dt-additional-info&quot; class=&quot;additional-info form-input-tip code&quot; size=&quot;20&quot; autocomplete=&quot;off&quot; tabindex=&quot;6&quot; style=&quot;width:90%&quot;/&gt;&lt;?php echo wpautop( $value['additional-info'] ); ?&gt;&lt;/textarea&gt;
						&lt;table id=&quot;post-status-info&quot; cellspacing=&quot;0&quot; style=&quot;line-height: 24px;&quot;&gt;
							&lt;tbody&gt;
								&lt;tr&gt;
									&lt;td&gt;&amp;nbsp;&lt;/td&gt;
									&lt;td&gt;&amp;nbsp;&lt;/td&gt;
								&lt;/tr&gt;
							&lt;/tbody&gt;
						&lt;/table&gt;
					&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr valign=&quot;top&quot;&gt;
					&lt;td&gt;&lt;label for=&quot;dt-listdata&quot;&gt;&lt;?php _e( 'Listdata:', FB_DT_TEXTDOMAIN ); ?&gt;&lt;/label&gt;&lt;/td&gt;
					&lt;td&gt;&lt;textarea cols=&quot;16&quot; rows=&quot;10&quot; id=&quot;dt-listdata&quot; name=&quot;dt-listdata&quot; class=&quot;listdata form-input-tip&quot; size=&quot;20&quot; autocomplete=&quot;off&quot; tabindex=&quot;6&quot; style=&quot;width:99.5%&quot;/&gt;&lt;?php echo $value['listdata']; ?&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;small&gt;&lt;?php _e( 'One list per line', FB_DT_TEXTDOMAIN ) ?&gt;&lt;/small&gt;&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/table&gt;
			&lt;?php
		}

		// return facts incl. markup
		function get_DifferentTypeFacts($id, $type, $value) {
			
			if (!$value)
				return false;
			if ( $type == '' )
				return false;
			
			if ( 'heading' == $type &amp;&amp; '' != $value['heading'] )
				return $value['heading'];
			if ( 'additional-info' == $type &amp;&amp; '' != $value['additional-info'] )
				return wpautop( wptexturize($value['additional-info']) );
			if ( 'listdata' == $type &amp;&amp; '' != $value['listdata'] ) {
				$return = '';
				$listdatas = preg_split(&quot;/\r\n/&quot;, $value['listdata'] );

				foreach ( (array) $listdatas as $key =&gt; $listdata ) {

					$return .= '&lt;li&gt;' . trim($listdata) . '&lt;/li&gt;';

				}
				return '&lt;ul&gt;' . $return . '&lt;/ul&gt;'. &quot;\n&quot;;
			}
		}
		
		// echo facts, if exists
		function DifferentTypeFacts($id, $type, $string) {
		
			if ( $id ) {
				$value = $this-&gt;load_post_meta($id);
				
				echo $this-&gt;get_DifferentTypeFacts($id, $type, $value);
			}
		}

	} // End class
	
	// instance class
	$DifferentType = new DifferentType();
	
	
	// use in template
	function the_DifferentTypeFacts($id, $type = '', $string = '') {
		global $DifferentType;
		
		$DifferentType-&gt;DifferentTypeFacts($id, $type, $string);
	}
	
} // End if class exists statement
?&gt;
</code></pre>
<p>Download als zip-Datei: <a href="https://github.com/bueltge/different-type/zipball/master">github.com/bueltge/different-type/zipball/master</a> - 40 kByte<br />
Das Plugin liegt in einer gepflegten Version bei <a href="https://github.com/bueltge/different-type">github.com</a> und kann dort besichtigt, geforkt und gezogen werden.</p>
<p>Ich wünsche viel Spass damit und vielleicht wird das einen oder andere Projekt mit WordPress damit in diesem Bereich ein wenig klarer und logischer für die Autoren.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/feed/</wfw:commentRss>
		<slash:comments>59</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-24.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-24.jpg" medium="image">
			<media:title type="html">WP Adventskalender 24</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/weihnacht.png" medium="image">
			<media:title type="html">Es weihnachtet</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/different-type/screenshot-1.png" medium="image">
			<media:title type="html">Screenshot im Edit-Bereich von WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/different-type/screenshot-2.png" medium="image">
			<media:title type="html">Screenshot im Frontend von WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress und Sessions</title>
		<link>http://bueltge.de/wordpress-und-sessions/1085/</link>
		<comments>http://bueltge.de/wordpress-und-sessions/1085/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 07:40:22 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1085</guid>
		<description><![CDATA[Man meint, dass WordPress die Nutzung von Sessions nicht unterstützt; immer wieder kommt es zu Fehlern, wenn man wie in PHP bekannt, einfach diverse Sessions initialisiert und nicht selten sucht man sich irre nach dem Problem.
Aber manchmal ist es leichter als es ausschaut, denn man kann einfach via Funktion die Session initialisieren. Achte darauf, dass die Initialisierung möglichst am Anfang der Datei ist.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-23.jpg" alt="WP Adventskalender 23" /><br />
Man meint, dass WordPress die Nutzung von Sessions nicht unterstützt; immer wieder kommt es zu Fehlern, wenn man wie in <a href="http://de2.php.net/manual/de/book.session.php">PHP bekannt</a>, einfach diverse Sessions initialisiert und nicht selten <a href="http://wordpress.org/support/topic/228763">sucht man sich irre</a> nach dem Problem.<br />
Aber manchmal ist es leichter als es ausschaut, denn man kann einfach via Funktion die Session initialisieren. Achte darauf, dass die Initialisierung möglichst am Anfang der Datei ist.<br />
<span id="more-1085"></span></p>
<pre><code>
&lt;?php
if ( !session_id() )
	session_start();
</code></pre>
<p>Ich nutze öfter noch eine kleine Erweitung und habe daher eine eigene Funktion dafür.</p>
<pre><code>
&lt;?php
if ( !session_id() )
	my_start_session();

function my_start_session() {

	@session_cache_limiter('private, must-revalidate'); //private_no_expire
	@session_cache_expire(0);
	@session_start();
}
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-und-sessions/1085/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-und-sessions/1085/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-23.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-23.jpg" medium="image">
			<media:title type="html">WP Adventskalender 23</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Contactable - Kontaktformular in WordPress</title>
		<link>http://bueltge.de/kontaktformular-wordpress-contactable/1072/</link>
		<comments>http://bueltge.de/kontaktformular-wordpress-contactable/1072/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 07:41:43 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1072</guid>
		<description><![CDATA[Die Integration eines Kontaktformulars mit WordPress beginnt meist bei einer Pluginsuche und endet oft mit einem viel zu großem Aufwand. Da werden Scripte geladen, Filter von WordPress über alle Seiten und Beiträge gejagt - nur um auf einer Seite ein Formular zu integrieren. Das Blog ist immer so gut wie sein Techniker und ich möchte heute mal einen ganz einfachen Weg zeigen, wie man sich ohne große Kenntnisse trotzdem ein Kontakt-Formular in das eigene Blog integriert.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" alt="WP Adventskalender 22" /><br />
Die Integration eines Kontaktformulars mit WordPress beginnt meist bei einer Pluginsuche und endet oft mit einem viel zu großem Aufwand. Da werden Scripte geladen, Filter von WordPress über alle Seiten und Beiträge gejagt - nur um auf einer Seite ein Formular zu integrieren. Das Blog ist immer so gut wie sein Techniker und ich möchte heute mal einen ganz einfachen Weg zeigen, wie man sich ohne große Kenntnisse trotzdem ein Kontakt-Formular in das eigene Blog integriert.<br />
<span id="more-1072"></span><br />
Die Lösung ist nicht der Weisheit letzter Schuss, aber sie zeigt, wie einfach es ist und wie ressourcenschonend für WordPress die Integration sein kann.<br />
Damit wir uns voll und ganz der Integration widmen können, und uns nicht mit PHP und JavaScript im Sinne des Formulars beschäftigen müssen, nutze ich hier im Beispiel das tolle Formular-Plugin<br />
<a href="http://theodin.co.uk/blog/ajax/contactable-jquery-plugin.html"><strong>Contactable</strong></a> für jQuery von Philip Beel. Das Plugin bringt alle erforderlichen Dateien mit und muss lediglich integriert werden - sehr einfach zu nutzen und wenn man mag an die eigenen Bedürfnisse anzupassen. Hinweise dazu gibt es auf der <a href="http://theodin.co.uk/blog/ajax/contactable-jquery-plugin.html">Site zum jQuery-Plugin</a>. Die Integration des Formulars zeige ich anhand des Standard-Themes Kubrick von WordPress, ist aber in jedem anderen Theme eben so zu nutzen. <strong>Aber Achtung</strong>, Spamer könnten das Plugin missbrauchen, daher gut überlegen oder erweitern - mehr dazu gibt es hier in den <a href="http://http://bueltge.de/kontaktformular-wordpress-contactable/1072/#comment-350200">Kommentaren</a> zu lesen. Danke in diesem Hinblick an Robert für die Hinweise und die damit verbundene Mühe.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/contactable.png" alt="Contactable im Kubrick" /></p>
<p>WordPress bringt im Standard die jQuery Bibliothek mit und so müssen wir uns um die nicht kümmern, sondern nutzen sie lediglich. Dabei findet der Aufruf aller nötigen Dateien und Scripte innerhalb des Templates statt, welches sich im Anschluss um die Ausgabe des Kontaktformulars kümmert. Dieses Aufruf erledigen wir mit den Funktionen von WordPress - so gehen wir sicher, dass die Dateien wirklich nur einmal geladen werden. WordPress kümmert sich um die richtige Reihenfolge und um die Abhängigkeiten. Zu diesem Thema habe ich bereits einiges an <a href="http://bueltge.de/javascript-bibliotheken-in-und-aus-wordpress-nutzen/808/">Infos hinterlegt und verweise auf diesen Beitrag</a>.</p>
<p>Als erstes erstellen wir ein Template, ich nenne es <code>contact-page.php</code> und es muss im Ordner eures Themes abgelegt werden. Dies enthält den Aufruf der nötigen Scripte und der dazugehörigen Stylesheets. Im Grunde benötigt ihr nur diese vier Aufrufe in der <code>page.php</code> eures Theme abzulegen, einen neuen Namen für die Datei zu vergeben und den Kommentar zum Erkennen durch WordPress im Page-Bereich des Backend abzulegen (ganz am Anfang der Datei). Im folgenden die Syntax am Beispiel der <code>page.php</code> aus dem Standard-Theme Kubrick.</p>
<pre><code>
&lt;?php
/**
 * Template Name: Contact Page
 *
 * @package WordPress
 * @subpackage Default_Theme
 */

wp_enqueue_script( 'jquery.contactable', get_bloginfo('template_directory') . '/contactable/jquery.contactable.js', array('jquery') , 3.1, true );
wp_enqueue_script( 'jquery.validate', get_bloginfo('template_directory') . '/contactable/jquery.validate.pack.js', array('jquery') , 3.1, true );
wp_enqueue_script( 'my_contactable', get_bloginfo('template_directory') . '/contactable/my_contactable.js', array('jquery') , 3.1, true );
wp_enqueue_style( 'contactable', get_bloginfo('template_directory') . '/contactable/contactable.css' );

get_header(); ?&gt;

	&lt;div id=&quot;content&quot; class=&quot;narrowcolumn&quot; role=&quot;main&quot;&gt;

		&lt;div class=&quot;post&quot; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;
		&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;

			&lt;div class=&quot;entry&quot;&gt;
				&lt;?php the_content('&lt;p class=&quot;serif&quot;&gt;Read the rest of this page &amp;raquo;&lt;/p&gt;'); ?&gt;
				
				&lt;div id=&quot;mycontactform&quot;&gt; &lt;/div&gt;
				
			&lt;/div&gt;
		&lt;/div&gt;
	
	&lt;/div&gt;

&lt;?php get_sidebar(); ?&gt;

&lt;?php get_footer(); ?&gt;
</code></pre>
<p>Wie in der Syntax zu erkennen, habe ich alle Dateien des jQuery-Formular-Plugnis im Ordner <code>contactable</code> im Ordner des Themes abgelegt. Eventuell müssen daher eure Pfade angepasst werden. Aktuell sieht es in meinem Theme wie folgt aus:</p>
<ul>
<li>
default</p>
<ul>
<li>contactable
<ul>
<li>jquery.contactable.js</li>
<li>jquery.validate.pack.jss</li>
<li>my.contactable.js</li>
<li>contactable.css</li>
</ul>
</li>
<li>style.css</li>
<li>contact-page.php</li>
<li>...</li>
</ul>
</li>
</ul>
<p>Einzig die Datei <code>my.contactable.js</code> habe ich hinzugefügt; diese kümmert sich um den Aufruf des Formulars und kann mit Parametern gefüllt werden. Inhaltlich sieht sie wie folgt aus:</p>
<pre><code>
jQuery(document).ready( function($){
	$('#mycontactform').contactable({
		name: 'Name',
		email: 'E-Mail',
		message : 'Nachricht',
		recipient: 'example@domain.com',
		subject: 'Kontaktformular',
		recievedMsg : 'Vielen Dank f&amp;uuml;r Ihre Nachricht.'
	});
});
</code></pre>
<p>Sind alle Dateien gespeichert und an eure Bedürfnisse angepasst, dann muss lediglich im Admin-Bereich von WordPress eine Seite angelegt werden. Dieser Seite gebt ihr einen Namen, eventuell Inhalt und ihr müsst das Template auswählen - in unserem Fall die <strong>Contact Page</strong>. Nachdem Speichern sollte die Seite im Frontend des Blog aufzurufen sein und mit einem Klick auf das kleine Label fährt das Formular in die Sicht und kann ausgefüllt werden.</p>
<p>Durch die Aufrufe mit Hilfe von WordPress Funktionen und den richtigen Parametern, sind nun die Scripte im Footer der Site integriert. Die Bibliothek jQuery muss nicht aufgerufen werden, sie wird von WordPress hinzugefügt, wenn sie noch nicht da ist, durch die Abhängigkeit der Parameter zum Schlüssel <code>jquery</code>. Durch die Nutzung eines Templates mit allen Aufrufen werden sämtliche Scripte und StyleSheets nur eingebunden, wenn diese Seite von WordPress aufgerufen wird. Wer das Formular-Schnippsel auf allen Seiten möchte, der macht den Aufruf bspw. in der <code>header.php</code> oder <code>functions.php</code>.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/contactable-ocss.png" alt="Contactable im Kubrick" /></p>
<p>Möchte man diese Funktion nicht nutzen, so kann entweder dass CSS nicht genutzt werden, bzw. ein eigenes Design hinzugefügt werden oder man passt das JS an seine eigenen Bedürfnisse an. Gleiches gilt für zusätzliche Felder im Formular, dazu muss der Inhalt der Dateien angepasst werden.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/kontaktformular-wordpress-contactable/1072/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kontaktformular-wordpress-contactable/1072/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" medium="image">
			<media:title type="html">WP Adventskalender 22</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/contactable.png" medium="image">
			<media:title type="html">Contactable im Kubrick</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/contactable-ocss.png" medium="image">
			<media:title type="html">Contactable im Kubrick</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Scripte von Plugins aus dem Frontend entfernen</title>
		<link>http://bueltge.de/scripte-plugins-frontend-entfernen/1083/</link>
		<comments>http://bueltge.de/scripte-plugins-frontend-entfernen/1083/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 07:59:53 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1083</guid>
		<description><![CDATA[Nicht selten werden Scripte im Frontend des WordPress-Blog via Hook abgelegt. Dabei werden leider nicht immer die optimalen Wege gewählt und es kann vorkommen, dass die Scripte entweder nicht an der richtigen Stelle sind, Foote roder head-Bereich, oder dass Bibliotheken mehrfach genutzt werden. Dies kostet Last und ist in keinem Fall erwünscht.

Das Feld der Optimierung von Websites ist weit und viele Möglichkeiten stehen dem Entwickler zur Verfügung, um das optimale aus der Site zu holen. Um die Scripte von Plugins an die Stelle zu bewegen, wo man sie haben will, und die Prüfung der Redundanz von Scripten zu nutzen, bedarf es Anpassungen im Plugins selbst. Dies kann aufwendig sein und beim nächsten Update des Plugins kann das Problem von neuem bestehen.

Daher bietet es sich an, dass man alle Scripte aus dem Frontend löscht und die Integration selbst in die Hand nimmt.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-21.jpg" alt="WP Adventskalender 21" /><br />
Nicht selten werden Scripte im Frontend des WordPress-Blog via Hook abgelegt. Dabei werden leider nicht immer die <a href="http://bueltge.de/javascript-bibliotheken-in-und-aus-wordpress-nutzen/808/">optimalen Wege</a> gewählt und es kann vorkommen, dass die Scripte entweder nicht an der richtigen Stelle sind, Footer oder head-Bereich, oder dass Bibliotheken mehrfach genutzt werden. Dies kostet Last und ist in keinem Fall erwünscht.</p>
<p>Das Feld der Optimierung von Websites ist weit und viele Möglichkeiten stehen dem Entwickler zur Verfügung, um das optimale aus der Site zu holen. Um die Scripte von Plugins an die Stelle zu bewegen, wo man sie haben will, und die Prüfung der Redundanz von Scripten zu nutzen, bedarf es Anpassungen im Plugins selbst. Dies kann aufwendig sein und beim nächsten Update des Plugins kann das Problem von neuem bestehen.</p>
<p>Daher bietet es sich an, dass man alle Scripte aus dem Frontend löscht und die Integration selbst in die Hand nimmt.<br />
<span id="more-1083"></span></p>
<pre><code class="php">
remove_action('wp_head', 'wp_print_head_scripts', 9, 0);
</code></pre>
<p>Die obige kleine Anweisung in der <code>functions.php</code> des Themes sorgt dafür, dass alle Script aus dem Frontend entfernt werden und man selbst die Integration vornehmen kann.</p>
<p>Ähnlich kann man im übrigen auch mit Stylesheets verfahren.</p>
<pre><code class="php">
remove_action('wp_head', 'wp_print_styles', 8, 0);
</code></pre>
<p>Weitere Tipps zum Bereinigen des head gibt es unter einem <a href="http://bueltge.de/wordpress-head-erleichtern/968/">weiteren Artikel</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/scripte-plugins-frontend-entfernen/1083/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/scripte-plugins-frontend-entfernen/1083/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-21.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-21.jpg" medium="image">
			<media:title type="html">WP Adventskalender 21</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Syndication Frequenz von WordPress optimieren</title>
		<link>http://bueltge.de/syndication-frequenz-wordpress-optimieren/1054/</link>
		<comments>http://bueltge.de/syndication-frequenz-wordpress-optimieren/1054/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 08:10:34 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1054</guid>
		<description><![CDATA[Heute wird ein Standard 9 Jahre alt, den kaum einer beachtet: Das Syndication-Modul 1.4.1 aus der RDF Site Summary 1.0. Wozu taugt das? Angeblich bloggen einige von euch seltener als 10 Mal pro Tag. Schämt euch … nicht! WordPress allerdings geht davon aus, dass ihr gar nicht mehr aufhören könnt, deshalb schreibt es in den [...]]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-20.jpg" alt="WP Adventskalender 20" /><br />
Heute wird ein Standard 9 Jahre alt, den kaum einer beachtet: Das <a hreflang="en" href="http://purl.org/rss/1.0/modules/syndication/">Syndication-Modul 1.4.1 aus der RDF Site Summary 1.0</a>.</p>
<h4>Wozu taugt das?</h4>
<p>Angeblich bloggen einige von euch seltener als 10 Mal pro Tag. Schämt euch … nicht!<br />
WordPress allerdings geht davon aus, dass ihr gar nicht mehr aufhören könnt, deshalb schreibt es in den RSS-Feed:</p>
<pre><code class="xml">
&lt;sy:updatePeriod&gt;hourly&lt;/sy:updatePeriod&gt;
&lt;sy:updateFrequency&gt;1&lt;/sy:updateFrequency&gt;
</code></pre>
<p><span id="more-1054"></span><br />
Zu Deutsch: Jeder Feedreader soll einmal pro Stunde nachsehen, ob ihr endlich wieder etwas geschrieben habt.</p>
<p>Wer seinen Server von solch eifriger Nachfrage ein bisschen entlasten will, der kann das ändern. In die <code>functions.php</code> schreibe man diese zwei Zeilen:</p>
<pre><code class="php">
add_filter( 'rss_update_period',    create_function( '', 'return "daily";' ) );
add_filter( 'rss_update_frequency', create_function( '', 'return 4;' ) );
</code></pre>
<p>Ein paar Feedreader halten sich sogar daran, viele andere nicht. Und wenn es nur einer ist: Wieder habt ihr ein paar Ressourcen gespart, die ihr woanders arbeiten lassen könnt.</p>
<div class="contentdiv">
<h4>Gastbeitrag</h4>
<p>Dieser Beitrag ist aus der Feder von Thomas Scholz - <a href="http://toscho.de/">toscho.de</a> und ist ein Beitrag zum <a title="Schreibe auch einen Gastbeitrag - siehe weitere Informationen in diesem Beitrag" href="http://bueltge.de/adventskalender-hier-und-da/1051/">Adventskalender auf bueltge.de</a> zum Thema WordPress.<br />
Vielen Dank auch hier nochmal von meiner Seite an <a href="http://toscho.de/">Thomas</a>.
</div>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/syndication-frequenz-wordpress-optimieren/1054/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/syndication-frequenz-wordpress-optimieren/1054/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-20.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-20.jpg" medium="image">
			<media:title type="html">WP Adventskalender 20</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Beitragsausgabe in Abhängigkeit der Kommentare</title>
		<link>http://bueltge.de/beitragsausgabe-abhaengigkeit-kommentare/1081/</link>
		<comments>http://bueltge.de/beitragsausgabe-abhaengigkeit-kommentare/1081/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 07:28:06 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Queries]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1081</guid>
		<description><![CDATA[Den Loop zu verstehen ist das eine, den Query auf seine Bedürnisse anzupassen etwas anderes. In diesem Zusammenhang gibt es sehr viele Möglichkeiten und man muss keinen SQL-Befehl absetzen. Mit WordPress Version 2.9 gibt es ein weiteres kleines Highlight, die Ausgabe der Inhalte in Abhängigkeit der Kommentare - orderby=comment_count.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-19.jpg" alt="WP Adventskalender 19" /><br />
Den Loop zu verstehen ist das eine, den Query auf seine Bedürnisse anzupassen etwas anderes. In diesem Zusammenhang gibt es sehr viele Möglichkeiten und man muss keinen SQL-Befehl absetzen.<br />
Mit WordPress Version 2.9 gibt es ein weiteres kleines Highlight, die Ausgabe der Inhalte in Abhängigkeit der Kommentare - <code>orderby=comment_count</code>.<br />
<span id="more-1081"></span><br />
Damit wird die Ausgabe für Themes, die beispielsweise die Sortierung <strong>aufgrund der Kommentarbeteiligung</strong> vornehmen, zum Kinderspiel. Ebenso kann man damit die meist kommentierten Beiträge als Mehrwert für den Leser recht einfach umsetzen.</p>
<pre><code class="php">
query_posts('posts_per_page=5&amp;offset=1&amp;orderby=comment_count');
if ( have_posts() ) :
	while ( have_posts() ) : the_post(); ?&gt;
</code></pre>
<p>Alternativ kann man beispielsweise auch <strong>via Zufall sortieren</strong> lassen; nützlich bei kleinen Gimmicks in der Sidebar; auch dazu ein Beispiel mit anderer Syntax.</p>
<pre><code>
&lt;?php
$i = new WP_Query( array('category_name' =&gt; 'referenzen', 'showposts' =&gt; 10, 'nopaging' =&gt; 0, 'post_status' =&gt; 'publish', 'caller_get_posts' =&gt; 1, 'orderby' =&gt; 'rand') );
if ( $i-&gt;have_posts() ) : ?&gt;
</code></pre>
<p>Ebenso kann man seit Version 2.8 von WordPress die Sortierung deaktivieren - <code>orderby=none</code>.</p>
<p>Viele weitere Tipps gibt es in einem <a href="http://bueltge.de/wordpress-query-quick-tipps/717/">Quick Tipp</a> von mir und natürlich im <a href="http://codex.wordpress.org/Template_Tags/query_posts">Codex</a> von WordPress.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/beitragsausgabe-abhaengigkeit-kommentare/1081/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/beitragsausgabe-abhaengigkeit-kommentare/1081/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-19.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-19.jpg" medium="image">
			<media:title type="html">WP Adventskalender 19</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Post Thumbnail und die Abwärtskompatibilität</title>
		<link>http://bueltge.de/wordpress-post-thumbnail-abwaertskompatibel/1079/</link>
		<comments>http://bueltge.de/wordpress-post-thumbnail-abwaertskompatibel/1079/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 08:09:51 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1079</guid>
		<description><![CDATA[WordPress bringt mit Version 2.9 die wohl am meisten diskutierte Funktion des Post Thumbnails in das System. Für windige Theme-Autoren war das auch im Vorfeld kein Thema und trotzdem wird sie geliebt. Wichtig bei dieser Funktion, sie geht nur, wenn man sie explizit im Theme aktiviert. Dies macht der folgenden kleine Schnipsel in der functions.php des Themes: add_theme_support('post-thumbnails');.

Aber auch bei dieser Funktion sollte man auf das Vorhandensein der Funktion prüfen und eine Alternative anbieten. Nur so kann man dem Nutzer die Freiheit der WordPress Version überlassen. Die Funktionen von Erweiterungen, Plugins und Themes gehröen einer Prüfung unterzogen; so ist die Funktion des Themes abgesichert, auch wenn eine Funktion nicht zur Verfügung steht. Ähnlich sehe ich es mit dieser Funktion für die Thumbnails zum Beitrag, auch wenn sie Funktionen aus dem Core nutzen.

Zwei Anregungen für Alternativen möchte ich im folgenden kurz aufzeigen und ich verweise auf den ausführlichen Artikel zum Thema Bilder in Themes mit Benutzerdef. Feldern oder der Mediathek von WordPress nutzen.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-18.jpg" alt="WP Adventskalender 18" /><br />
WordPress bringt mit <a href="http://codex.wordpress.org/Version_2.9">Version 2.9</a> die wohl am meisten diskutierte Funktion des Post Thumbnails in das System. Für windige Theme-Autoren war das auch im Vorfeld kein Thema und trotzdem wird sie geliebt. Wichtig bei dieser Funktion, sie geht nur, wenn man sie explizit im Theme aktiviert. Dies macht der folgenden kleine Schnipsel in der functions.php des Themes: <code>add_theme_support('post-thumbnails');</code>.</p>
<p>Aber auch bei dieser Funktion sollte man auf das Vorhandensein der Funktion prüfen und eine Alternative anbieten. Nur so kann man dem Nutzer die Freiheit der WordPress Version überlassen. Die Funktionen von Erweiterungen, Plugins und Themes gehröen einer Prüfung unterzogen; so ist die Funktion des Themes abgesichert, auch wenn eine Funktion nicht zur Verfügung steht. Ähnlich sehe ich es mit dieser Funktion für die Thumbnails zum Beitrag, auch wenn sie Funktionen aus dem Core nutzen.</p>
<p>Zwei Anregungen für Alternativen möchte ich im folgenden kurz aufzeigen und ich verweise auf den ausführlichen <a href="http://bueltge.de/wordpress-attachment-metadaten-nutzen/625/">Artikel zum Thema Bilder in Themes mit Benutzerdef. Feldern oder der Mediathek von WordPress nutzen</a>.<br />
<span id="more-1079"></span></p>
<p>Nach Hinzufügen der folgenden Syntax in der <code>functions.php</code> des Themes steht die MetaBox im Bereich Schreiben eines Beitrags bzw. Seite bereit und kann einfach via Aufruf der Mediathek aus dieser MetaBox genutzt werden.</p>
<pre><code class="php">
if ( function_exists('add_theme_support') )
	add_theme_support('post-thumbnails');
</code></pre>
<p>Alternativ kann man zwischen Beiträgen und Seiten trennen:</p>
<pre><code>
add_theme_support( 'post-thumbnails', array( 'post' ) ); //Beiträge
add_theme_support( 'post-thumbnails', array( 'page' ) ); //Seiten
</code></pre>
<p>Man kann im übrigen auch Größen definieren, zum einen direkt für Thumbnails ...</p>
<pre><code>
set_post_thumbnail_size( 150, 150, true ); // Breite, Höhe, true für kein crop mode; beschneiden
</code></pre>
<p>... und ebenso andere Größen, in dem man zusätzlich einen Namen vergibt. Im obigen Code ist der Standard-Name <code>post-thumbnail</code> übergeben.</p>
<pre><code>
add_image_size('my-single-picture', 150, 150, false);
</code></pre>
<p>Die Ausgabe des Bildes wird dann im Theme an der Stelle, wo es erscheinen soll, einfach mit Hilfe des Template Tag erzeugt: <code>the_post_thumbnail()</code>.</p>
<pre><code class="php">
if ( current_theme_supports( 'post-thumbnails' ) )
	the_post_thumbnail( array(300,200) );
</code></pre>
<p>Alternativ kann man dann auch wieder die eigenen Typen abfragen:</p>
<pre><code>
the_post_thumbnail( 'my-single-picture' );
</code></pre>
<p>Wichtig, arbeitet man mit zusätzlichem Markup, dann gehört die Abfrage dazu, ob es denn ein Thumbnail zum Beitrag gibt. Ansonsten wird unnötig Markup ausgegeben, welches keinen Inhalt hat.</p>
<pre><code class="php">
&lt;?php
if ( has_post_thumbnail() ) { ?&gt;
	&lt;span class="my_image"&gt;
		&lt;?php the_post_thumbnail(array(600, 400)); ?&gt;
	&lt;/span&gt;
} ?&gt;
</code></pre>
<p>Um nun aber eine Alternative für Installationen kleiner WP 2.9 zu haben, kann man verschiedene Ansätze gehen. Die zwei folgenden Beispiele sind daher als Ideengeber zu verstehen: entweder mit Hilfe der benutzerdefinierten Felder, Feldname ist <code>post-image</code> ...</p>
<pre><code class="php">
if ( function_exists('has_post_thumbnail') &amp;&amp; has_post_thumbnail() ) {
	the_post_thumbnail(); // @parameter: array(height, width)
} else {
	$myimage = get_post_meta($post-&gt;ID, 'post-image', true); // via custom field
	if ($myimage) {
		echo '&lt;img class="wp-post-image" src="'.$postimage.'" alt="Post Iage" /&gt;';
	}
}
</code></pre>
<p>... oder im nachfolgenden Beispiel das erste Bild aus der Mediathek. Mehr dazu gibt es in <a href="http://bueltge.de/wordpress-attachment-metadaten-nutzen/625/">einem separaten Beitrag</a>.</p>
<pre><code class="php">
if ( function_exists('has_post_thumbnail') &amp;&amp; has_post_thumbnail() ) {
	the_post_thumbnail(); // @paramter: array(height, width)
} else {
	// via mediathek
	$attachments = get_children( array(
									'post_parent'    =&gt; get_the_ID(),
									'post_type'      =&gt; 'attachment',
									'numberposts'    =&gt; 1, // show all -1
									'post_status'    =&gt; 'inherit',
									'post_mime_type' =&gt; 'image',
									'order'          =&gt; 'ASC',
									'orderby'        =&gt; 'menu_order ASC'
									) );
	foreach ( $attachments as $attachment_id =&gt; $attachment ) {
		echo wp_get_attachment_image( $attachment_id );
	}
}
</code></pre>
<p><strong>Prüfen</strong> ob das Theme die Funktion unterstützt ist ebenso möglich:</p>
<pre><code class="php">
if ( current_theme_supports( 'post-thumbnails' ) ) {
	...
</code></pre>
<p>Zusätzlich kann man prüfen, ob das Theme die Funktion  unterstützt und explizit für Beiträge (post) oder Seiten (page) nutzen. Sehr interessant, wenn man zusätzliche Funktionen in den Schreiben-Bereich des Backend bringen möchte, welcher abhängig von diesem Feature innerhalb des Theme ist.:</p>
<pre><code class="php">
if ( current_theme_supports( 'post-thumbnails', array( 'page' ) ) ) {
	add_meta_box( ...
</code></pre>
<p>In diesem Zusammenhang kann man auch extern Dateien mit neuen Funktionen einbinden.</p>
<pre><code class="php">
require_if_theme_supports( 'post-thumbnails', ABSPATH . WPINC . '/my-post-thumbnail-funktion.php' );
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-post-thumbnail-abwaertskompatibel/1079/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-post-thumbnail-abwaertskompatibel/1079/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-18.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-18.jpg" medium="image">
			<media:title type="html">WP Adventskalender 18</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Loop, $post liefert</title>
		<link>http://bueltge.de/wordpress-loop-post-liefert/884/</link>
		<comments>http://bueltge.de/wordpress-loop-post-liefert/884/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 07:34:47 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Post]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=884</guid>
		<description><![CDATA[Ab und an kommt man nicht mit den Template Tags aus und man benötigt Inhalte aus dem $post-Array. Die folgende Liste ist eine kurze Referenz dieses Array. In dem Array findet man alle relevanten Inhalte zum Beitrag bzw. Seite, Attachments, Versionen eines Beitrags und andere Typen.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-17.jpg" alt="WP Adventskalender 17" /><br />
Ab und an kommt man nicht mit den Template Tags aus und man benötigt Inhalte aus dem <code>$post</code>-Array. Die folgende Liste ist eine kurze Referenz dieses Array. In dem Array findet man alle relevanten Inhalte zum Beitrag bzw. Seite, Attachments, Versionen eines Beitrags und andere Typen.</p>
<p>Ein kleines Beispiel soll das Nutzen verdeutlichen, so wie man es beispielsweise in einem Template des Themes nutzen würde.<br />
<span id="more-884"></span></p>
<pre><code class="php">
&lt;?php
if ( '' != $post-&gt;post_excerpt ) { ?&gt;
	&lt;div id=&quot;summary&quot;&gt;
		&lt;h3&gt;&lt;?php _e('Mein Auszug', 'my_textdomain'); ?&gt; #&lt;?php echo $post-&gt;ID; ?&gt;&lt;/h3&gt;
		the_excerpt();
	&lt;/div&gt;
&lt;?php } ?&gt;
</code></pre>
<p> Ebenso kann der Inhalt des Array eine wichtige Rolle in <a href="http://bueltge.de/wordpress-query-quick-tipps/717/">besonderen Queries</a> sein, da man dort den Zugriff explizit möchte.</p>
<pre><code class="php">
&lt;?php
$my_query = new WP_Query('post_status=future&amp;order=DESC&amp;showposts=5');
if ( $my_query-&gt;have_posts() ) {

    echo '&lt;h2&gt;'; _e('Vorgesehene Beitr&Atilde;&curren;ge', 'my_textdomain'); echo '&lt;/h2&gt;';
    echo '&lt;ul&gt;';

    while ( $my_query-&gt;have_posts() ) :
        $my_query-&gt;the_post();
        $do_not_duplicate = $post-&gt;ID;
        echo '&lt;li&gt;' . get_the_title() . __(' (erscheint am ') . get_the_time('d.m.Y') . __(')', 'my_textdomain') . '&lt;/li&gt;';
    endwhile; 

    echo '&lt;/ul&gt;';
}
?&gt;
</code></pre>
<ul>
<li><code>ID</code> ID des Beitrags</li>
<li><code>post_author</code> Liefert die ID des Autors</li>
<li><code>post_date</code> Veröffentlichungsdatum/ -zeit des Beitrags +/- Zeitzone des Blogs, Bsp.: 2009-12-17 10:37:48</li>
<li><code>post_date_gmt</code> Veröffentlichungsdatum/ -zeit, Bsp.: 2009-12-16 09:37:48</li>
<li><code>post_content</code> Inhalt des Beitrags (ohne <code>wpautop</code>-Filter etc.)</li>
<li><code>post_title</code> Titel des Beitrags</li>
<li><code>post_excerpt</code> Ausschnitt des Beitrags; nur wenn die Metabox gefüllt ist</li>
<li><code>post_status</code> Status des Beitrags</li>
<li><code>comment_status</code> Status der Kommentare (offen oder geschlossen)</li>
<li><code>ping_status</code> Status des Pin (<code>open</code> oder <code>closed</code>) </li>
<li><code>post_password</code> Passwort im Klartext, nur bei Seiten</li>
<li><code>post_name</code> Slug für den Permalink</li>
<li><code>to_ping</code> URL die via Trackback erreicht werden soll</li>
<li><code>pinged</code> Trackback-URL gesandt</li>
<li><code>post_modified</code> Zeitstempel der letzten Modifikation, Bsp.: 2009-12-17 17:16:34</li>
<li><code>post_modified_gmt</code> Zeitstempel der letzten Modifikation +/- Zeitzone des Blogs, Bsp.: 2009-12-17 16:16:34</li>
<li><code>post_content_filtered</code> Attachment zum Beitrag gefiltert</li>
<li><code>post_parent</code> Vorläufer des Beitrags</li>
<li><code>guid</code> URL des Beitrags</li>
<li><code>menu_order</code> Wert der Vorgabe für die Menu-Reihenfolge von Seiten</li>
<li><code>post_type</code> Type des Artikels; <code>any</code>, <code>attachment</code>, <code>page</code>, <code>post</code>, oder <code>revision</code></li>
<li><code>post_mime_type</code> Mime-Typ des Attachment, <a href="http://bueltge.de/dateitypen-fuer-die-mediathek-freigeben/1011/">siehe Typen</a></li>
<li><code>comment_count</code> Zähler der Kommentare</li>
<li><code>ancestors</code> Vorgänger-Beitrags IDs</li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-loop-post-liefert/884/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-loop-post-liefert/884/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-17.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-17.jpg" medium="image">
			<media:title type="html">WP Adventskalender 17</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Update Prüfung für Themes entfernen</title>
		<link>http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/</link>
		<comments>http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 07:09:40 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1076</guid>
		<description><![CDATA[Ich hatte das Thema hier schon mehrfach - der Update-Check von WordPress ist nicht in jedem Fall sinnvoll und kann Last kosten, die man anders gebrauchen kann. Ich klemme je nach Anforderung den Cron ab und via Hook sorge ich dafür, dass das Update auf diverse Themen nicht mehr läuft.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-16.jpg" alt="WP Adventskalender 16" /><br />
Ich hatte das Thema hier schon mehrfach (und in <a href="http://bueltge.de/wordpress-crons-loeschen/1070/">Türchen Nr. 12</a>) - der Update-Check von WordPress ist nicht in jedem Fall sinnvoll und kann Last kosten, die man anders gebrauchen kann. Ich klemme je nach Anforderung den Cron ab und via Hook sorge ich dafür, dass das Update auf diverse Themen nicht mehr läuft.</p>
<p><a href="http://markjaquith.wordpress.com/2009/12/14/excluding-your-plugin-or-theme-from-update-checks/">Mark Jaquith</a> stellt zwei sehr schöne Lösungen vor, wie man in Plugins und Themes als Autor den Update-check abklemmt. Viele Blogs nutzen Themes, welche selbst geschrieben sind, oder welche kein Update erhalten können. Insofern ist vor allem die Lösung für die Themes sehr nützlich.<br />
<span id="more-1076"></span><br />
Sie ist schnell in die <code>functions.php</code> des jeweiligen Themes integriert und so muss man sich nicht mehr in den Einstellungen des Blog darum kümmern. Gerade im Hinblick auf Themes für Kunden, welche sicher kein automatisches Update bekommen, ist diese kleine Funktion ein Mehrwert und gehört daher in die Arbeit aufgenommen.</p>
<pre><code>
function cws_hidden_theme_12345( $r, $url ) {
	if ( false !== strpos( $url, 'http://api.wordpress.org/themes/update-check' ) )
		return $r; // Not a theme update request. Bail immediately.
	
	$themes = unserialize( $r['body']['themes'] );
	unset( $themes[ get_option( 'template' ) ] );
	unset( $themes[ get_option( 'stylesheet' ) ] );
	$r['body']['themes'] = serialize( $themes );
	return $r;
}

add_filter( 'http_request_args', 'cws_hidden_theme_12345', 5, 2 );
</code></pre>
<p><a href="http://markjaquith.wordpress.com/2009/12/14/excluding-your-plugin-or-theme-from-update-checks/">Mark stellt in seinem Beitrag</a> ebenso eine Lösung für Plugins vor, die ich ebenso sinnvoll finde; gerade bei Plugins für explizite Kundenwünsche finde ich das wichtig und so kommt man auch nicht in Kollision, wenn es ein Plugin im SVN gibt/entsteht, was den gleichen Namen trägt.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-16.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-16.jpg" medium="image">
			<media:title type="html">WP Adventskalender 16</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Formatwechsel bei Google News-Sitemaps</title>
		<link>http://bueltge.de/formatwechsel-bei-google-news-sitemaps/1036/</link>
		<comments>http://bueltge.de/formatwechsel-bei-google-news-sitemaps/1036/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 08:02:33 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1036</guid>
		<description><![CDATA[Die Google News können eine wichtige Quelle für Besucher sein, den Traffic steigern und die Wertsteigerung der Site enorm beeinflussen.
In den letzten Wochen hat Google das Format der News Sitemap erweitert und fordert alle Sites auf, die Inhalte in die News von Google einspeisen dürfen, diese neue Format zu übernehmen. Da ich in der Vergangenheit ein Plugin und eine Datei für das Root bereit gestellt habe, stelle ich nun eine neue Version zur Verfügung und denke, dass ich damit einige Anfragen in meinem Postkasten eliminieren kann.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-15.jpg" alt="WP Adventskalender 15" /><br />
Die Google News können eine wichtige Quelle für Besucher sein, den Traffic steigern und die Wertsteigerung der Site enorm beeinflussen.<br />
In den letzten Wochen hat Google das Format der News Sitemap erweitert und fordert alle Sites auf, die Inhalte in die News von Google einspeisen dürfen, diese neue Format zu übernehmen.<br />
Da ich in der Vergangenheit ein Plugin und eine Datei für das Root bereit gestellt habe, stelle ich nun eine neue Version zur Verfügung und denke, dass ich damit einige Anfragen in meinem Postkasten eliminieren kann.<br />
<span id="more-1036"></span></p>
<ul>
<li><a href="http://www.google.com/support/news_pub/bin/answer.py?hl=de&#038;answer=161989">Häufig gestellte Fragen zum Formatwechsel bei Google News-Sitemaps</a></li>
<li><a href="http://www.google.com/support/news_pub/bin/answer.py?hl=de&#038;answer=74288">Das neue Format</a>
<pre><code class="xml">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;urlset xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;
        xmlns:n=&quot;http://www.google.com/schemas/sitemap-news/0.9&quot;&gt;
  &lt;url&gt;
    &lt;loc&gt;http://www.example.org/business/article55.html&lt;/loc&gt;
    &lt;n:news&gt;
      &lt;n:publication&gt;
        &lt;n:name&gt;The Example Times&lt;/n:name&gt;
        &lt;n:language&gt;en&lt;/n:language&gt;
      &lt;/n:publication&gt;
      &lt;n:access&gt;subscription&lt;/n:access&gt;
      &lt;n:genres&gt;pressrelease, blog&lt;/n:genres&gt;
      &lt;n:publication_date&gt;2008-12-23&lt;/n:publication_date&gt;
      &lt;n:title&gt;Companies A, B in Merger Talks&lt;/n:title&gt;
      &lt;n:keywords&gt;business, merger, acquisition, A, B&lt;/n:keywords&gt;
      &lt;n:stock_tickers&gt;NASDAQ:A, NASDAQ:B&lt;/n:stock_tickers&gt;
    &lt;/n:news&gt;
  &lt;/url&gt;
&lt;/urlset&gt;
</code></pre>
</li>
<li><a href="http://bueltge.de/google-news-quelle-mit-wordpress-werden/836/">Plugin und Root-Lösung</a><br />
Hintergründe und die beiden Lösungen findet ihr auf der zugehörigen Seite, die ich erweitert habe und wo man das Plugin und die Datei für das Root downloaden kann.</li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/formatwechsel-bei-google-news-sitemaps/1036/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/formatwechsel-bei-google-news-sitemaps/1036/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-15.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-15.jpg" medium="image">
			<media:title type="html">WP Adventskalender 15</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Mailing Liste via WordPress-Hook</title>
		<link>http://bueltge.de/mailing-liste-via-wordpress-hook/1071/</link>
		<comments>http://bueltge.de/mailing-liste-via-wordpress-hook/1071/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 07:50:58 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[eMail]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1071</guid>
		<description><![CDATA[WordPress besitzt die Pluginschnittstelle auf Basis der Hooks und so steht ebenso ein Hook zur Verfügung, der es ermöglicht etwas zu tun, wenn ein Beitrag veröffentlicht wird. Dieser Hook stellt sehr schön dar, was man alles mit Hooks machen kann und so wähle ich mal als Beispiel das Versenden von Mails mit Hilfe von WordPress, wenn es einen neuen Beitrag gibt.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-14.jpg" alt="WP Adventskalender 14" /><br />
WordPress besitzt die Pluginschnittstelle auf Basis der Hooks und so steht ebenso ein Hook zur Verfügung, der es ermöglicht etwas zu tun, wenn ein Beitrag veröffentlicht wird. Dieser Hook stellt sehr schön dar, was man alles mit Hooks machen kann und so wähle ich ihn mal als Beispiel für das Versenden von Mails mit Hilfe von WordPress, wenn es einen neuen Beitrag gibt.<br />
<span id="more-1071"></span><br />
Die folgende Syntax stellt nur den kleinsten Anteil dar, muss in vielen Bereichen an die Bedürfnisse angepasst werden und soll nur die Möglichkeiten des Hook darstellen.</p>
<pre><code>
function send_mail($post_ID) {
	
	$to = 'example@mail.com, beisiel@eexample-mail.net';
	$subject = 'Mein Betreff';
	$message = 'Es gibt einen neuen Beitrag (' . get_permalink($post_ID) . ') in meinem Blog: ' . get_bloginfo('name');
	
	wp_mail( $to, $text, $message );
	return $post_ID;
}

add_action( 'publish_post', 'send_mail' );
</code></pre>
<p>Alternativ kann man eine Funktion auch anstoßen, wenn ein Kommentar veröffentlicht wurde.<br />
<code>add_action( 'comment_post', 'send_mail' );</code><br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/mailing-liste-via-wordpress-hook/1071/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/mailing-liste-via-wordpress-hook/1071/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-14.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-14.jpg" medium="image">
			<media:title type="html">WP Adventskalender 14</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Sprachschlüssel des WordPress-Feed richtig setzen</title>
		<link>http://bueltge.de/sprachschluessel-wordpress-feed/1067/</link>
		<comments>http://bueltge.de/sprachschluessel-wordpress-feed/1067/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 07:35:41 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1067</guid>
		<description><![CDATA[Mit Hilfe des Sprachschlüssel kann nicht nur das Blog ausgezeichnet werden, sondern auch der Feed. Auch WordPress hat dafür eine Option vorgesehen; gibt dem Anwender aber keine einfache Möglichkeit der Pflege in die Hand.
Sinnvoll ist es aber, den Schlüssel nach dem Codec zu setzen und daher hier einige Möglichkeiten das zu tun.
]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-13.jpg" alt="WP Adventskalender 13" /><br />
Mit Hilfe des Sprachschlüssel kann nicht nur das Blog ausgezeichnet werden, sondern auch der Feed: <code>&lt;language&gt;en&lt;/language&gt;</code>.<br />
Auch WordPress hat dafür eine Option vorgesehen; gibt dem Anwender aber keine einfache Möglichkeit der Pflege in die Hand.<br />
Sinnvoll ist es aber, den Schlüssel nach dem Codec zu setzen und daher hier einige Möglichkeiten das zu tun.<br />
<span id="more-1067"></span></p>
<h3>Via Datenbank</h3>
<p>Direkt in der Datenbank den Schlüssel (<code>option_name</code>) <code>rss_language</code> suchen und den Wert deiner Sprache pflegen, zum Beispiel <code>de</code>. Die Schlüsselwerte findet man beispielsweise auf <a href="http://www.rssboard.org/rss-language-codes#table">dieser Seite</a>.</p>
<h3>Via Hook</h3>
<p>Alternativ kann man das ganze auch mit Hilfe einer Funktion von WordPress setzen. Dazu genügt folgender Syntax, einfach in der <code>functions.php</code> des Themes abgelegt und ein Aufruf des Admin oder Frontend genügt; einmalig reicht um den Wert zu setzen. Danach kann der Code wieder aus dem Template entfernt werden.</p>
<pre><code>
function update_rss_language() {
	update_option( 'rss_language', 'de' );
}
add_action( 'admin_init', 'update_rss_language' );
</code></pre>
<h3>Komfortabel in den Einstellungen</h3>
<p>Die letzte Möglichkeit ist ein wenig komfortabler und legt ein weiteres Feld im Bereich der <em>Einstellungen - Lesen</em> ab. Dort gibt es nun ein weiteres Feld, welches es erlaubt, den Wert zu pflegen.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/wp-rss-language.png" alt="Neue Option für RSS Language" /></p>
<p>Der folgende Code muss dazu in einem Plugin oder in der <code>functions.php</code> des aktiven Themes abgelegt werden. Aktuell habe ich mal den Code inkl. der Kommentare abgelegt, so dass man es direkt als Plugin nutzen kann; copy/paste in eine PHP-Datei und in den Ordner <code>wp-content/plugins</code> kompieren. Im Anschluss kann man das Plugin im Backend von WordPress aktivieren.</p>
<pre><code class="php">
&lt;?php

/*
Plugin Name: RSS Language
Plugin URI: http://bueltge.de/wp-landingsites-de-plugin/181/
Description: Add options field for rss language
Version: 1.0
Author: Frank B&amp;uuml;ltge
License: GNU
Author URI: http://bueltge.de/
*/

function rss_language_string() {
	?&gt;
	&lt;input name=&quot;rss_language&quot; type=&quot;text&quot; id=&quot;rss_language&quot; value=&quot;&lt;?php form_option('rss_language'); ?&gt;&quot; class=&quot;regular-text&quot; /&gt;
	&lt;span class=&quot;description&quot;&gt;&lt;?php _e('RSS supports multiple languages through the language element, which contains a short code that identifies that the natural language employed in the channel. See on this table for your &lt;a href=&quot;http://www.rssboard.org/rss-language-codes#table&quot;&gt;language codes&lt;/a&gt;.'); ?&gt;&lt;/span&gt;
	&lt;?php
}

function rss_language_admin_init() {
	register_setting( 'reading', 'rss_language' );
	add_settings_field( 'rss_language', __('RSS Language Code'), 'rss_language_string', 'reading');
}
add_action( 'admin_init', 'rss_language_admin_init' );

?&gt;
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/sprachschluessel-wordpress-feed/1067/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/sprachschluessel-wordpress-feed/1067/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-13.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-13.jpg" medium="image">
			<media:title type="html">WP Adventskalender 13</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/wp-rss-language.png" medium="image">
			<media:title type="html">Neue Option für RSS Language</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Crons löschen</title>
		<link>http://bueltge.de/wordpress-crons-loeschen/1070/</link>
		<comments>http://bueltge.de/wordpress-crons-loeschen/1070/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 08:09:30 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1070</guid>
		<description><![CDATA[Der eine oder andere benötigt nicht immer alle automatischen Abläufe von WordPress. So hat beispielsweise der Cron zum Prüfen des Update eines Themes dann keine Relevanz, wenn man ein eigen gestricktes Theme nutzt. In diesem Zusammenhang kann man daher die Ressource sicher frei geben und dies geht recht schnell.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-12.jpg" alt="WP Adventskalender 12" /><br />
Der eine oder andere benötigt nicht immer alle automatischen Abläufe von WordPress. So hat beispielsweise der Cron zum Prüfen des Update eines Themes dann keine Relevanz, wenn man ein eigen gestricktes Theme nutzt. In diesem Zusammenhang kann man daher die Ressource sicher frei geben und dies geht recht schnell.<br />
<span id="more-1070"></span><br />
Zum einen hier der Hinweis auf das Plugin <a href="http://www.scompt.com/projects/wp-crontrol">WP-Crontrol</a>, mit dem man die Crons in WordPress sehr schöne einsehen und steuern kann. Ebenso der Hinweis auf einen <a href="http://playground.ebiene.de/2340/wordpress-cronjobs-bereinigen/">Artikel bei Sergej</a>, der das Plugin näher vorstellt.</p>
<p>Alternativ kann man den Cron direkt deaktivieren. Am Beispiel des Cron zum Prüfen für ein Update des Themes sieht das wie folgt aus.<br />
<code>wp_clear_scheduled_hook( 'wp_update_themes' );</code></p>
<p>Dies kann man auch für andere Cron-Schlüssel tun - <code>wp_update_plugins</code>, <code>wp_version_check</code>. Die Schlüssel findet man in der Datenbank, Tabelle <code>options</code>, Eintrag <code>cron</code>, oder übersichtlich mit dem oben genannten Plugin WP-Control. Die Syntax gehört in ein Plugin oder die <code>functions.php</code> des Themes. Wird der Code wieder entfernt, dann aktiviert WordPress den jeweiligen Cron wieder.</p>
<p>Diese Lösung sorgt dafür, dass die Crons nicht mehr laufen. Um die Funktionen für die Updates ebenfalls raus zu nehmen, verweise ich auf einen <a href="http://bueltge.de/wordpress-27-offline-nutzen/710/">älteren Beitrag zum Thema</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-crons-loeschen/1070/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-crons-loeschen/1070/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-12.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-12.jpg" medium="image">
			<media:title type="html">WP Adventskalender 12</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Ausgabe nur bei älteren WordPress-Artikeln</title>
		<link>http://bueltge.de/ausgabe-aeltere-wordpress-artikeln/1073/</link>
		<comments>http://bueltge.de/ausgabe-aeltere-wordpress-artikeln/1073/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 07:24:09 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Conditional Tag]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1073</guid>
		<description><![CDATA[Perun beschreibt einen Weg, wie man mit Hilfe eines Plugin die Anforderung erfüllt, dass die Werbung nur dann gezeigt wird, wenn der Artikel ein bestimmtes Alter erreicht hat. Wer nicht auf ein Plugin zurück greifen will und sich damit schnell in eine Abhängigkeit begibt, dem sei folgende kleine Lösung empfohlen.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-11.jpg" alt="WP Adventskalender 11" /><br />
<a href="http://www.perun.net/2009/12/10/wordpress-werbung-nur-fuer-aeltere-artikel-und-suchmaschinen-besucher/">Perun</a> beschreibt einen Weg, wie man mit Hilfe eines Plugin die Anforderung erfüllt, dass die Werbung nur dann gezeigt wird, wenn der Artikel ein bestimmtes Alter erreicht hat. Wer nicht auf ein Plugin zurück greifen will und sich damit schnell in eine Abhängigkeit begibt, dem sei folgende kleine Lösung empfohlen.<br />
<span id="more-1073"></span><br />
Die Conditional Tags von WordPress sind ein nützliches Mittel für diverse Abfragen und so kann man sich auch eigene Funktionen erstellen, die die gleich Aufgabe übernehmen. Die folgenden kleine Funktion gehört in die <code>functions.php</code> des Themes und kann dann überall benutzt werden.</p>
<pre><code>
function is_old_post($days = 5) {
	$days = (int) $days;
	$offset = $days*60*60*24;
	if ( get_post_time() &lt; date('U') - $offset )
		return true;
	
	return false;
}
</code></pre>
<p>Der neue &#8222;Conditional Tag&#8220; kann dann beispielsweise wie folgt genutzt werden.</p>
<pre><code>
if ( is_old_post() ) {
	// tue etwas, wenn der Beitrag so alt ist
} else {
	// tue etwas, wenn der Beitrag nicht so alt ist
}
</code></pre>
<p>Die Funktion nutzt als Standard 5 Tage und kann mit Hilfe des Parameters angepasst werden. So ergeben sich verschiedene Möglichkeiten um eine Abfrage zu starten und das Alter des Beitrags zu nutzen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/ausgabe-aeltere-wordpress-artikeln/1073/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/ausgabe-aeltere-wordpress-artikeln/1073/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-11.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-11.jpg" medium="image">
			<media:title type="html">WP Adventskalender 11</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
	</channel>
</rss>

