<?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; WordPress</title>
	<atom:link href="http://bueltge.de/tag/wordpress/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>Mon, 06 Feb 2012 12:19:43 +0000</lastBuildDate>
	<language>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>33</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>Einschränken der Daten-typen im WordPress Upload</title>
		<link>http://bueltge.de/einschraenken-der-daten-typen-im-wordpress-upload/1338/</link>
		<comments>http://bueltge.de/einschraenken-der-daten-typen-im-wordpress-upload/1338/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 12:16:22 +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[mediathek]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1338</guid>
		<description><![CDATA[Der Upload von Dateien in WordPress kann eingeschränkt oder erweitert werden, wie erklärt der Beitrag.]]></description>
			<content:encoded><![CDATA[<p>WordPress hat mit Version 3.3 die Mediathek verändert - verbessert. Die Restriktionen im Bezug auf die Datei-Typen sind geblieben und man kann auf diese via Hook einwirken. So kann man in der Anwendungen die Datei-Typen einschränken und erweitern. Mittels zweier Hooks ist dies schnell getan und dabei ist noch ein Hinweis in der Oberfläche dabei, der die erlaubten Typen bekannt gibt.<br />
<span id="more-1338"></span><br />
<a href="http://wpengineer.com/wp-content/uploads/restrict-mime-type.png"><img src="http://wpengineer.com/wp-content/uploads/restrict-mime-type-300x187.png" alt="Screenshot Example for restrive the mime type" title="restrict-mime-type" width="300" height="187" class="aligncenter size-medium wp-image-2370" /></a></p>
<p>Das folgenden kleine Plugin soll als erste Lösung und dem Verständnis dienen. Dies kann selbstredend auf verschiedene Rollen oder Berechtigungsobjekte ausgedehnt werden, so dass man je nach Rolle verschiedene Typen von Dateien im System hoch laden kann - <a href="http://bueltge.de/search/current_user_can" title="Alle Artikel dazu in meinem Blog"><code>current_user_can()</code></a>.<br />
Wer sich für die aktuell erlaubten Typen interessiert, läßt sich das Array der ersten Funktion zurück geben oder schaut in die function <code>get_allowed_mime_types()</code> in <code>wp-includes/functions.php</code>.</p>
<p><a href="http://wpengineer.com/wp-content/uploads/restrict-mime-type-hint.png"><img src="http://wpengineer.com/wp-content/uploads/restrict-mime-type-hint-300x65.png" alt="Screenshot for Hint about allowed Mime Types" title="restrict-mime-type-hint" width="300" height="65" class="aligncenter size-medium wp-image-2371" /></a></p>
<pre><code>
&lt;?php
/**
 * Plugin Name: Restrict mime types
 * Plugin URI:  http://wpengineer.com/?p=2369
 * Description: Restrict list of allowed mime types and file extensions.
 * Version:     1.0.0
 * License:     GPLv3
 * Author:      Frank B&amp;uuml;ltge
 * Author URI:  http://bueltge.de/
 */

 // This file is not called from WordPress. We don't like that.
! defined( 'ABSPATH' ) and exit;

// If the function exists this file is called as upload_mimes.
// We don't do anything then.
if ( ! function_exists( 'fb_restrict_mime_types' ) ) {

	add_filter( 'upload_mimes', 'fb_restrict_mime_types' );
	/**
	 * Retrun allowed mime types
	 *
	 * @see     function get_allowed_mime_types in wp-includes/functions.php
	 * @param   array Array of mime types
	 * @return  array Array of mime types keyed by the file extension regex corresponding to those types.
	 */
	function fb_restrict_mime_types( $mime_types ) {

		$mime_types = array(
			'pdf' =&gt; 'application/pdf',
			'doc|docx' =&gt; 'application/msword',
		);

		return $mime_types;
	}
}

// If the function exists this file is called as post-upload-ui.
// We don't do anything then.
if ( ! function_exists( 'fb_restrict_mime_types_hint' ) ) {
	// add to wp
	add_action( 'post-upload-ui', 'fb_restrict_mime_types_hint' );
	/**
	 * Get an Hint about the allowed mime types
	 *
	 * @return  void
	 */
	function fb_restrict_mime_types_hint() {

		echo '&lt;br /&gt;';
		_e( 'Accepted MIME types: PDF, DOC/DOCX' );
	}
}
</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/einschraenken-der-daten-typen-im-wordpress-upload/1338/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/einschraenken-der-daten-typen-im-wordpress-upload/1338/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/restrict-mime-type-300x187.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/restrict-mime-type-300x187.png" medium="image">
			<media:title type="html">restrict-mime-type</media:title>
		</media:content>
		<media:content url="http://wpengineer.com/wp-content/uploads/restrict-mime-type-hint-300x65.png" medium="image">
			<media:title type="html">restrict-mime-type-hint</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>Trenne Logik von der Ausgabe, mittels Hooks in WordPress</title>
		<link>http://bueltge.de/trenne-logik-von-der-ausgabe-mittels-hooks-in-wordpress/1335/</link>
		<comments>http://bueltge.de/trenne-logik-von-der-ausgabe-mittels-hooks-in-wordpress/1335/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 08:19:14 +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[Entwicklung]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1335</guid>
		<description><![CDATA[MVC im Bezug auf WordPress und der Umgang mit Filtern um dem Ansatz von MVC zu folgen; ein kleiner Ausblick und Lösungsansatz zum Nachdenken.]]></description>
			<content:encoded><![CDATA[<p>Sobald innerhalb einer Funktion HTML für die Ausgabe definiert wird, muss das HTML von der Logik getrennt werden! In diesem Fall wird die Funktion doppelt definiert. Eine Funktion enthält ausschließlich Logiken und gibt Werten nur als return zurück. Die zweite Funktion enthält dann HTML, Prüflogik, Schleifen oder Hooks und gibt Werte als echo aus. Ok die Schlaueren werden jetzt sagen ey <a href="http://de.wikipedia.org/wiki/Model_View_Controller">MVC</a>, ich sage völlig richtig, aber WordPress verfolgt kein Konsequentes MVC-Pattern!<br />
<span id="more-1335"></span></p>
<h4>Warum WordPress kein MVC-Pattern konsequent verfolgt?</h4>
<p>Betrachteten wir WordPress auf eine beschränkte Sichtweise, kann man ein MVC-Pattern erkennen. Durch die Trennung der Themes (view) vom Core (Model) wird der Eindruck erweckt WordPress verfolgt ein MVC-Pattern. Aber dieses Muster ist nur im Fontend zu finden. Schauen wir allerdings etwas genauer hin sehen wir das es keine solche Logik für den Adminbereich gibt. Also muss die View für den Adminbereich irgendwo im Core verankert sein. Wir können auch feststellen das im Core selbst lose SQL-Query innerhalb von PHP zu finden ist. Gut, eine allgemeine Trennung von Ansicht und Logik ist nicht gleich MVC. Ein MVC-Pattern geht prinzipiell von einer Art objektorientierten Programmier-Paradigma aus, in WordPress sind diese auch vereinzelt zu finden, aber wir finden viel mehr prozedurale Programmier-Paradigmen als objektorientierte. Fazit WordPress selbst verfolgt kein MVC-Pattern, aber es ist durchaus möglich MVC-Prinziepien, wie im folgernden an zuwenden. </p>
<pre><code class="php">
function get_some_foo() {
	$my_foo = 'This is Foo!';
	return $my_foo;
}

function some_foo() {
	$foo = get_some_foo();
	echo $foo;
}
</code></pre>
<p>Warum ist das Sinnvoll? Wir wollen das die Funktion <code>some_foo()</code> eine vordefinierte Ausgaben zurückliefert. In einem anderen Template wollen wir aber das vordefinierte Verhalten der Funktion <code>some_foo()</code> verändern. Um nun beiden Anforderungen effektiv abzubilden, werden zwei Funktionen definiert. Die erste Funktion besteht einzig aus der elementaren Logik und gibt nur Werte als return zurück, ihr wird immer ein <code>get_…</code> vorangestellt. Die zweite Funktion enthält vordefinierte Darstellungsinformationen, das wiederum können HTML, Prüflogik, Schleifen oder ein Hook sein.</p>
<pre><code class="php">
function get_some_foo() {
	$foo_bar_array = array( 'Foo', 'Bar', 'FooBar', 'BarFoo' );
	$foo_bar_array = apply_filters( 'some_foo_array', $foo_bar_array );

	return $foo_bar_array ;
}

function some_foo() {
    $foo_list = '&lt;ul&gt;'; 

    foreach( get_some_foo() as $foo_key =&gt; $foo_value ){
		$foo_list .= '&lt;li&gt;' . $foo_value . '&lt;/li&gt;';
    }

    $foo_list .= '&lt;/ul&gt;';

    echo apply_filters( 'some_foo', $foo_list );
}
</code></pre>
<p>Im vorherigen Beispiel wird in jeder der beiden Funktionen mit der Funktion <a href="http://codex.wordpress.org/Function_Reference/apply_filter"><code>apply_filters()</code></a> die möglichkeiten geschaffen, zurückgeliferte Werte später beliebig zu verändern. Eine Manipulation kann dann über die so definierten Hooks <code>some_foo_arra</code> oder <code>some_foo</code> erfolgen. Hier noch ein Beispiel, wie eine möglich Manipulation mit den beiden defineirten Hooks aussehen kann. </p>
<p>Im nächsten Code-Beispiel werden wir ein Array <code>$foo_bar_array</code> und das HTML von der Ausgbe Verändern. Dazu werden die beiden Hooks <code>some_foo_array</code> und <code>some_foo</code>, die mit <code>apply_filters( 'some_foo' ...</code> festgelegt wurden genutzt. Mit der Funktion <a href="http://codex.wordpress.org/Function_Reference/add_filter"><code>add_filter()</code></a> werden Filterfunktionen zur Weiterverarbeitung in der globalen Variable <code>$wp_filter</code> registriert.</p>
<pre><code class="php">
function get_my_some_foo( $foo_bar_array ) {
	$foo_bar_array[ count( $foo_bar_array ) + 1 ] = 'FuuBoo';

	return $foo_bar_array ;
}

function my_some_foo( $foo_list ) {
    $foo_list = str_replace( 'ul', 'ol', $foo_list ); 

    return $foo_list;
}

add_filter( 'some_foo_array', 'get_my_some_foo');
add_filter( 'some_foo', 'my_some_foo');

// do not forget, call some_foo()
some_foo();
</code></pre>
<p>Schauen wir uns noch kurz an was das ganze nun bewirkt. Was <code>some_foo()</code> ohne Manipulieren ausgibt sehen wir im folgenden Beispiel.</p>
<pre><code class="php">
function get_some_foo() {
	$foo_bar_array = array( 'Foo', 'Bar', 'FooBar', 'BarFoo' );
	$foo_bar_array = apply_filters( 'some_foo_array', $foo_bar_array );

	return $foo_bar_array ;
}

function some_foo() {
    $foo_list = '&lt;ul&gt;'; 

    foreach(get_some_foo() as $foo_key =&gt; $foo_value){
		$foo_list .= '&lt;li&gt;' . $foo_value . '&lt;/li&gt;';
    }

    $foo_list .= '&lt;/ul&gt;';

    echo apply_filters( 'some_foo', $foo_list );
}
?&gt; 

//Ausgabe
&lt;ul&gt;
	&lt;li&gt;Foo&lt;/li&gt;
	&lt;li&gt;Bar&lt;/li&gt;
	&lt;li&gt;FooBar&lt;/li&gt;
	&lt;li&gt;BarFoo&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p>Im nächsten Beispiel nutzen wir die in den Funktionen definierten Hooks <code>some_foo_array</code> und <code>some_foo</code> um dem Array ein weiteres Element hinzuzufügen und aus der ungeordneten Liste eine geordnete Liste zu machen.</p>
<pre><code class="php">
function get_my_some_foo( $foo_bar_array ) {
	$foo_bar_array[ count( $foo_bar_array ) + 1 ] = 'FuuBoo';

	return $foo_bar_array ;
}

function my_some_foo( $foo_list ) {
    $foo_list = str_replace( 'ul', 'ol', $foo_list ); 

    return $foo_list;
}

// register Hooks in the stack ($wp_filter)
add_filter( 'some_foo_array', 'get_my_some_foo');
add_filter( 'some_foo', 'my_some_foo');
?&gt;

//output
&lt;ol&gt;
	&lt;li&gt;Foo&lt;/li&gt;
	&lt;li&gt;Bar&lt;/li&gt;
	&lt;li&gt;FooBar&lt;/li&gt;
	&lt;li&gt;BarFoo&lt;/li&gt;
	&lt;li&gt;FuuBoo&lt;/li&gt;
&lt;/ol&gt;
</code></pre>
<p>Wie Läuft das jetzt mit dem <code>add_filter</code> und <code>apply_filters</code> im Programmfluss ab?<br />
Jeder Hook der ausgeführt werden soll wird mit <code>add_filter</code> oder <code>add_action</code> in der globalen Variable $<code>wp_filter</code> registriert. Wird nun im Programmablauf die Funktion <code>apply_filters()</code> aufgerufen wird anhand der übergeben Parameter die passende Filter-Funktion in der <code>$wp_filter</code> gesucht, wenn dieser mit <code>add_filter</code> dort registiert ist, wird die passende Funktion ausgeführt. Jetzt werden Werte Manipuliert und dann zurück an <code>apply_filters</code> übergeben.</p>
<p>Nehmen wir unser Beispiel von oben, dann sieht das wie folgt aus.</p>
<pre><code class="php">
&lt;?php
// the default function
function get_some_foo() {
	$foo_bar_array = array( 'Foo', 'Bar', 'FooBar', 'BarFoo' );
	$foo_bar_array = apply_filters( 'some_foo_array', $foo_bar_array );

	return $foo_bar_array ;
}

// the filter function
function get_my_some_foo( $foo_bar_array ) {
	$foo_bar_array[ count( $foo_bar_array ) + 1 ] = 'FuuBoo';

	return $foo_bar_array ;
}

// register function in $wp_filter
add_filter( 'some_foo_array', 'get_my_some_foo' );
?&gt;
</code></pre>
<p>Ohne Hook-Funktionalität würde das Ganze wie folgt aussehen. Wir haben hier zwar wesentlich weniger Code aber dieser ist dafür nicht flexibel oder wiederverwendbar.</p>
<pre><code class="php">
&lt;?php
//Das ist unsere default Funktion
function get_some_foo() {
	$foo_bar_array = array( 'Foo', 'Bar', 'FooBar', 'BarFoo' );
	$foo_bar_array[ count( $foo_bar_array ) + 1 ] = 'FuuBoo';

	return $foo_bar_array ;
}
?&gt;
</code></pre>
<div class="contentdiv">
<h4>Gastbeitrag</h4>
<p><img src="http://wpengineer.com/wp-content/uploads/rene-reimann-150x150.jpg" alt="Rene Reimann Avatar" width="73" height="73" class="alignleft" /><br />
Dieser Beitrag ist aus der Feder von Renè Reimann - <a href="http://www.die-pixler.de/">die-pixler.de</a> und ist ein Beitrag zum Adventskalender auf <a href="http://www.die-pixler.de/">wpengineer.com</a> zum Thema WordPress.</p>
<p>Vielen Dank auch hier nochmal von meiner Seite an <a href="https://plus.google.com/u/0/116520935691953756105/about" title="Renes G+ Profile">Renè</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/trenne-logik-von-der-ausgabe-mittels-hooks-in-wordpress/1335/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/trenne-logik-von-der-ausgabe-mittels-hooks-in-wordpress/1335/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/rene-reimann-150x150.jpg" />
		<media:content url="http://wpengineer.com/wp-content/uploads/rene-reimann-150x150.jpg" medium="image">
			<media:title type="html">Rene Reimann Avatar</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>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.<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>11</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/">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>1</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>2</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>3</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>WordPress Plugin für die Nutzung von Content-Bausteinen</title>
		<link>http://bueltge.de/wordpress-plugin-fuer-die-nutzung-von-content-bausteinen/1317/</link>
		<comments>http://bueltge.de/wordpress-plugin-fuer-die-nutzung-von-content-bausteinen/1317/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 20:45:59 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1317</guid>
		<description><![CDATA[Textbausteine, Code-Schnipesel, wiederkehrender Content kann mit Hilfe einer zentralen Verwaltung viel Ärger ersparen. Das Plugin Snippet ist für diese Aufgabe erstellt worden und soll hier kurz vorgestellt werden.]]></description>
			<content:encoded><![CDATA[<p><a href="http://wpplugins.com/plugin/281/snippets/" title="WP Pluign Snippet"><img class="alignright" src="http://bueltge.de/wp-content/images/wp/snippets-plugin.png" alt="Snippet Plugin" /></a><br />
Wer über den klassischen Content hinaus mit WordPress blogt bzw. jede erdenkliche Form von Inhalten publiziert, wird irgendwann an den Punkt kommen, wo wiederkehrende Inhalte benötigt werden, sei es im einfachsten Fall ein Bild bis hin zu komplexen Markup. Das Verbannen von lästigen Codeblöcken ist insbesondere dann interessant, wenn man diese Bausteine verschiedenen Usern zur Verfügung stellen will und wenn man sie zentral pflegen möchte. So können bestimmte Inhalte sicher gestellt werden, einmal an einer Stelle gepflegt werden und verschiedenen Anwendern zur Verfügung gestellt werden.<br />
<span id="more-1317"></span><br />
Für diese Anwendung ist das Plugin <a href="http://wpplugins.com/plugin/281/snippets/">Snippet</a> entstanden; es verwaltet Schnipsel in jeder erdenklicher Form und kann über verschiedene Mechanismen an unterschiedlicher Stelle eingesetzt werden. So kann via Shortcode, via PHP oder via Widget der Inhalt eingebunden werden. Der jeweilige Inhalt muss nicht eindeutig spezifiziert werden, es wird via ID auf den Inhalt zugegriffen. Der Shortcode und die ID werden direkt am Element dargestellt, so dass es keine Schwierigkeiten in der Nutzung geben sollte. </p>
<p><img src="http://bueltge.de/wp-content/images/snippet-meta-data.png" alt="" title="snippet-meta-data" width="285" height="179" class="aligncenter size-full wp-image-1318" /></p>
<p>Ebenso werden neue Berechtigungsobjekte angelegt, so dass man die Rechte der Schnipsel auf unterschiedliche Rollen verteilen kann. Über eine eigene Strukturierung mittels Taxonomie können die Schnipsel gefiltert werden.</p>
<p>Das Plugin ist mein erster Versuch im Bereich der Premiumplugins und gibt es schon länger, lediglich die Kurzvorstellung hier im Blog hat immer gefehlt und so hole ich dies mit diesem Artikel nach. Ideen und Hinweise sind sehr willkommen.</p>
<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-fuer-die-nutzung-von-content-bausteinen/1317/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-plugin-fuer-die-nutzung-von-content-bausteinen/1317/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/snippets-plugin.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/snippets-plugin.png" medium="image">
			<media:title type="html">Snippet Plugin</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/snippet-meta-data.png" medium="image">
			<media:title type="html">snippet-meta-data</media:title>
			<media:thumbnail url="http://bueltge.de/wp-content/images/snippet-meta-data-200x179.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>WordPress Custom Post Types in den Feed holen</title>
		<link>http://bueltge.de/wordpress-custom-post-types-in-den-feed-holen/1279/</link>
		<comments>http://bueltge.de/wordpress-custom-post-types-in-den-feed-holen/1279/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 09:54:31 +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[custom post type]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1279</guid>
		<description><![CDATA[Der Inhalt von Custom Post Types kann ebenso relevant sein und damit im Main-Feed gewollt sein, ein kleiner Schnipsel kann dies erledigen.]]></description>
			<content:encoded><![CDATA[<p>WordPress erstellt die Feed-Inhalte automatisch (optional in der Parameterübergabe der Funktion zu bestimmen) auch bei Verwendung der Custom Post Types; die sich recht stark in der Nutzung befinden.</p>
<p>Dabei werden aber die Inhalt nicht in den Standard-Feed geholt, sondern ein eigenständiger Feed entsteht. Um die Inhalte der CPT in den Haupt-Feed von WordPress zu holen, muss via Hook nur der CPT bekannt gegeben werden; am besten direkt im Plugin, welches sich um die CPT kümmert. Der folgenden kleine Schnipsel erledigt dies beispielsweise.<br />
Dabei werden in den Parametern nur einige Werte übergeben, die dafür sorgen, dass nur Artikel integriert werden, die öffentlich sind und die Recht von post haben; dies Parameter kann man natürlich anpassen; siehe Codex zur Funktion <a href="http://codex.wordpress.org/Function_Reference/get_post_types" title="Codex Doku"><code>get_post_types()</code></a>.<br />
<span id="more-1279"></span></p>
<pre><code>
// add custom post type to wp post-feed
add_action( 'request', 'fb_add_to_feed' );

// add to post-feed
function fb_add_to_feed ( $request ) {

	if ( isset( $request['feed'] ) &#038;& ! isset( $request['post_type'] ) ) {
		$request['post_type'] = get_post_types ( $args = array (
			'public'          =&gt; TRUE,
			'capability_type' =&gt; 'post'
		) );
	}

	return $request;
}
</code></pre>
<p>Damit werden dem Standard-Feed zu post die Daten übergeben; der Query dafür wird quasi verändert. Wenn es aber verschiedene CPTs gibt und man diese im Feed definieren will, dann muss der CPT übergeben werden, dazu Beispiel zwei ansehen.<br />
In diesem Schnipsel werden in einem Array die CPT definiert und damit an den Feed übergeben.</p>
<pre><code>
// add custom post type to wp post-feed
add_action( 'request', 'fb_add_to_feed' );

// add to feed
function fb_add_to_feed ( $request ) {

	if ( isset( $request['feed'] ) &#038;& ! isset( $request['post_type'] ) ) {
		$request['post_type'] = array(
			'post', 'stippet', 'archive', 'movies'
		);
	}

	return $request;
}
</code></pre>
<p>Der obige Schnipsel ändert den Query dahingehend, dass die Post Typen definiert werden, die im Feed sein sollen, während im ersten beispiel alles zum Feed addiert wird.<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-custom-post-types-in-den-feed-holen/1279/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-custom-post-types-in-den-feed-holen/1279/feed/</wfw:commentRss>
		<slash:comments>9</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>WordCamp 2011 - Eindrücke eines Getriebenen</title>
		<link>http://bueltge.de/wordcamp-2011-eindruecke-eines-getriebenen/1313/</link>
		<comments>http://bueltge.de/wordcamp-2011-eindruecke-eines-getriebenen/1313/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 21:31:33 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1313</guid>
		<description><![CDATA[Das WordCamp ist für jeden anders, meine Eindrücke im Fließtext in diesem Artikel.]]></description>
			<content:encoded><![CDATA[<p>WordPress ist ein Teil meines Alltags geworden, mit WordPress wurde auch das Nutzen des Webs aktiver; sei es als aktiver Entwickler - aus Spaß und Kundenwunsch - oder auch nur als kleines Teil in einem großen Netzwerk.<br />
Ich habe schon mehrfach die Aussage getroffen, wie ich sehr ich das Web schätze, dies liegt nicht allein an den Möglichkeiten und der schnellen Entwicklung, sondern eher an der Möglichkeit auf neue Leute zu treffen, die entweder gleiche Interessen haben oder sich irgendwo im Geiste mit mir treffen. Um dieses Netzwerk analog für mich zu bestätigen, sind zentrale Treffen eine wunderbare Sache. Und so ist für mich auch die Erwartung des WordCamp voll erfüllt; ich habe Leute getroffen, die ich zum Teil schon ewig kenne - gefühlt, nicht wirklich; das Netz bringt mir die Leute nah. Ich habe Leute getroffen, die für meine Artikel einfach mal Danke sagen, persönlich, ohne Spamschutz und mit direkter Nähe - einfach toll. Dafür liebe ich diese Camps, egal in welcher Form.<br />
Ich will in der Lobby sitzen, am besten dauerhaft, und nach und nach kommen die Leute hinzu, die mich ansprechen wollen, oder die ich suche - leider fehlt oft die Zeit dazu und da ich ein Teil des Organisationsteams bin, wird noch mehr Zeit genommen. Wie immer, ich bin auf der Flucht, von einem Thema zum anderen und die Fähigkeit des Multitasking hilft kein bischen.<br />
<span id="more-1313"></span><br />
Schon Wochen im Vorfeld freue ich mich, von Freitag - Sonntag möchte ich nur reden, mich austauschen und Spaß haben, Spaß mit Frunden, die ich meist nur via Skype oder Telefon hören kann. Dazu gehören die Kollegen von Inpsyde ebenso, wie die Freunde, die ich über das Web gefunden habe. Aber die Zeit reicht nicht.</p>
<h3>Los geht's</h3>
<p>Die Anreise startet am Freitag, wir sind zum Teil ab 5 unterwegs und Köln erwartet uns; der Urlaub dafür schon lange eingereicht. Die Tage sind voller Pflichten und die Nächte zu kurz um alles nach zuholen. Schon im Bus können wir reden, uns austauschen und das Gefühl der Familie bei <a href="http://inpsyde.com">Inpsyde</a> bestärkt mich - das gefällt, egal wie unsere Stärken und Schwächen aussehen. Wir haben vieles gemein, Interesse an ähnlichen Themen und die Bereitschaft, sich auf den Anderen im Team einzulassen. Gleich geht es mir mit den Nahestehenden, die im Netzwerk aktiv sind und die ich suche um zu Reden, um Abzufragen, um mich auszutauschen, um zu Lernen, um die Vorzüge der Freundschaft zu genießen.</p>
<p>Die Menschen in dieser Wolke könnten unterschiedlicher nicht sein, trotzdem lassen wir uns auf uns ein, immer wieder und viel zu wenig direkt und analog. Das WordCamp ist ein Teil dieser Treffen und vielleicht sollte ich mir dir Frage stellen, ob ich daran noch Teil haben will; soll ich mich engagieren und organisieren; können wir uns nicht einfach ohne den Rahmen treffen; die Community außen vor lassen? Nein - meine ich, weil aus der Community die Kontakte entstehen, weil ich neue Gesichter finde und weil jeder einmal beginnt und hoffentlich ebenso von anderen lernen kann, wie ich. </p>
<h3>Sessions</h3>
<p>Keine der Sessions auf dem WordCamp gibt mir neue Informationen, dies beziehe ich auf die Themen, die ich besucht habe. Die wiederum sind entweder zufällig entstanden oder aus anderen Eckpunkten. Das Team, in dem ich mich befinde, das Netzwerk, mit dem ich mich austausche gibt mehr Infos und Lösungen, als das WordCamp bieten kann - vielleicht wird dies mal anders, aber darauf habe ich keinen Einfluss.</p>
<p>Trotzdem möchte ich ein Teil beitragen, ich möchte Input für mich und möchte einigen Wünschen nachkommen. Daher wurde eine Session zum Thema <a href="http://bueltge.de/wordpress-mehrsprachig/" title="Die Slides zur Session">Mehrsprachigkeit mit WordPress</a> erstellt. Die Frage dazu kam schon öfter und ich habe die auch schon auf anderen WordCamps dargelegt, eben nur auf dem Flur oder dem direkten Gespräch; im Netz findet man dazu genug Information. Da wir die Lösung oft für Kunden nutzen, leider nicht immer identisch und immer auf den Kunden zugeschnitten, ist die Idee gereift, dass wir eine Lösung auskoppeln wollen, die die Community frei nutzen können. Parallel soll es eine Premiumversion geben, die diverse Zusatzfeatures inne hat. Eine Session auf einem WordCamp gibt aus meiner Sicht den besten und direkten Kontakt zu den Nutzern, so dass ich also unsere Ideen abfragen kann, Bestätigungen oder Ideen einhole. Die Werbung für das Produkt ist maginal, die erreiche über diverse Blogs besser; wenn wir dies wollten. Das Feedback erscheint mir gut und daher wird es die Lösung hoffentlich in wenigen Wochen geben.</p>
<p><a href="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-046.jpg"><img src="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-046-450x300.jpg" alt="Bei der Session" title="2011-09-wordcamp-deutschland-koeln-046" width="450" height="300" class="aligncenter size-medium wp-image-1314" /></a></p>
<h3>Wünsche sind keine Ziele</h3>
<p>Im Zusammenhang der Sessions würde ich mehr Mut wünschen, aber auch mehr Vorbereitung und ein aktives Publikum! Ich würde mir ebenso mehr Themen wünschen, die aktueller Natur sind bspw. html5 oder JavaScript-Lösungen. WordPress ist eine Applikation im Web, mit der man einiges machen kann und sie bedarf in erster Linie die Kenntnis der Entwickler, die das Ziel der Site oder des Kunden umsetzen und parallel alle Themen aus dem Webumfeld. Darum muss und will ich auf einem WordCamp nicht nur Themen hören, die direkt mit WordPress zu tun haben. Eine Ausnahme macht <a href="http://sprungmarker.de/" title="Sylvia Egger">Silvia</a> für mich, da Sie Themen beleuchtet, die ich wichtig finde und nicht perfekt beherrsche - den Zusammenhang WP kann sie gern weg lassen; ich will die Infos wie man vorgeht und was man alles beachten muss. Bei Nachfragen beantwortet Silvia dies aber gern.</p>
<h3>Workshops?</h3>
<p>Es gibt die Idee im Team eventuell Workshops anzubieten, da man immer wieder hört, ich will was mitnehmen. Aber dazu braucht man Referenten, die das Wissen auch vermitteln können und nur wenige wollen dies kostenfrei tun. Parallel kommt das Problem der Zeit dazu, da man in einer 45 minütigen Session nicht viel vermitteln kann, geschweige denn den Charakter des Workshops aufnehmen. Dazu bedarf es mehr Zeit. Ich schule Entwickler in und mit WordPress in der Regle mindestens 2 Tage und gehe dabei direkt auf die Themen ein, die im Vorfeld aus den Reihen der Entwickler kommen. Nur schwer abbildbar im Rahmen eines WordCamp, ohne die Teilnehmer vorher zu kennen.</p>
<h3>Community hin oder her</h3>
<p>Das WordCamp ist eine Veranstaltung aus der Community und für die Community rund um WordPress. Darum sind wir offen für Ideen und Unterstützung. Ab und an bekommen wir aus den Reihen dazu auch Hinweise, die wir beachten und nutzen, wenn möglich. Die reine Kritik ist erhört, aber hilft uns nicht - ich wünsche mir konstruktive Kritik. Jeder macht Fehler, dazu sind sie da. Ich mache sie gern, weil ich daraus lerne und ich stehe dazu. Wer keine Fehler macht, der ist in meinen Augen entweder nicht ehrlich, oder die ihm gestellten Aufgaben sind zu einfach.</p>
<h3>Nur Bares ist wahres</h3>
<p>Ebenso brauchen wir für das WordCamp einen gewissen finanziellen Rahmen, den Sponsoren abdecken sollen. WordPress selbst hat viele Nutzer in den Reihen der großen Unternehmen und Medientempel in Deutschland - wir haben einige davon als Kunden und sind dankbar. Aber wir verstehen auch die Absage zum Sponsoring, da die Besucher des WordCamp nur sehr bedingt im Interesse dieser Unternehmen sind. Daher sind wir auch dankbar für die Sponsoren, die uns immer wieder unterstützen. Insbesondere bin ich dankbar, für Unternehmer, die WordPress zwar kennen, in der Regel nur über die Oberfläche und den Namen, und trotzdem einen Teil leisten, der das WordCamp in der jetzigen Form - frei von Kosten für den Besucher - ermöglicht. Die Aussage dieser Sponsoren ist immer ähnlich; sie bewundern die Community und die Zusammenarbeit mit uns, das Engagement für eine Software und wollen eine Teil beisteuern.</p>
<h3>Ende und aus, nicht vorbei</h3>
<p>Ich fliehe noch immer; zu Hause eingetroffen, nach dem WordCamp, die Verarbeitung der vielen Inhalte ist aufwendig; die Tochter will aber nun ihren Teil wieder einlösen und schon jetzt trüben mich die Gedanken, wie wird die Kritik zum Camp ausfallen. Wenig zeit, denn eine neue Woche beginnt und mein Arbeitgeber fordert mich in der Regel immer ganz und ein wenig mehr. Am Abend dann die Themen der Kunden und Privat aufarbeiten, Luft holen, Abstand gewinnen und nun doch einen Artikel schreiben - wie immer auf der Flucht, Zeichen für Zeichen - kein Korrekturlesen - die Gedanken fließen direkt aus dem Kopf, über die Finger, in die Tastatur zu diesem Artikel. </p>
<p><a href="http://bueltge.de/wp-content/images//2011-09-wordcamp-deutschland-koeln-111.jpg"><img src="http://bueltge.de/wp-content/images//2011-09-wordcamp-deutschland-koeln-111-450x300.jpg" alt="" title="2011-09-wordcamp-deutschland-koeln-111" width="450" height="300" class="aligncenter size-medium wp-image-1315" /></a></p>
<p>Dieser Artikel stellt im übrigen meine jetzige Meinung dar, und nur meine persönliche Meinung; er ist geprägt von Eindrücken verschiedener Menschen. Im Netz gibt es <a href="http://www.google.de/search?ie=UTF-8&#038;q=wordcamp+k%C3%B6ln+2011#sclient=psy&#038;hl=de&#038;prmdo=1&#038;tbm=blg&#038;source=hp&#038;q=wordcamp+k%C3%B6ln+2011&#038;pbx=1&#038;oq=wordcamp+k%C3%B6ln+2011&#038;aq=f&#038;aqi=&#038;aql=&#038;gs_sm=s&#038;gs_upl=0l0l0l8134l0l0l0l0l0l0l0l0ll0l0&#038;prmdo=1&#038;bav=on.2,or.r_gc.r_pw.&#038;fp=ce4a9cefc7b6f739&#038;biw=1271&#038;bih=807" title="Blogsuche via Google">viele Artikel</a> zum WordCamp in Köln, sucht sie und bildet euch eine Meinung, eure Meinung! Vielleicht sehen wir uns im kommenden Jahr wieder oder zum ersten mal und bitte, ansprechen; den Kontakt suchen.</p>
<p>Danke möchte ich Sagen, danke an die Leute, die mich angesprochen haben, die ehrlich und direkt den Kontakt suchen; egal warum. Ich habe mich sehr gefreut, den einen oder anderen kennen gelernt zu haben - ebenso die weiblichen Gäste! Ich danke den Personen für die lieben Worte oder den direkten Austausch - ich hoffe, wir können da weiter machen, wo wir aufgehört haben und so tun, als sei keine Zeit vergangen. Ich hatte eine Menge Spaß ...<br />
Ach, und danke für die Bilder an <a href="http://alexfrison.com">Alex</a>, habe mich köstlich amüsiert; auch wenn ich mich nicht wieder erkenne, dafür werde ich hoffentlich in Jahren mit Conny drüber lachen können.<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/wordcamp-2011-eindruecke-eines-getriebenen/1313/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordcamp-2011-eindruecke-eines-getriebenen/1313/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-046-200x200.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-046.jpg" medium="image">
			<media:title type="html">2011-09-wordcamp-deutschland-koeln-046</media:title>
			<media:thumbnail url="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-046-200x200.jpg" />
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-111.jpg" medium="image">
			<media:title type="html">2011-09-wordcamp-deutschland-koeln-111</media:title>
			<media:thumbnail url="http://bueltge.de/wp-content/images/2011-09-wordcamp-deutschland-koeln-111-200x200.jpg" />
		</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>WP Feature Pointer in WordPress 3.3</title>
		<link>http://bueltge.de/wp-feature-pointer-in-wordpress-3-3/1308/</link>
		<comments>http://bueltge.de/wp-feature-pointer-in-wordpress-3-3/1308/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 10:51:36 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1308</guid>
		<description><![CDATA[WordPress Version 3.3 bringt Hinweise via Feature Pointer, kleine Hinweis-Boxen, und will so mehr Verständnis für die neuen Features erreichen. Diese kann man auf diverse Wege nutzen bzw. in bestimmten Situationen nicht wollen, dazu hier erste Infos.]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress 3.3 wird ein mit dem Feature Pointer eine bekannte Idee aus anderen Tools übernommen. So kennt man beispielsweise aus Google Mail oder Doc die Hinweise zu neuen Umsetzungen in der Oberfläche, in dem man mit Bubbles auf diese neuen Möglichkeiten hinweist. In WordPress 3.3 wurde die Admin Bar überarbeitet &#8211; gelungen, wie ich finde &#8211; und darauf wird erstmalig mittels der Feature Pointer hingewiesen. <span id="more-1308"></span><br />
<a href="http://bueltge.de/wp-content/images//wp-pointer.png"><img src="http://bueltge.de/wp-content/images//wp-pointer-450x111.png" alt="" title="wp-pointer" width="450" height="111" class="aligncenter size-medium wp-image-1309" /></a><br />
Ist man im Umfeld von Kunden, kann es sein, dass dies nicht gewollt ist - verschieden Scenarios sind hier denkbar. Aber auch hier setzt WordPress auf die Hooks und so kann man auf verschiedene Art und Weise eingreifen. Eine Idee ist, die Nutzereinstellungen der User anzupassen, da die Feature Points mittels Javascript eine Option in der Tabelle ablegen, so dass man die gelesen Hinweise nicht nochmals sieht. Alternativ kann man sie deaktivieren via Hook; folgende kleine Lösung in ein Plugin oder die functions.php des Themes (wobei Zweites eher ungeeignet) kann helfen.</p>
<pre><code>
add_filter( 'show_wp_pointer_admin_bar', '__return_false' );
</code></pre>
<p>Hat man als Anwender die Admin Bar nicht aktiv bzw. sie ist global deaktiviert, dann werden auch keine Feature Points dazu angezeigt.</p>
<p>Ebenfalls kann man die Hooks nutzen und eigene Feature Points einsetzen. Ohne Anpassung im Design und Position ist damit folgendes einfaches beispiel denkbar. Soll die Position verändert werden, so genügt die Anpassung im Script-Abschnitt zu JS-Funktion <code>pointer()</code> in der PHP-Funktion <code>get_content_in_wp_pointer()</code>. Die Funktion <code>pointer()</code> kann mittels verschiedener Parameter (<code>content, position, arrow, close</code>) gesteuert werden.</p>
<pre><code>
function get_content_in_wp_pointer() {
	$pointer_content  = '&lt;h3&gt;' . __( 'WP Pointer with version 3.3.', 'my_textdomain' ) . '&lt;/h3&gt;';
	$pointer_content .= '&lt;p&gt;' . __( 'Add your own informations to WP Pointer.', 'my_textdomain' ) . '&lt;/p&gt;';

?&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//&lt;![CDATA[
jQuery(document).ready( function($) {
	$('#wpadminbar').pointer({
		content: '&lt;?php echo $pointer_content; ?&gt;',
		position: {
			my: 'left top',
			at: 'center bottom',
			offset: '-25 0'
		},
		close: function() {
			setUserSetting( 'p1', '1' );
		}
	}).pointer('open');
});
//]]&gt;
&lt;/script&gt;
&lt;?php
}

function fb_enqueue_wp_pointer( $hook_suffix ) {
	$enqueue = FALSE;

	$admin_bar = get_user_setting( 'p1', 0 ); // check settings on user
	// check if admin bar is active and default filter for wp pointer is true
	if ( ! $admin_bar &amp;&amp; apply_filters( 'show_wp_pointer_admin_bar', TRUE ) ) {
		$enqueue = TRUE;
		add_action( 'admin_print_footer_scripts', 'get_content_in_wp_pointer' );
	}
	// in true, include the scripts
	if ( $enqueue ) {
		wp_enqueue_style( 'wp-pointer' );
		wp_enqueue_script( 'wp-pointer' );
		wp_enqueue_script( 'utils' ); // for user settings
	}
}
add_action( 'admin_enqueue_scripts', 'fb_enqueue_wp_pointer' );
</code></pre>
<p><a href="http://bueltge.de/wp-content/images//wp-pointer-2.png"><img src="http://bueltge.de/wp-content/images//wp-pointer-2-450x144.png" alt="" title="wp-pointer-2" width="450" height="144" class="aligncenter size-medium wp-image-1310" /></a></p>
<p><strong>Bitte beachten:</strong> die Umsetzung basiert auf einer Nightly Build von WordPress, nicht das Release 3.3 und damit kann sich noch etwas ändern oder es sind andere Lösungen möglich. Daher bitte je nach Version von WordPress die Lösung validieren. Als Tipp sollte es ausreichen - alles andere ist Kreativität und Können.<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/wp-feature-pointer-in-wordpress-3-3/1308/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-feature-pointer-in-wordpress-3-3/1308/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp-pointer-200x149.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp-pointer.png" medium="image">
			<media:title type="html">wp-pointer</media:title>
			<media:thumbnail url="http://bueltge.de/wp-content/images/wp-pointer-200x149.png" />
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp-pointer-2.png" medium="image">
			<media:title type="html">wp-pointer-2</media:title>
			<media:thumbnail url="http://bueltge.de/wp-content/images/wp-pointer-2-200x192.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>p-Tag bei Bilden in WordPress ersetzen</title>
		<link>http://bueltge.de/p-tag-bei-bilden-in-wordpress-ersetzen/1306/</link>
		<comments>http://bueltge.de/p-tag-bei-bilden-in-wordpress-ersetzen/1306/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 10:51:44 +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[html5]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1306</guid>
		<description><![CDATA[Nicht immer sollen Bilder innerhalb des Content in p-Tags eingebettet werden. In  meinem Fall war die Semantik des figure-Tag gefragt und so blieb nur eine Lösung via Filter auf den Content, den ich hier kurz vorstellen möchte.]]></description>
			<content:encoded><![CDATA[<p>Die Nutzung von HTML5 halte ich persönlich für sinnvoll und ich mag die neuen Möglichkeiten, auch im Bereich der Semantik.</p>
<p>WordPress hat eine Besonderheit beim Ausliefern von Inhalten, die aus dem Editor kommen &#8211; das Setzen von Breaks und Absätzen. Historisch bedingt kümmert sich WordPress darum und nicht der TinyMCE; gleiches gilt bei der Integration von Bildern oder anderen Elementen dieser Art.</p>
<p>Um die Nutzung von HTML5 sauber abzubilden musste in einem Projekt der p-Tag durch den <a href="http://dev.w3.org/html5/markup/figure.html" title="figure with optional caption">figure</a>-Tag ersetzt werden und so ist folgender kleiner Filter entstanden.<br />
<span id="more-1306"></span><br />
Als kleiner Hintergrund zum figure-Tag lasse ich das folgenden Zitat stehen oder ihr nutzt das Web mit seinen vielfältigen Antwortformen.</p>
<blockquote><p>
<strong>HTML5 &lt;figure&gt; Tag</strong><br />
Viele Medien können nicht von Suchmaschinen oder behinderten Menschen erfasst werden. Um diese Medien textlich zugänglich zu machen, kann man sie per &lt;figure&gt; Tag an eine Beschreibung binden.<br />
<cite><a href="http://scriptshit.de/blog/show/HTML5-Tag-bersicht-und-Dokumentaufbau">Robert Agthe</a></cite></p></blockquote>
<p>Ich bin nicht sonderlich begabt bei Regex-Ausdrücken und würde mich freuen, wenn es Verbesserungen und Ideen zur Lösung gibt, da diese Art des öfteren genutzt wird und die Nutzung von HTML5 geht voran. Inwieweit WordPress darauf reagiert, ist aktuell nicht abzusehen und an dieser Stelle konnte ich auch keinen Filter erkennen, so dass man ohne einen Regex an diese Stelle kommt und die Vorgabe von WordPress ändert. In diesem Zusammenhang gibt es einige Themen, die einer Überarbeitung von WordPress bedarf um den Editor sauber mittels HTML5 zu nutzen; im <a href="http://wpbasis.de" title="WP Basis Projektsite">Basis Theme</a> habe ich in der <a href="http://code.google.com/p/wp-basis-theme/source/browse/trunk/basis-html5/functions.php" title="die functions.php des HTML5 Basis Theme">HTML5 Version</a> schon einige Sachen integriert.</p>
<pre><code>
// unautop for images
function fb_unautop_4_img( $content ) {

    $content = preg_replace(
        '/&lt;p&gt;\\s*?(&lt;a rel=\&quot;attachment.*?&gt;&lt;img.*?&gt;&lt;\\/a&gt;|&lt;img.*?&gt;)?\\s*&lt;\\/p&gt;/s',
        '&lt;figure&gt;$1&lt;/figure&gt;',
        $content
    );

    return $content;
}
add_filter( 'the_content', 'fb_unautop_4_img', 99 );
</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/p-tag-bei-bilden-in-wordpress-ersetzen/1306/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/p-tag-bei-bilden-in-wordpress-ersetzen/1306/feed/</wfw:commentRss>
		<slash:comments>26</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>Unauffälliges Setzen von Pluginoptionen in WordPress</title>
		<link>http://bueltge.de/unauffaelliges-setzen-von-pluginoptionen-in-wordpress/1302/</link>
		<comments>http://bueltge.de/unauffaelliges-setzen-von-pluginoptionen-in-wordpress/1302/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 17:51:10 +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[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1302</guid>
		<description><![CDATA[Nicht selten brauchen Plugins das einmalige Setzen von sehr wenig bis einer Option, warum nicht eine Alternative überdenken, die das Backend von WordPress nicht unnötig überfrachtet.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="https://lh5.googleusercontent.com/-mMfonpItBew/AAAAAAAAAAI/AAAAAAAAABg/Li9EqcdpYMA/photo.jpg?sz=120" alt="Avatar Renè Reimann" /></p>
<h4>Was mach ich hier eigentlich und warum?</h4>
<p>Ich wollte mich mal auf eine von mir, durchaus unübliche Art und Weise bei <a href="http://bueltge.de/impressum/">Frank</a> für seine stets hilfsbereite Art und für die vielen nützlichen Publikationen, in Form eines Gastbeitrages zu unserem Lieblings Thema - WordPress bedanken!.</p>
<p>Zwischen uns mögen Welten liegen, eigentlich sind es ca. 71km aber ich finde es immer wieder faszinierend wie ähnlich manche unserer Gedanken sind. Ok bevor ich abschweife, worum soll es denn jetzt gehen?<br />
<strong>Ich stand vor Kurzem vor der Aufgabe ein Plugin zu entwickeln, das mit sehr wenig Optionen daher kommt</strong><span id="more-1302"></span> - eigentlich war es nur eine Option! Aus meiner Sicht war es jetzt nicht wirklich sinnvoll, dafür eine extra Optionsseite anzulegen. Also hab ich mich auf die Suche nach einer Alternative gemacht. Die passende Idee hatte ich schnell. Ich platziere mein einzelnes Eingabefeld dort, wo es am ehesten gefunden wird. Wo das ist? Hm? Natürlich dort wo wir alle Plugins aktivieren, in der Plugin-Tabelle im Backend und zwar direkt unterhalb meines Plugins.</p>
<p>Nun stellt sich bei solchen Ideen folgende Frage:<br />
Gibt es da einen Hook? <em>"Klar mit Sicherheit!"</em><br />
Wie könnte dieser oder diese Hooks heißen? <em>"Hm keene ahnung!"</em></p>
<p>Diese beiden Fragen würde ich allerdings gerne mit euch auf dem WordCamp 2011, in der <a href="http://wordcamp.de/sessionvorschlag-hook-me/">Session "Hook Me"</a> diskutieren. Ich will hier nur das Ergebnis erläutern.</p>
<p>Zu erst werden wir einen weiteren Link zu den Standard Pluginoptionen, Deaktivieren und Bearbeiten hinzufügen.<br />
Hier für wird der Hook <code>plugin_action_links_{$plugin_file}</code> verwendet. Dieser Hook kann <strong>3</strong> Werte an die aufgerufene Funktion übergeben.<br />
Das wären <code>array_filter( $actions )</code>, <code>$plugin_file</code> und <code>$plugin_data</code>. Für unseren Zweck ist der Erste interessant. Mit <code>array_filter( $actions )</code> erhalten wir die Standard-Optionen in Form eines Arrays, dieses Array müssen wir nun nur noch um die neue Option erweiter.</p>
<pre><code class="php">
add_filter( 'plugin_action_links_plugin-options.php, 'po_plugin_action_links', 10, 3 );
function po_plugin_action_links( $array ) {
    $array['opdtions'] = '&lt;a href=&quot;#&quot; id=&quot;po_options_switch&quot;&gt;' . __( 'Einstellungen', 'my_textdomain' ) . '&lt;/a&gt;';
    return $array;
}
</code></pre>
<p>Jetzt hat unser Plugin eine weitere Option <em>Einstellungen</em> erhalten.<br />
Wo stecken wir denn nun das Eingabefeld hin?</p>
<p>Wenn wir uns die Stelle wo sich der Hook <code>"plugin_action_links_{$plugin_file}"</code> befindet näher anschauen, finden wir wenige Zeilen weiter unten folgenden Hook <code>"after_plugin_row_{$plugin_file}"</code>. Mit diesem Hook können wir uns eine eigene Zeile in der Tabelle unterhalb unseres Plugins erzeugen. Auch diesem Hook werden wieder verschiedene Werte übergeben, aber probiert es am besten selbst mal aus.</p>
<pre><code>
&lt;?php
add_filter( 'plugin_action_links_' . $plugin, 'po_plugin_action_links', 10, 3 );
add_filter( 'after_plugin_row_plugin-options.php', 'po_row_meta', 10, 3 );

function po_row_meta( $plugin_file, $plugin_data, $status ) {

    echo  '&lt;tr id=&quot;po_options_tr&quot; style=&quot;display: none;&quot;&gt;&lt;td colspan=&quot;4&quot;&gt;
          &lt;script&gt;
            jQuery(document).ready( function() {
                var po_options = jQuery( &quot;#po_options&quot; );
                var po_options_tr = jQuery( &quot;#po_options_tr&quot; );

                jQuery( &quot;#po_options_switch&quot; ).click( function(e){
                    e.preventDefault();
                    var display_r = po_options_tr.attr(&quot;style&quot;);

                    if( ! display_r ){
                        po_options.slideToggle( function () { po_options_tr.attr(&quot;style&quot;,&quot;display:none&quot; ); } );

                    } else {
                        po_options_tr.show();
                        po_options.slideToggle();
                    }
                });
            });
          &lt;/script&gt;
          &lt;div id=&quot;po_options&quot; style=&quot;display:none&quot;&gt;';

    var_dump( $plugin_file, $plugin_data, $status );
    echo '&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;';
}

function po_plugin_action_links( $array ) {
    $array['opdtions'] = '&lt;a href=&quot;#&quot; id=&quot;po_options_switch&quot;&gt;Einstellungen&lt;/a&gt;';
    return $array;
}
?&gt;
</code></pre>
<p>Das war es hier von mir, für euch!<br />
Wir sehen uns auf dem <a href="http://wordcamp.de/">WordCamp 2011</a>, <a href="http://www.die-pixler.de/">René Reimann</a>.</p>
<h5>Anmerkung des Bloginhabers Frank</h5>
<p>Eine Umsetzung dieser Form kann man in den Screenshots des Plugin <a href="http://wordpress.org/extend/plugins/wp-maintenance-mode/screenshots/">WP Maintenance Mode</a> sehen, so dass man sich ein Bild machen kann. Allerdings ist da diese Lösung mittlerweile zu überdenken, da die Optionen im Laufe der Nutzung umfangreicher geworden sind - dies ist durch Wünsche der Nutzer so entstanden; im ersten Ansatz gab es auch nur eine Option.<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/unauffaelliges-setzen-von-pluginoptionen-in-wordpress/1302/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/unauffaelliges-setzen-von-pluginoptionen-in-wordpress/1302/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:thumbnail url="http://bueltge.de//lh5.googleusercontent.com/-mMfonpItBew/AAAAAAAAAAI/AAAAAAAAABg/Li9EqcdpYMA/photo.jpg?sz=120" />
		<media:content url="http://bueltge.de//lh5.googleusercontent.com/-mMfonpItBew/AAAAAAAAAAI/AAAAAAAAABg/Li9EqcdpYMA/photo.jpg?sz=120" medium="image">
			<media:title type="html">Avatar Renè Reimann</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 &amp; Theme-Editor via Konstante deaktivieren</title>
		<link>http://bueltge.de/wordpress-plugin-theme-editor-via-konstante-deaktivieren/1300/</link>
		<comments>http://bueltge.de/wordpress-plugin-theme-editor-via-konstante-deaktivieren/1300/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 09:54:36 +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[backend]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1300</guid>
		<description><![CDATA[Es kann sehr riskant sein, den Editor für Plugins und Themes aktiv zu lassen; eine einfache Lösung diese zu deaktivieren stellt die Nutzung von Konstanten dar, die von WordPress vorgegeben werden.]]></description>
			<content:encoded><![CDATA[<p>WordPress ist bekannt dafür, dass diverse Konstanten im Core schlummern und oft schnelle Lösungen schaffen. Im Zusammenhang des Editors im Backend von WordPress oder dem Updaten des Systems gib es ebenso solche Konstanten, die mir neulich bei Arbeiten an dieser Stelle des Core untergekommen sind. Daher zwei kleine Strings, die schnell ein Lösung herbei schaffen können. So weit mir bekannt, sind alle hier genannten Konstanten seit Version 3.0 im System.<br />
<span id="more-1300"></span><br />
Die erste Konstante nimmt die Editoren aus dem Backend und verbietet den Zugang dahin. Damit ist das Editieren von Theme und Plugin-Dateien aus dem Backend mit Standard-Lösungen nicht möglich.</p>
<pre><code class="php">
// for enabling/disabling theme/plugin editor
define( 'DISALLOW_FILE_EDIT', TRUE );
</code></pre>
<p>Die zweite hier vorgestellte Konstante verbietet das Editieren, Modifizieren bzw. Ändern von Dateien aus dem Core, Plugins oder Themes. In dem Zusammenhang sind auch die Menueinträge im Backend nicht sichtbar bzw. nutzbar. Damit ist auch das Update nicht so einfach machbar und Kunden und nicht authentifizierte User sind schnell geblockt.</p>
<pre><code class="php">
// Disallow anything that creates, deletes, or edits core, plugin, or theme files.
// Files in uploads are excepted.
define( 'DISALLOW_FILE_MODS', TRUE );
</code></pre>
<p>In dem Zusammenhang gibt es zwei weitere Konstanten, die ab und an nützlich sind.<br />
Die erste ist immer mal wieder in den <a href="https://plus.google.com/110569673423509816572/posts/EoprewRMWa6">Schlagzeilen</a>, da damit diverse Abfragen konsolidieren. IN diversen Umfeldern ist es aber sehr nützlich, dass alle User der Installation die Möglichkeit haben: ungefiltertes HTML zu schreiben, in allen Aspekten und dies kann ebenso einfach via Konstante realisiert werden.</p>
<pre><code class="php">
// Disallow unfiltered_html for all users, even admins and super admins
DISALLOW_UNFILTERED_HTML
</code></pre>
<p>Ähnliches gibt es im Umfeld der Uploads.</p>
<pre><code class="php">
// Allow uploads of filtered file types to users with administrator role
ALLOW_UNFILTERED_UPLOADS
</code></pre>
<p>Die Konstanten gehören in die <code>wp-config.php</code> der Installation.</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/wordpress-plugin-theme-editor-via-konstante-deaktivieren/1300/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-plugin-theme-editor-via-konstante-deaktivieren/1300/feed/</wfw:commentRss>
		<slash:comments>9</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 Such-URL ändern</title>
		<link>http://bueltge.de/wordpress-such-url-aendern/1293/</link>
		<comments>http://bueltge.de/wordpress-such-url-aendern/1293/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 06:48:00 +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[Entwicklung]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Suche]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1293</guid>
		<description><![CDATA[Die WordPress interne Suche kann ebenso mit schönen URLs arbeiten, eine einfache Funktion erlaubt die Anpassung und schon kann die URL einfach uns leserlich genutzt werden.]]></description>
			<content:encoded><![CDATA[<p>WordPress sorgt dafür, wenn aktiviert, dass &#8222;schöne&#8220; lesbare URLs genutzt werden. Lediglich die Suche ist davon bisher nicht betroffen; sie kommt mit der bekannten Syntax <code>?s</code> im Standard aus. Aber auch hier kann man ansetzen und  die URL seinen Bedürfnissen entsprechend anpassen.</p>
<p>Das folgenden Beispiel soll es verdeutlichen. Im Standard von WordPress, trotz aktiver Permalinks, sieht die URL zu den beiden Suchbegriffen <em>wordpress</em> und <em>beratung</em> wie folgt aus: <code>bueltge.de/?s=wordpress+beratung&#038;submit=Search</code>. Mit Hilfe einer kleinen Funktion, die den Redirect anspricht, kann die URL angepasst werden. In meinem Fall, mit der zugehörigen nachfolgenden Funktion sieht die URL zu diesen beiden Suchbegriffen dann wie folgt aus: <code>bueltge.de/search/wordpress+beratung</code>.<br />
<span id="more-1293"></span><br />
Die Funktion, die ich einsetze, seht im folgenden Abschnitt. Innerhalb der WP-Funktion <code>wp_redirct</code> lege ich die Ausgabe fest, in dem ich den Begriff <em>search</em> zur <em>home-url</em> der Installation addiere und im Anschluss die Suchbegriffe ergänze. Dies kann man beliebig gestallten und je nach Anforderung so dass beste Ergebnis erziehlen.</p>
<pre><code>
function fb_change_search_url_rewrite() {
	if ( is_search() &amp;&amp; ! empty( $_GET['s'] ) ) {
		wp_redirect( home_url( &quot;/search/&quot; ) . urlencode( get_query_var( 's' ) ) );
		exit();
	}
}
add_action( 'template_redirect', 'fb_change_search_url_rewrite' );
</code></pre>
<p>Die Funktion legt man im besten Falle in einem Plugin ab oder alternativ in der <code>functions.php</code> des Themes. Schöne und verbesserte Lösungen sind wie immer willkommen und das Kommentarfeld steht dazu bereit.</p>
<p><strong>Update</strong><br />
Aus den Kommentaren und Diskussionen ist ebenso eine Lösung entstanden, die explizit eine Lösung via Hook anspricht und so eine frei Benennung ohne Probleme zulässt; nicht desto trotz sollte man sich die Lösung via .htaccess überlegen.</p>
<pre><code>
function custom_search_url( $search_rewrite ) {

	if( ! is_array( $search_rewrite ) )
		return $search_rewrite;

	$new_array = array();
	foreach( $search_rewrite as $pattern =&gt; $s_query_string ) {
		$new_array[ str_replace( 'search/', 'my-search-url/', $pattern ) ] = $s_query_string;
	}
	$search_rewrite = $new_array;
	unset( $new_array );

	return $search_rewrite;
}
add_filter( 'search_rewrite_rules', 'custom_search_url' );
</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-such-url-aendern/1293/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-such-url-aendern/1293/feed/</wfw:commentRss>
		<slash:comments>19</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 Custom Post Types in den Loop holen</title>
		<link>http://bueltge.de/wordpress-custom-post-types-in-den-loop-holen/1277/</link>
		<comments>http://bueltge.de/wordpress-custom-post-types-in-den-loop-holen/1277/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 11:21:53 +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[custom post type]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1277</guid>
		<description><![CDATA[Custom Post Types von WordPress können über diverse Wege in den Loop geholt werden, einige möchte ich hier aufzeigen.]]></description>
			<content:encoded><![CDATA[<p>WordPress hat mit den Custom Post Types ein neues zeitalter für Entwickler im Umfeld WordPress eröffnet. Die Möglichkeiten sind vielfältig und in erster Linie vom Wissen des entwicklers abhängig. Trotzdem findet man im Netz immer wieder die gleichen Tutorial, die im Grunde nur das Einhängen eines Custom Post Types in WP erklären. Aber damit ist es nicht getan &#8211; zumindest nicht in den meisten Fällen und daher sind diverse weitere Schritte nötig um die Nutzung der CPT rund zu machen.<br />
Nein, es kommt nun kein komplettes Tutorial, wie man vorgeht und was zu tun ist; zum einen liegt dies an der fehlenden Zeit und zum anderen daran, dass die Anforderungen jeder Umsetzung sehr spezifisch sind und man damit Gefahr läuft, dass man eingehängt nach Lösungen sucht. Daher werde ich Lösungen nun ab und an hier im Blog veröffentlichen; je nach zeit und Muse, was mir so unterkommt oder was ich mit anderen schon diskutiert habe.</p>
<p>In diesem Artikel möchte ich kurz darstellen, wie man die Inhalte der Custom Post Types in den Loop von WordPress bekommt. Damit ist kein Anspruch auf Vollständigkeit erhoben und die Kommentare stehen euch offen um zu diskutieren, zu kritisieren oder zu ergänzen.<br />
<span id="more-1277"></span></p>
<p><img class="alignright" width="328" height="226" src="http://bueltge.de/wp-content/images/wp/cpt-example.png" alt="Custom Post Types Beispiele" /><br />
Der Screenshot ist ein Beispiel für die Nutzung der CPT, dabei sind die Plugins <a href="http://wordpress.org/extend/plugins/archive/" title="WordPress Plugin Archive">Archive</a> und <a href="http://wpplugins.com/plugin/281/snippets" title="WordPress Plugin Snippets">Snippets</a> entstanden, die unterschiedliche Aufgaben haben und mittels CPT recht gut abbildbar waren, insbesondere auf die Anforderungen zugeschnitten, dass man eine Oberfläche hat, die eigenständig berechtigt werden kann, je Objekt je Rolle und parallel die Nutzung von Anwendern erlaubt, die nur die Oberfläche von WP nutzen wollen bzw. kennen.</p>
<p>Im ersten Fall sei die Syntax dargestellt, wie man den Query nutzt und mittels Parameter den Typ des CPT übergibt. In einem Template des Themes sorgt dies dafür, dass nur dieser CPT ausgelesen wird. Alle anderen Parameter des Query bleiben unangetastet.</p>
<pre><code class="php">
query_posts( 'post_type=my_post_type' )
</code></pre>
<p>Eine weitere Lösung unterscheidet sich im Grunde nur im Stil und dass mehrere CPTs übergeben werden, die in einem Array stecken und damit beachtet werden.</p>
<pre><code class="php">
global $query_string;
parse_str( $query_string, $args );
$args['post_type'] = array( 'my_post_type', 'my_second_post_type' );
query_posts( $args );
</code></pre>
<p>Um den Loop von WP zu ergänzen und nicht einzuschränken, wird das Array um den Parameter des <code>post_type</code> ergänzt. Via <a href="http://php.net/manual/de/function.array-merge.php"><code>array_merge</code></a> werden also nur das Array um ein weiteres Array ergänzt.</p>
<pre><code class="php">
global $wp_query;
$args = array_merge( $wp_query->query, array( 'post_type' =&gt; 'my_post_type' ) );
query_posts( $args );
</code></pre>
<p>Im weiteren lassen sich eigene Queries definieren, insbesondere wenn dies in eigenen Variablen nutzen möchte, sei es im Theme oder in Plugins.</p>
<pre><code class="php">
$args = array(
	'post_type' => 'my_post_type',
	'post_status' => 'publish',
	'posts_per_page' => -1
);

$posts = new WP_Query( $args );
if ( $posts -> have_posts() ) {
	while ( $posts -> have_posts() ) {
...
	}
}

wp_reset_query();
</code></pre>
<p>Als letztes eine Lösung, die insbesondere den Scharm hat, dass man es sauber via Plugin steuern und damit auch bei Tests leicht abschalten kann. Ebenfalls ist die Anwendung in einem Plugin so einfach zu realisieren oder die Erweiterung eines bestehenden Themes via Child Theme oder Plugin. Über den Hook <code>pre_get_posts</code> kann man diverse Sachen des Query anpassen, so auch die CPTs.<br />
Im Beispiel habe ich via Conditional Tags noch diverse Bedingungen drin, so dass man sieht, wie auf die Ausgabe im Frontend reagiert werden kann.</p>
<pre><code class="php">
// $this? - example was used in class-structures
// add custom post type to wp loop
add_filter( 'pre_get_posts', array( $this, 'add_to_query') );

// ads to query
function add_to_query( $query ) {

	if ( is_admin() || is_preview() )
		return;

	if ( ! isset( $query -> query_vars['suppress_filters'] ) )
		$query -> query_vars['suppress_filters'] = FALSE;

	// conditional tags for restrictions
	if ( is_home() || is_front_page() &#038;& ( FALSE == $query -&gt; query_vars['suppress_filters'] ) ) {
		$query -&gt; set( $this -&gt; my_post_type, array( 'post', $this -&gt; get_textdomain() ) );

	return $query;
}
</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-custom-post-types-in-den-loop-holen/1277/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-custom-post-types-in-den-loop-holen/1277/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/cpt-example.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/cpt-example.png" medium="image">
			<media:title type="html">Custom Post Types Beispiele</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>Suche in WordPress Nav Menu</title>
		<link>http://bueltge.de/suche-in-wordpress-nav-menu/1291/</link>
		<comments>http://bueltge.de/suche-in-wordpress-nav-menu/1291/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 19:40:31 +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[Entwicklung]]></category>
		<category><![CDATA[Suche]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1291</guid>
		<description><![CDATA[Das WordPress Nav Menu und die Integration des Suchfeld bedarf nur weniger Zeilen Code und etwas Anpassung via Stylesheet, eine Lösung möchte ich hier vorstellen.]]></description>
			<content:encoded><![CDATA[<p>Seit der Einführung des <a href="http://codex.wordpress.org/Function_Reference/wp_nav_menu" title="Doku im Codex">WP Nav Menu</a>, lieben Kunden die Funktion um ihre Navigationen selbst mit Inhalten zu versorgen und Anpassungen recht einfach vorzunehmen. Dabei steht auch das Suchfeld ab und an auf der Wunschliste. In diesem Zusammenhang sind mir bei einigen Reviews von WordPress Installation die unmöglichsten Lösungen untergekommen, die eher Sorgen als Freude bereiten.</p>
<p>Daher hier ein einfache und doch sinnvolle Lösung, um das Suchformular in die Navigation zu holen. <span id="more-1291"></span><br />
Dabei wird die Standard-Funktion von WordPress für die Suche genutzt - <code>get_search_form()</code>. Sollte dies also auch anderweitig genutzt werden, so gilt auf das Stylesheet zu achten. Ansonsten genügt das folgende Snippet und das Suchformular ist in der Navigation.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/search-wp-nav-menu.png" alt="Suche im  WordPress Nav Menu" /></p>
<p>Die Funktion und der Aufruf gehört in die <code>functions.php</code> des Themes und die Anpassung des Stylesheet in die jeweilige Datei des Themes, oft die <code>style.css</code>.</p>
<pre><code>
function fb_add_search_box ( $items, $args ) {

	// only on primary menu
	if( 'primary' === $args -&gt; theme_location )
		$items .= '&lt;li class=&quot;menu-item menu-item-search&quot;&gt;' . get_search_form( FALSE ) . '&lt;/li&gt;';

	return $items;
}
add_filter( 'wp_nav_menu_items', 'fb_add_search_box', 10, 2 );
</code></pre>
<p>Möchte man das Suchformular nur in einer bestimmen Navigation einfügen; insofern man diverse Nav Menus zulässt, dann genügt die Abfrage des Eintrags <code>theme_location</code> aus dem Argumenten-Array. Wenn es sich um das Menu handelt mit dem String n, dann ... - ein Beispiel:<br />
<code>if( 'primary' === $args -&gt; theme_location )</code></p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/search-wp-nav-menu2.png" alt="Suche im  WordPress Nav Menu" /></p>
<p>Der Schlüssel für die Abfrage ist im Theme definiert, daher auch gut im Backend zu erkennen, wie der obige Screenshot darstellt. Viel Spaß beim Nutzen und Anpassen.<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/suche-in-wordpress-nav-menu/1291/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/suche-in-wordpress-nav-menu/1291/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/search-wp-nav-menu.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/search-wp-nav-menu.png" medium="image">
			<media:title type="html">Suche im  WordPress Nav Menu</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/search-wp-nav-menu2.png" medium="image">
			<media:title type="html">Suche im  WordPress Nav Menu</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>Custom Post Types Rückgabe Funktion</title>
		<link>http://bueltge.de/custom-post-types-rueckgabe-funktion/1294/</link>
		<comments>http://bueltge.de/custom-post-types-rueckgabe-funktion/1294/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 15:42:15 +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[custom post type]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1294</guid>
		<description><![CDATA[Das Auslesen der Inhalt von Custom Post Types in WordPress einfach via kleiner Hilfsfunktion.]]></description>
			<content:encoded><![CDATA[<p>Die Nutzung der Custom Post Types kann via Core recht leicht umgesetzt werden, einen kleine Funktion, die ich nutze um an bestimmter Stelle die Inhalte von dort zu holen möchte ich hier kurz ablegen. Nicht immer braucht man CPT für das Frontend oder im Query der Templates, darum nutze ich die folgende kleine Funktion um die Inhalte zu holen und an geeigneter Stelle zu verwerten. Dabei ist noch einiges an Potential für die Erweiterung offen, aber sie ist nutzbar.<br />
<span id="more-1294"></span><br />
Die Funktion als Plugin oder im Zugriff des Themes ablegen und darauf zugreifen. Dabei muss der String des Custom Post Type mitgegeben werden.<br />
Alternativ können Werte für die Custom Fields übergeben werden; bei einem Wert reicht die Übergabe als String</p>
<pre><code class="php">
get_custom_post_type_items( 'my_cpt', 'my_meta_key' );
</code></pre>
<p>oder via Array, wenn es sich um mehrere Werte handelt. </p>
<pre><code class="php">
get_custom_post_type_items( 'my_cpt', array( 'my_meta_key', 'my_meta_key2' ) );
</code></pre>
<p>Die Funktion gibt ein Array zurück, in dem sich alle Inhalte befinden.<br />
Parallel können über den Filter Hook <code>wp_basis_get_cpt_items</code> die Argumente verändert werden, so dass der folgende WordPress Query nach euren Bedürfnissen abläuft.</p>
<pre><code>
function get_custom_post_type_items( $custom_post_type, $meta_data_key = FALSE, $args = FALSE ) {

	if ( ! $custom_post_type )
		return NULL;

	$defaults = array(
		'post_type'      =&gt; $custom_post_type,
		'post_status'    =&gt; 'publish',
		'posts_per_page' =&gt; -1,
		'orderby'        =&gt; 'post_date',
		'order'          =&gt; 'DESC'
	);

	$args = wp_parse_args( $args, apply_filters( 'wp_basis_get_cpt_items', $defaults ) );

	$posts  = new WP_Query($args);
	$return = array();

	if ( $posts -&gt; have_posts() ) {
		while ( $posts -&gt; have_posts() ) {
			$posts -&gt; the_post();
			$post_id  = get_the_ID();
			$sub_post = new stdClass();
			$sub_post -&gt; post_id   = $post_id;
			$sub_post -&gt; title     = get_the_title();
			$sub_post -&gt; permalink = get_permalink($post_id);
			$sub_post -&gt; content   = apply_filters( 'the_content', get_the_content() );
			if ( $meta_data_key &amp;&amp; is_string($meta_data_key) ) {
				$meta_value = get_post_meta( $post_id, $meta_data_key, TRUE );
				if ( ! empty($meta_value) )
					$sub_post -&gt; meta_data = $meta_value;
			} elseif ( is_array($meta_data_key) ) {
				foreach ( $meta_data_key as $key ) {
					if ( ! empty($key) ) {
						$meta_value = get_post_meta( $post_id, $key, TRUE );
						if ( ! empty($meta_value) )
							$sub_post -&gt; meta_data[$key] = $meta_value;
					}
				}
			}

			$return[] = $sub_post;
		}
	}

	wp_reset_query();

	return $return;
}
</code></pre>
<p>Viel Freude beim Nutzen oder Erweitern.<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/custom-post-types-rueckgabe-funktion/1294/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/custom-post-types-rueckgabe-funktion/1294/feed/</wfw:commentRss>
		<slash:comments>5</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 Content zeitversetzt darstellen</title>
		<link>http://bueltge.de/wordpress-content-zeitversetzt-darstellen/1282/</link>
		<comments>http://bueltge.de/wordpress-content-zeitversetzt-darstellen/1282/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 20:09:07 +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[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1282</guid>
		<description><![CDATA[Das zeitversetzte Befüllen von Inhalten mit WordPress ist immer wieder Thema, eine kleine und einfache Lösung möchte ich hier aufzeigen.]]></description>
			<content:encoded><![CDATA[<p>Das Befüllen des Feeds um eine gewissen Verzögerung habe ich bereits vor langer Zeit <a href="http://bueltge.de/wordpress-feed-zeitversetzt-befuellen/806/" title="WordPress Feed zeitversetzt befüllen">erläutert</a>, wobei im Grunde nur das SQL-Statement erweitert wird und um einen gewissen Zeitraum kann dann später im Feed publiziert werden und so bleibt Raum zu korrigieren.<br />
Natürlich kann man diese Form der Spielereien beliebig betreiben und auch das Frontend später befüllen. Damit wird der Inhalt dem Leser erst nach einer gewissen Zeitspanne dargestellt. Ein kleines Scriptbeispiel soll zeigen, wie das geht. <span id="more-1282"></span></p>
<p>Die Funktion kann beliebig erweitert werden, so zum Beispiel mit Abfragen zu Rechten der geloggten User abfragen oder vielfältige andere Anforderungen.</p>
<p>Im ersten Snippet wird die Ausgabe auf dem Frontend immer gefiltert, nur im Backend <code>is_admin()</code> und im Feed <code>is_feed()</code> bleibt alles unangetastet. Der Filter ist im Beispiel auf 15 Minuten gesetzt und diese Werden mit der Einstellung von WordPress abgeglichen, damit die Zeitzone beachtet wird. Die 15 Minuten werden in Sekunden umgerechnet und vom Wert abgezogen.</p>
<pre><code>
function publish_later_on_frontend( $where ) {

	if ( is_admin() || is_preview() || is_feed() )
		return $where;

	$offset =  15; // minutes
	$offset = ( get_option( 'gmt_offset' ) * 3600 ) - ( $offset * 60 ); // gmt offset of WP options minus custom time
	$where .= &quot; AND post_date &lt; '&quot; . gmdate( 'Y-m-d H:i:s', ( time() + $offset ) ) . &quot;'&quot;;

	return $where;
}
add_filter( 'posts_where', 'publish_later_on_frontend' );
</code></pre>
<p>Ein weiteres kurzes Beispiel erlaubt es allen geloggten Usern, die minimal die Rechte zum Lesen <code>current_user_can('read')</code> haben - also Abonnenten, die Inhalte zu lesen. Alle anderen Besucher bekommen die Inhalte 10 Tage später dargestellt.</p>
<pre><code>
function publish_later_on_frontend( $where ) {

	if ( is_admin() || is_preview() || is_feed() || current_user_can('read') )
		return $where;

	$offset =  10; // days
	$offset = ( get_option( 'gmt_offset' ) * 3600 ) - ( $offset * 24 * 60 * 60 ); // gmt offset of WP options minus custom time
	$where .= &quot; AND post_date &lt; '&quot; . gmdate( 'Y-m-d H:i:s', ( time() + $offset ) ) . &quot;'&quot;;

	return $where;
}
add_filter( 'posts_where', 'publish_later_on_frontend' );
</code></pre>
<p>Na - andere Ideen mit der Konstellation? Dann gern in die Kommentare oder via Link hierher verweisen. Ebenso freue ich mich, wenn es Verbesserungen am Code gibt; gerade im Bereich Rechnen mit Zeit gibt es ja viel Spielraum.<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-content-zeitversetzt-darstellen/1282/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-content-zeitversetzt-darstellen/1282/feed/</wfw:commentRss>
		<slash:comments>40</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 Menu-Einträge entfernen</title>
		<link>http://bueltge.de/wordpress-menu-eintraege-entfernen/1281/</link>
		<comments>http://bueltge.de/wordpress-menu-eintraege-entfernen/1281/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 02:40:37 +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[Admin]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1281</guid>
		<description><![CDATA[Das WordPress Backend liefert diverse Menueinträge und nicht immer werden diese benötigt, mit WordPress 3.1 sorgen zwei Funktionen für das einfache Entfernen von nicht benötigten Einträgen.]]></description>
			<content:encoded><![CDATA[<p>WordPress bietet viele Funktionen und diese werden anhand ihrer Rechte dem User angezeigt. Trotzdem möchte man ab und an das Menu etwas erleichtern und explizit für den Kunden anpassen. Mit WordPress 3.1 wurde dies ein wenig einfacher und diverse Tutorials im Netz betrachten meiner Ansicht nach eine nicht empfohlene Lösung.<br />
<span id="more-1281"></span><br />
Mit WordPress Version 3.1 sind unter anderem zwei neue Funktionen hinzugekommen, die das Entfernen von Menu- und Submenu-Einträgen erleichtern. Diese Funktionen kümmern sich um das Entfernen von Einträge aus dem Menu-Baum <code>remove_menu_page</code> oder Einträge aus dem Submenu, Einträge die unter einem Menueintrag liegen - <code>remove_submenu_page</code>.</p>
<pre><code>
/**
 * Remove a top level admin menu
 *
 * @param string $menu_slug The slug of the menu
 * @return array|bool The removed menu on success, False if not found
 */
remove_menu_page( $menu_slug )

/**
 * Remove an admin submenu
 *
 * @param string $menu_slug The slug for the parent menu
 * @param string $submenu_slug The slug of the submenu
 * @return array|bool The removed submenu on success, False if not found
 */
remove_submenu_page( $menu_slug, $submenu_slug ) {
</code></pre>
<p>Damit ist es ein leichtes Menu-Einträge zu entfernen und das Auslesen der Arrays für <code>$menu</code> und <code>$submenu</code> kann entfallen. Bisher musste man die Einträge in diesm Array finden und den entsprechenden Eintrag via <code>unset()</code> aus dem Array nehmen. Alternative waren diverse Konstrukte um den Eintrag auf Grund eines Schlüssel zu finden und zu entfernen - die obigen neuen Funktionen machen dies überflüssig und als Parameterwert wird lediglich die "slug" übergeben, die man im Link bzw. in der URL der Backendseite findet. Ein kleines Beispiel, in dem die Einträge zu den Kommentaren und die Submenu-Seite Diskussion entfernt werden, soll es verdeutlichen.</p>
<pre><code>
function fb_remove_menu_entries () {
	// with WP 3.1 and higher
	if ( function_exists( 'remove_menu_page' ) ) {
		remove_menu_page( 'edit-comments.php' );
		remove_submenu_page( 'options-general.php', 'options-discussion.php' );
	} else {
		// unset comments
		unset( $GLOBALS['menu'][25] );
		// unset menuentry Discussion
		unset( $GLOBALS['submenu']['options-general.php'][25] );
	}
}
add_action( 'admin_menu', 'fb_remove_menu_entries' );
</code></pre>
<p>Der obige Code stellt eine einfache Lösung dar, entfernt die beiden Einträge und hat ebenso ein Fallback für WordPress, kleiner Version 3.1. Ebenso ist denkbar, dass man das Entfernen mit Rechteabfragen </p>
<pre><code>if ( function_exists( 'remove_menu_page' ) &#038;& ! current_user_can( 'manage_options' ) ) {</code></pre>
<p>verbindet und so explizit die Darstellung optimieren kann. Alternativ hilft das Plugin Adminimize und erleichtert diese Aufgabe via Oberfläche.<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-menu-eintraege-entfernen/1281/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-menu-eintraege-entfernen/1281/feed/</wfw:commentRss>
		<slash:comments>18</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>Kommentarfunktion von WordPress ganzheitlich abschalten</title>
		<link>http://bueltge.de/kommentarfunktion-von-wordpress-ganzheitlich-abschalten/1272/</link>
		<comments>http://bueltge.de/kommentarfunktion-von-wordpress-ganzheitlich-abschalten/1272/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 21:30:39 +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[Admin]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1272</guid>
		<description><![CDATA[Die Oberfläche soll darstellen, was man braucht - Einfachheit ist Trumpf. Darum entferne ich die Bereiche, die nicht benötigt werden; im Beispiel der Kommentare stelle ich hier eine Lösung vor, die einfach aktiviert und genutzt werden kann.]]></description>
			<content:encoded><![CDATA[<p>Die Kommentarfunktion in WordPress ist ein essentieller Bestandteil von Blogs - nicht jedoch in jedem Fall beim Einsatz als klassisches CMS. In dem Fall werden Kommentare nicht benötigt.<br />
Sicher kann man diese beim Erstellen des Theme einfach weg lassen und auch die Option im Backend für den Standard deaktivieren - übersichtlich und logisch ist dies aber nicht für jeden Kunden. In so einem Fall, schalte ich die Kommentare komplett ab, sorge dafür, dass die Beiträge diese Möglichkeit nicht haben können - egal welcher Iststand der Installation - und entferne auch die Bereiche für die Kommentare aus dem Backend. Nur so hat der Nutzer nur das, was er benötigt. Mittlerweile habe ich dies so oft benötigt, dass ein kleines Plugin entstanden ist und ich damit adhoc die Bereiche und die Funktionen um die Kommentare &#8222;abschalte&#8220;. Liegen umfangreichere Anpassungen vor, so erstelle ich die ebenso via Plugin oder nutze das vorhandene Plugin <a href="http://wordpress.org/extend/plugins/adminimize/">Adminimize</a>.<br />
<span id="more-1272"></span><br />
Der eine oder andere wird eventuell Verbesserungen haben oder anderweitig Nutzen - gern, auf <a href="https://github.com/bueltge/Remove-Comments-Absolutely">github</a> zu finden und damit einfach zu forken und eventuell fließt etwas an mich zurück.<br />
Im folgenden Screenshot habe ich mal einige Bereiche markiert, die nun fehlen; im Bereich von Inhalten Schreiben - Artikel, Seiten oder anderen Post Types ist dies in meinem Plugin ebenso weg, also auch die Metaboxen für Kommentare, Diskussion und Trackback. Alles weitere sieht man beim Einsatz oder durch das Lesen des Code bzw. der schmalen Doku am Code bzw. habe ich im <a href="https://github.com/bueltge/Remove-Comments-Absolutely">Repository</a> weitere Screenshots abgelegt.</p>
<p><img src="http://wpengineer.com/wp-content/uploads/screenshot-11.png" alt="On Dashboard without comments" title="screenshot-1" width="598" height="605" /></p>
<pre><code>
&lt;?php
/**
 * Plugin Name: Remove Comments Absolutely
 * Plugin URI: http://bueltge.de/
 * Text Domain: remove_comments_absolute
 * Domain Path: /languages
 * Description: Deactivate comments functions and remove areas absolutely from the WordPress install
 * Author: Frank B&Atilde;&frac14;ltge
 * Version: 0.0.1
 * Licence: GPLv2
 * Author URI: http://bueltge.de
 * Upgrade Check: none
 * Last Change: 01.06.2011
 */

if ( ! class_exists( 'Remove_Comments_Absolute' ) ) {
	add_action( 'plugins_loaded', array( 'Remove_Comments_Absolute', 'get_object' ) );

	class Remove_Comments_Absolute {

		static private $classobj = NULL;

		/**
		 * Constructor, init on defined hooks of WP and include second class
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    add_filter, add_action
		 * @return  void
		 */
		public function __construct () {

			add_filter( 'the_posts', array( $this, 'set_comment_status' ) );

			add_filter( 'comments_open', array( $this, 'close_comments'), 10, 2 );
			add_filter( 'pings_open', array( $this, 'close_comments' ), 10, 2 );

			add_action( 'admin_init', array( $this, 'remove_comments' ) );
			add_filter( 'add_menu_classes', array( $this, 'add_menu_classes' ) );

			add_action( 'admin_head', array( $this, 'remove_comments_areas' ) );

			add_action( 'wp_before_admin_bar_render', array( $this, 'admin_bar_render' ) );
		}

		/**
		 * Handler for the action 'init'. Instantiates this class.
		 *
		 * @access  public
		 * @since   0.0.1
		 * @return  object $classobj
		 */
		public function get_object () {

			if ( NULL === self :: $classobj ) {
				self :: $classobj = new self;
			}

			return self :: $classobj;
		}

		/**
		 * Set the status on posts and pages - is_singular ()
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    is_singular
		 * @param   string $posts
		 * @return  string $posts
		 */
		public function set_comment_status ( $posts ) {

			if ( ! empty( $posts ) &amp;&amp; is_singular() ) {
				$posts[0]-&gt;comment_status = 'closed';
				$posts[0]-&gt;post_status = 'closed';
			}

			return $posts;
		}

		/**
		 * Close comments, if open
		 *
		 * @access  public
		 * @since   0.0.1
		 * @param   string | boolean $open
		 * @param   string | integer $post_id
		 * @return  string $posts
		 */
		public function close_comments ( $open, $post_id ) {
			// if not open, than back
			if ( ! $open )
				return $open;

			$post = get_post( $post_id );
			if ( $post -&gt; post_type ) // all post types
				return FALSE;

			return $open;
		}

		/**
		 * Change options for dont use comments
		 * Remove meta boxes on edit pages
		 * Remove support on all post types for comments
		 * Remove menu-entries
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    update_option, get_post_types, remove_meta_box, remove_post_type_support
		 * @return  void
		 */
		public function remove_comments () {
			// int values
			foreach ( array( 'comments_notify', 'default_pingback_flag' ) as $option )
				update_option( $option, 0 );
			// string false
			foreach ( array( 'default_comment_status', 'default_ping_status' ) as $option )
				update_option( $option, 'false' );

			// all post types
			// alternative define an array( 'post', 'page' )
			foreach ( get_post_types() as $post_type ) {
				// comment status
				remove_meta_box( 'commentstatusdiv', $post_type, 'normal' );
				// remove trackbacks
				remove_meta_box( 'trackbacksdiv', $post_type, 'normal' );
				// remove all commnts from tabels
				remove_post_type_support( $post_type, 'comments' );
			}
			// remove dashboard meta box for recents comments
			remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
			// unset comments
			unset( $GLOBALS['menu'][25] );
			// unset menuentry Discussion
			unset( $GLOBALS['submenu']['options-general.php'][25] );
		}

		/**
		 * Add class for last menu entry with no 20
		 *
		 * @access  public
		 * @since   0.0.1
		 * @param   array string $menu
		 * @return  array string $menu
		 */
		function add_menu_classes ( $menu ) {

			$menu[20][4] .= ' menu-top-last';

			return $menu;
		}

		/**
		 * Remove areas for comments in backend via JS
		 *
		 * @access  public
		 * @since   0.0.1
		 * @return  string with js
		 */
		public function remove_comments_areas () {
			?&gt;
			&lt;script type=&quot;text/javascript&quot;&gt;
			//&lt;![CDATA[
			jQuery(document).ready( function($) {
				$( '.table_discussion' ).remove();
			});
			//]]&gt;
			&lt;/script&gt;
			&lt;?php
		}

		/**
		 * Remove comment entry in Admin Bar
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    remove_menu
		 * @return  void
		 */
		public function admin_bar_render () {
			// remove entry in admin bar
			$GLOBALS['wp_admin_bar'] -&gt; remove_menu( 'comments' );
		}

	} // end class

} // end if class exists
?&gt;
</code></pre>
<p>Der obige Code ist eher zum Lesen, für die, die direkt am Code sehen wollen, was passiert. Der Download und Hinweise zum aktuellsten Code sind gut auf github zu bekommen bzw. abzulegen: <a href="https://github.com/bueltge/Remove-Comments-Absolutely">github.com/bueltge/Remove-Comments-Absolutely</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/kommentarfunktion-von-wordpress-ganzheitlich-abschalten/1272/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kommentarfunktion-von-wordpress-ganzheitlich-abschalten/1272/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/screenshot-11.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/screenshot-11.png" medium="image">
			<media:title type="html">screenshot-1</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 Admin Style Guide</title>
		<link>http://bueltge.de/wordpress-admin-style-guide/1244/</link>
		<comments>http://bueltge.de/wordpress-admin-style-guide/1244/#comments</comments>
		<pubDate>Fri, 27 May 2011 18:50:42 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS, xHTML, JS]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Admin]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1244</guid>
		<description><![CDATA[Das Erstellen von Oberflächen im Backend von WordPress sollte man an den Standards von WordPress orientieren, um so wichtiger ist es, dass man die Möglichkeiten kennt - dieses kleine Plugin hilft dir dabei.]]></description>
			<content:encoded><![CDATA[<p>WordPress hat ein hohes Tempo in der Entwicklung - das gilt ebenso für das Design im Backend. Insofern ist es wichtig, dass man möglichst ohne eigene Styles im Adminbereich auskommt und Tags und Klassen von WordPress nutzt. Nur so kann man sich die Arbeit als Entwickler vereinfachen und muss nicht bei jedem Update alle Oberflächen testen.<br />
Leider gibt es recht umfangreiche Möglichkeiten im Backend um die Anforderungen umzusetzen. Dabei werden diverse Klassen und HTML-Strukturen verwendet. Damit man diese etwas einfacher nachschlagen kann, habe ich ein kleines Plugin entwickelt, welches in der Entwicklungsumgebung werkelt und mir bei Aufruf schnell die nötigen Elemente darstellt, Beiträge aktuell zu halten ist schwer, auch wenn <a href="http://bueltge.de/wordpress-25-plugin-style-guide/614/" title="WordPress 2.5 Plugin Style Guide">mein alter Beitrag zu dem Thema</a> noch immer passend ist, wenn auch unvollständig.<br />
<span id="more-1244"></span><br />
Anbei seht ihr in zwei Screenshots die Unterschiede zwischen Version 3.1 und 3.2 von WordPress und die aktuelle enthaltenen Elemente des Plugins.</p>
<p><a href="http://wpengineer.com/wp-content/uploads/screenshot-1.png"><img src="http://wpengineer.com/wp-content/uploads/screenshot-1-201x1024.png" alt="in WordPress 3.1" title="screenshot-1" width="201" height="1024" class="ob" /></a> <a href="http://wpengineer.com/wp-content/uploads/screenshot-2.png"><img src="http://wpengineer.com/wp-content/uploads/screenshot-2-204x1024.png" alt="in WordPress 3.2" title="screenshot-2" width="204" height="1024" class="ob" /></a></p>
<p>Das Plugin ist auf <a href="https://github.com/bueltge/WordPress-Admin-Style">Github</a> abgelegt und erwartet eurer Erweiterungen - also bitte Forken und neue Ideen und Möglichkeiten einbringen &#8211; <a href="https://github.com/bueltge/WordPress-Admin-Style">github.com/bueltge/WordPress-Admin-Style</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-admin-style-guide/1244/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-admin-style-guide/1244/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/screenshot-1-201x1024.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/screenshot-1-201x1024.png" medium="image">
			<media:title type="html">screenshot-1</media:title>
		</media:content>
		<media:content url="http://wpengineer.com/wp-content/uploads/screenshot-2-204x1024.png" medium="image">
			<media:title type="html">screenshot-2</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>

