<?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; Theme</title>
	<atom:link href="http://bueltge.de/tag/theme/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 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>WordPress Custom Post Types als CSS-Klasse im Frontend nutzen</title>
		<link>http://bueltge.de/wordpress-custom-post-types-als-css-klasse-im-frontend-nutzen/1247/</link>
		<comments>http://bueltge.de/wordpress-custom-post-types-als-css-klasse-im-frontend-nutzen/1247/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 02:41:26 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[custom post type]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1247</guid>
		<description><![CDATA[Um die Inhalte, welche über Custom Post Types eingebracht werden, im Frontend eventuell anders zu gestalteten, kann man sich diesen Typ als Klasse in den body-Tag holen und damit via CSS einfach darauf zugreifen.]]></description>
			<content:encoded><![CDATA[<p>Die Möglichkeit in WordPress eigene Post-Types einzubringen erfreut sich wachsender Beliebtheit und kann so manche Arbeit vereinfachen - wichtig ist, dass man im Vorfeld die Anforderungen exakt bewertet und die Möglichkeiten einschätzt. Aber darum soll es in diesem kleinen Beitrag nicht gehen - ich möchte kürz eine Lösung zeigen, die den oder die neuen Post Typen in das Frontend bringt, um die neuen Typen mittels CSS anzusprechen.<br />
<span id="more-1247"></span><br />
Im Grunde wird lediglich die Funktion <a href="http://codex.wordpress.org/Template_Tags/body_class"><code>body_class()</code></a> von WordPress erweitert um die eigenen Post Types, so dass man sie übergeordnet ansprechen kann und das Design entsprechend gestaltet.<br />
Gleiches hatte ich schon in einem <a href="http://bueltge.de/wordpress-theme-in-abhaengigkeit-des-titel/397/">anderen Beitrag</a> ausführlicher erläutert, wo der Titel eines Beitrags in diese Funktion übernommen wurde; daher dort bitte die Zusatzinformationen abholen.</p>
<pre><code class="php">
// Adds classes for custom post types to body_class() and post_class()
function fb_add_body_class( $class ) {
	$post_type = 'my_example_post_type'; // der Post Type

	if ( get_query_var('post_type') === $post_type ) { // nur wenn der Post Type aktiv ist, dann erweitern
		$class[] = $post_type;
		$class[] = 'type-' . $post_type;
	}

	return $class;
}
add_filter( 'body_class', 'fb_add_body_class' );
</code></pre>
<p>Alternativ kann man auch die <a href="http://codex.wordpress.org/Function_Reference/post_class"><code>post_class()</code></a> Funktion erweitern um die Klasse des Custom Post Type nicht direkt am body-Tag zu haben. Dazu verwende ich die gleiche Funktion und es muss lediglich der Hook für die post-Klassen angesprochen werden.</p>
<pre><code class="php">
add_filter( 'post_class', 'fb_add_body_class' );
</code></pre>
<p>Beide Template Tags werden im HTML-Tag verwendet, wie auch die verlinkten Codex-Seiten aufzeigen; bzw. ein Beispiel für die Post-Klasse:</p>
<pre><code class="php">
&lt;div &lt;?php post_class('class-name'); ?&gt;&gt;
</code></pre>
<p>Viel Freude beim austesten und nutzen. Die Kommentarfunktion steht wie immer für Verbesserungen und Diskussion offen.<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-als-css-klasse-im-frontend-nutzen/1247/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-custom-post-types-als-css-klasse-im-frontend-nutzen/1247/feed/</wfw:commentRss>
		<slash:comments>6</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>Kategorien beim WordPress Beitrag verfassen rechte-abhängig filtern</title>
		<link>http://bueltge.de/kategorien-beim-wordpress-beitrag-verfassen-rechte-abhangig-filtern/1252/</link>
		<comments>http://bueltge.de/kategorien-beim-wordpress-beitrag-verfassen-rechte-abhangig-filtern/1252/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 13:53:48 +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[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1252</guid>
		<description><![CDATA[WordPress bietet für das Filtern von Kategorien in der List-Ausgabe einen entsprechenden Filter, der es erlaubt, dass man die Ausgabe der Kategorien an bestimmte Anforderungen in Backend und Frontend anpasst. Zwei Beispiele sollen die Möglichkeiten aufzeigen.]]></description>
			<content:encoded><![CDATA[<p>Die Ausgabe der Kategorien kann sehr unübersichtlich werden und ab und an sind auch Kategorien für bestimmte Zwecke angelegt, aber nicht dem Schreiben von Beiträgen zu bestimmten Kategorien. Daher kann es sinnvoll sein, wenn man Kategorien in der Metabox beim Schreiben eines Beitrags filtert. WordPress bietet dazu einen Filter und anhand zweier Beispiele zeige ich kurz das Vorgehen.<br />
<span id="more-1252"></span><br />
Im ersten Fall werden zwei Kategorien gefiltert. Es gibt lediglich eine Einschränkung: der Filter ist nicht (<code>!</code>) aktiv, wenn der eingeloggte User das Berechtigungsobjekt <code>manage_categories</code> hat; im Standard sind das die Rollen Administrator &#038; Editor, siehe <a href="http://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table">Übersicht der Objekte im Codex</a>. Der Filter ist im Grunde so aufgesetzt, dass man das SQL-Statement erweitert und in die Klammer gehören die Titelform (slug) der Kategorien.</p>
<p>Es ist zu bedenken, dass diese kleine Funktion damit im Frontend und Backend zieht und die Kategorien werden überall gefiltert, daher im zweiten Beispiel eine erweitere Lösung.</p>
<pre><code>
function fb_list_terms_exclusions($args) {

	$where = '';

	if ( !current_user_can('manage_categories') )
		$where = &quot; AND t.slug  NOT IN ('uncategorized', 'category-2')&quot;; // slug of categories

	return $where;
}
add_filter( 'list_terms_exclusions', 'fb_list_terms_exclusions' );

</code></pre>
<p>Im zweiten Beispiel werden die Abfragen erweitert, so dass wir eine Filterung getrennt in Frontend und Backend haben. natürlich ist auch nur dies ein Beispiel und kann auf verschiedene Anforderungen hin erweitert werden.<br />
Im Beispiel habe ich die beiden Variablen <code>$pagenow</code> und <code>$post_type</code> global gesetzt. Diese Variablen sagen uns, wo und was im Backend gerade aktiv ist. In dem kleinen Beispiel wird der Filter im Backend (<code>is_admin()</code>) nur angewandt, wenn der Post Type <code>post</code> ist (<code>==</code>). Ebenfalls könnte man via $pagenow auf die Seite prüfen, zum Beispiel <code>post.php</code>.<br />
Das Frontend wird im ersten Schritt angesprochen, immer wenn man nicht im Admin (<code> !is_admin() </code>) ist, werden die beiden Kategorien gefiltert.</p>
<pre><code>
function fb_list_terms_exclusions($args) {
	global $pagenow, $post_type;

	$where = '';

	// filter only for frontend
	if ( !is_admin() ) {
		$where = &quot; AND t.slug  NOT IN ('uncategorized', 'category-2')&quot;; // slug of categories
	}

	// backend, only on post-type post
	if (
		'post' == $post_type &amp;&amp;
		is_admin() &amp;&amp;
		!current_user_can('manage_categories')
	) {
		$where = &quot; AND t.slug  NOT IN ('slider')&quot;; // slug of category
	}

	return $where;
}
add_filter( 'list_terms_exclusions', 'fb_list_terms_exclusions' );
</code></pre>
<p>Viel Potential für Anpassungen; aber auch ein Schritt um das Backend an die Bedürfnisse der Autoren anzupassen. Viel Spaß beim Nutzen und 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/kategorien-beim-wordpress-beitrag-verfassen-rechte-abhangig-filtern/1252/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kategorien-beim-wordpress-beitrag-verfassen-rechte-abhangig-filtern/1252/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>Blätterfunktion für WordPress</title>
		<link>http://bueltge.de/blatterfunktion-fur-wordpress/1236/</link>
		<comments>http://bueltge.de/blatterfunktion-fur-wordpress/1236/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 01:11:10 +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[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1236</guid>
		<description><![CDATA[Die Blätterfunkion/ Pagination auf Webseiten hat sich schon immer bewährt und wer mit WordPress arbeitet kennt das eine oder andere Plugin für diese Lösung. Oft kommen dabei viele Funktionen für das Einstellen mit und die brauche ich eher selten. Ich nutze daher eine eigene Lösung und die möchte hier vorstellen.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://wpengineer.com/wp-content/uploads/wp-pagination2.png" alt="" title="wp-pagination2" width="138" height="41" class="size-full wp-image-2080" /><br />
Die Blätterfunkion/ Pagination auf Webseiten hat sich schon immer bewährt und wer mit WordPress arbeitet kennt das eine oder andere Plugin für diese Lösung. Oft kommen dabei viele Funktionen für das Einstellen mit und die brauche ich eher selten. Ich nutze daher eine eigene Lösung und die möchte hier vorstellen, da sie nun auch mit Parametern umgehen kann und so sollte sie in vielen Bereichen einsetzbar sein. Sie kann natürlich beliebig angepasst und für die eigenen Zwecke verändert werden.<br />
Eine schöne schlanke Alternative gibt ebenfalls bei <a href="http://playground.ebiene.de/2554/wordpress-pagebar-pluginlos/">Sergej</a> zu finden und ein Blick lohnt sicher. Er stellt auch ein Beispiel für die Formatierung bereit.<br />
<span id="more-1236"></span></p>
<h4>Beispiel Screenshots</h4>
<p><img src="http://wpengineer.com/wp-content/uploads/wp-pagination.png" alt="" title="wp-pagination" width="145" height="74" class="size-full wp-image-2079" /></p>
<h4>Die Funktion</h4>
<p>Die folgende Funktion stellt den Kern da und kann als Plugin oder im Theme, in der <code>functions.php</code> abgelegt werden. Der Code-Abschnitt im Anschluss stellt die Möglichkeit der Anpassung via Hook da, so dass man auf die Parameter zugreifen kann.</p>
<pre><code class="php">
function fb_paging_bar( $args = array() ) {

	$defaults = array(
		'range'           =&gt; 4,
		'custom_query'    =&gt; FALSE,
		'previous_string' =&gt; __( '&amp;laquo;&amp;laquo;&amp;laquo;', FB_GREYFOTO_TEXTDOMAIN ),
		'next_string'     =&gt; __( '&amp;raquo;&amp;raquo;&amp;raquo;', FB_GREYFOTO_TEXTDOMAIN ),
		'view_fp'         =&gt; TRUE,
		'view_lp'         =&gt; TRUE,
		'before_output'   =&gt; '&lt;div class=&quot;postlink&quot;&gt;',
		'after_output'    =&gt; '&lt;/div&gt;'
	);

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

	$args['range'] = (int) $args['range'] - 1;
	if ( !$args['custom_query'] )
		$args['custom_query'] = @$GLOBALS['wp_query'];
	$count = (int) $args['custom_query']-&gt;max_num_pages;
	$page  = intval( get_query_var( 'paged' ) );
	$ceil  = ceil( $args['range'] / 2 );

	if ( $count &lt;= 1 )
		return FALSE;

	if ( !$page )
		$page = 1;

	if ( $count &gt; $args['range'] ) {
		if ( $page &lt;= $args['range'] ) {
			$min = 1;
			$max = $args['range'] + 1;
		} elseif ( $page &gt;= ($count - $ceil) ) {
			$min = $count - $args['range'];
			$max = $count;
		} elseif ( $page &gt;= $args['range'] &amp;&amp; $page &lt; ($count - $ceil) ) {
			$min = $page - $ceil;
			$max = $page + $ceil;
		}
	} else {
		$min = 1;
		$max = $count;
	}

	$echo = '';
	$previous = intval($page) - 1;
	$previous = esc_attr( get_pagenum_link($previous) );
	if ( $previous &amp;&amp; (1 != $page) )
		$echo .= '&lt;a href=&quot;' . $previous . '&quot; title=&quot;' . __( 'previous', FB_GREYFOTO_TEXTDOMAIN) . '&quot;&gt;' . $args['previous_string'] . '&lt;/a&gt;';
	$firstpage = esc_attr( get_pagenum_link(1) );

	if ( $args['view_fp'] &amp;&amp; $firstpage &amp;&amp; (1 != $page) )
		$echo .= '&lt;a href=&quot;' . $firstpage . '&quot;&gt;' . __( 'First', FB_GREYFOTO_TEXTDOMAIN ) . '&lt;/a&gt;';

	if ( !empty($min) &amp;&amp; !empty($max) ) {
		for( $i = $min; $i &lt;= $max; $i++ ) {
			if ($page == $i) {
				$echo .= '&lt;span class=&quot;active&quot;&gt;' . str_pad( (int)$i, 2, '0', STR_PAD_LEFT ) . '&lt;/span&gt;';
			} else {
				$echo .= sprintf( '&lt;a href=&quot;%s&quot;&gt;%002d&lt;/a&gt;', esc_attr( get_pagenum_link($i) ), $i );
			}
		}
	}

	if ($args['view_lp']) {
		$lastpage = esc_attr( get_pagenum_link($count) );
		if ( $lastpage &amp;&amp; ($count != $page) ) {
			$count = str_pad( (int)$count, 2, '0', STR_PAD_LEFT );
			$echo .= '&lt;a href=&quot;' . $lastpage . '&quot;&gt;' . __( 'Last', FB_GREYFOTO_TEXTDOMAIN ) . '(' . $count . ')' . '&lt;/a&gt;';
		}
	}

	$next = intval($page) + 1;
	$next = esc_attr( get_pagenum_link($next) );
	if ($next &amp;&amp; ($count != $page) )
		$echo .= '&lt;a href=&quot;' . $next . '&quot; title=&quot;' . __( 'next', FB_GREYFOTO_TEXTDOMAIN) . '&quot;&gt;' . $args['next_string'] . '&lt;/a&gt;';

	if ( isset($echo) )
		echo $args['before_output'] . $echo . $args['after_output'];
}
</code></pre>
<p>Im Template, wo die Pagination genutzt werden soll, wird einfach die Funktion aufgerufen:</p>
<pre><code>
&lt;?php if ( function_exists('fb_paging_bar') ) fb_paging_bar(); ?&gt;
</code></pre>
<h4>Beispiel für Anpassungen</h4>
<p>Für eigene Argumente steht ein Hook bereit und mittels diesem Hook kann jeder Parameter des Arrays $args angepasst werden.</p>
<pre><code class="php">
function change_fb_paging_bar_defaults($args) {

	$args['previous_string'] = ''; // empty string
	$args['next_string'] = '';

	return $args;
}
add_filter('fb_paging_bar_defaults', 'change_fb_paging_bar_defaults');
</code></pre>
<p>Viel Freude damit und für Hinweise, Ideen und Verbesserungen bin ich wie immer dankbar.<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/blatterfunktion-fur-wordpress/1236/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/blatterfunktion-fur-wordpress/1236/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/wp-pagination2.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/wp-pagination2.png" medium="image">
			<media:title type="html">wp-pagination2</media:title>
		</media:content>
		<media:content url="http://wpengineer.com/wp-content/uploads/wp-pagination.png" medium="image">
			<media:title type="html">wp-pagination</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 Artikelbild via CSS als Hintergrundbild nutzen</title>
		<link>http://bueltge.de/wordpress-artikelbild-css-hintergrundbild/1234/</link>
		<comments>http://bueltge.de/wordpress-artikelbild-css-hintergrundbild/1234/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 05:10:28 +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[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1234</guid>
		<description><![CDATA[Das Artikelbild von WordPress via CSS als Hintergrundbild nutzen, einfach für die Autoren zu bedienen und flexibel im Theme einzusetzen; eine kleine Lösung gibt hier im Artikel]]></description>
			<content:encoded><![CDATA[<p>Ab und an braucht man pro Beitrag oder Seite ein Bild als Hingucker oder um den Inhalt zu verschönern. Für Redakteure ist die Post Thumbnail Funktion recht komfortable um ein Bild zum Beitrag oder der Seite fest zu legen. Darum lohnt es, auch dieses Bild als Hintergrundbild zum Beitrag zu nutzen. Allerdings ist es wesentlich schöner, wenn das Bild via CSS in Hintergrund definiert ist und im Markup nicht auftaucht. Daher eine kleine Funktion, die ein Standard-Bild definiert und wenn es ein definiertes Post Thumbnail gibt, dann wird dieses gezogen.<br />
<span id="more-1234"></span><br />
Die Funktion stellt nur eine kleine Lösung dar, muss also nach belieben angepasst und erweitert werden. Viel Spaß damit. Eine ähnliche Lösung gibt es außerdem bei <a href="http://playground.ebiene.de/2640/wordpress-facebook-miniatur/">Sergej, der damit Facebook befüttert</a>.</p>
<pre><code>
/**
 * return post thumbnail inside style in head
 */
if ( !function_exists('fb_background_image') ) {

	function fb_background_image() {
		// only frontend
		if ( is_feed() || is_trackback() ) {
			return;
		}

		// default image, when no set an post thumbnail
		if ( !has_post_thumbnail($GLOBALS['post']-&gt;ID) ) {
			$style = '&lt;style type=&quot;text/css&quot;&gt;.banner {background-image:url(\'' . get_bloginfo('stylesheet_directory') . '/images/banner.jpg\');} &lt;/style&gt;' . &quot;\n\n&quot;;
		} else {
			// get post thumbnail
			$image = wp_get_attachment_image_src(
				get_post_thumbnail_id($GLOBALS['post']-&gt;ID),
				'banner' // size for image; defined via add_image_size
			);

			$style = sprintf(
				'&lt;style type=&quot;text/css&quot;&gt;.banner {background-image:url(\'%s\');}&lt;/style&gt;',
				esc_attr($image[0]),
				&quot;\n\n&quot;
			);
		}
		if ($style)
			echo $style;
	}

	// add functions
	add_action( 'wp_head', 'fb_background_image' );
	add_theme_support( 'post-thumbnails' );
	add_image_size( 'banner', 980, 350, true );

}
</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-artikelbild-css-hintergrundbild/1234/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-artikelbild-css-hintergrundbild/1234/feed/</wfw:commentRss>
		<slash:comments>14</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>Benutzerdefinierte Felder zum Steuern des WordPress Nav Menu</title>
		<link>http://bueltge.de/benutzerdefinierte-felder-zum-steuern-des-wordpress-nav-menu/1232/</link>
		<comments>http://bueltge.de/benutzerdefinierte-felder-zum-steuern-des-wordpress-nav-menu/1232/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 05:11:12 +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[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1232</guid>
		<description><![CDATA[Die benutzerdefinerten Felder von WordPress sind vielsschichtig einsetzbar, unter anderem auch für das WP Nav Menu - eine Lösung dazu in diesem Beitrag.]]></description>
			<content:encoded><![CDATA[<p>WordPress 3.0 beinhaltet neben einigen anderen neuen Features ja auch die <strong>Menüs</strong>. Wenn man mit dem normalen Menü, das automatisch aus den Seiten generiert wird, kann man sich einfach unter dem Punkt Design/Menüs ein eigenes basteln und einen Ort zuweisen, wo es dann das normale Menü ersetzt.</p>
<p>Wer jetzt aber WordPress als CMS <em>und</em> Blog benutzt (wie ich) steht jetzt u.U. vor einem Problem: Wenn man den Blog betrachtet soll man in der Navigation die normalen Seiten sehen, aber wenn man dann eine Seite mit vielen Unterseiten auswählt wäre es schön, wenn in der Menüleiste die Unterpunkte stehen, und es nur einen Eintrag "Blog" gibt, der einen wieder zurück auf die Hauptseite bringt</p>
<p><img src="http://wpengineer.com/wp-content/uploads/WP_Menü.png" alt="" title="WP_Menü" width="382" height="164" class="aligncenter size-full wp-image-2117" /><br />
<span id="more-1232"></span><br />
Praktischerweise bringt WordPress schon alles mit, was man braucht, diese Idee zu verwirklichen. Das sind auf der einen Seite natürlich die eingangs erwähnten Menüs, auf der anderen Seite kommen die Custom Fields ins Spiel. Sofern man es nicht ausgeblendet hat, findet man unter jedem Post und jeder Seite einen Editor in dem man diesem Eintrag Metadaten verpassen kann. Über diese Metadaten kann man mit einem kleinen Codeschnipsel dann das angezeigte Menü verändern.</p>
<p>Dieser Codeschnipsel an entweder in dem <code>functions.php</code> des Themes abgelegt werden, oder in einem Plugin.</p>
<pre><code class="php">
//Filter the arguments for the wp_nav_menu_function to include a custom menu on pages.
function nr_2010_wp_nav_menu_args($args = '')
{
	if ( is_page() ) //custom menus only on sites
	{
		global $post;

		$menu_name = get_post_meta($post-&gt;ID, 'menu_name', true);

		if( !empty($menu_name) &#038;& is_nav_menu($menu_name) )
		{
			$args['menu'] = $menu_name;
		}
	}
	return $args;
}
add_filter( 'wp_nav_menu_args', 'nr_2010_wp_nav_menu_args' );
</code></pre>
<p>Diese Code setzt zunächst einen Filter auf <code>wp_nav_menu_args</code>, dies sind die Parameter der Funktion <code>wp_nav_menu</code>, die das Theme zum ausgeben des Menüs benutzt.</p>
<p>Sofern wir uns auf einer Seite befinden ( <code>is_page()</code>) wird das CustomField <code>menu_name</code> der aktuellen Seite ausgelesen. Wenn es nicht leer ist (also nicht existiert) und es ein Menü mit diesem Namen gibt, werden die Parameter des Aufrufs so modifiziert, das das passende Menü angezeigt wird.</p>
<p>Bleibt nur noch eins zu tun: Den Seiten die passenden Metadaten zu geben, und die entsprechenden Menüs zu erstellen. Der Menüeditor ist sehr intuitiv, er sollte niemanden vor ernsthafte Probleme stellen. Nur ein Hinweis dazu: Es wird nicht automatisch gespeichert <img src='http://bueltge.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>In eigener Sache:</strong> Zunächst möchte ich Frank für seinen tollen Blog loben, wo ich schon manches mal beim Basteln genau die Information gefunden habe, die ich dringend brauchte. Dann möchte ich ihn natürlich auch danken, dass er mir die Möglichkeit geboten hat, hier einen Gastbeitrag zu veröffentlichen. Und als letztes will ich diesen Platz auch noch für ein bisschen Werbung nutzen: Auch ich habe einen <a href="http://niklas-rother.de">Blog</a>, wo ich ab und zu über WordPress schreibe, häufiger wird man dort aber etwas über C# oder andere Themen die mich interessieren finden. Ich würde mich freuen, wenn ihr mal vorbei schaut <img src='http://bueltge.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="contentdiv">
<h4>Gastbeitrag</h4>
<p>Dieser Beitrag ist aus der Feder von Niklas Rother - <a href="http://niklas-rother.de/">niklas-rother.de</a> und ist ein Beitrag zum Adventskalender auf <a href="http://wpengineer.com/">wpengineer.com</a> zum Thema WordPress.<br />
Vielen Dank auch hier nochmal von meiner Seite an <a href="http://niklas-rother.de/">Niklas</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/benutzerdefinierte-felder-zum-steuern-des-wordpress-nav-menu/1232/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/benutzerdefinierte-felder-zum-steuern-des-wordpress-nav-menu/1232/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/WP_Menü.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/WP_Menü.png" medium="image">
			<media:title type="html">WP_Menü</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>Einfaches Autoresize für die WordPress Hintergrundbild-Funktion</title>
		<link>http://bueltge.de/einfaches-autoresize-fur-die-wordpress-hintergrundbild-funktion/1230/</link>
		<comments>http://bueltge.de/einfaches-autoresize-fur-die-wordpress-hintergrundbild-funktion/1230/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 13:22:01 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS, xHTML, JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[StyleSheet]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1230</guid>
		<description><![CDATA[Die Hintergrundbild-Funktion von WordPress kann angepasst werden, wie man dies tut und was man erwarten kann zeige ich an einem Beispiel, welches das Hintergrund mittels Autoresize immer an die Größe des Browsers anpasst. ]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress 3.0 wurde die Möglichkeit im Theme geschaffen, dass der User einfach ein <a href="http://wpengineer.com/1964/wordpress-3-0-custom-background-support/">Hintergrundbild</a> hochladen und nutzen können. Das Bild wird mittels CSS im Hintergrund positioniert. Damit ist es nicht ganz so einfach, dass die Möglichkeit des Autoresize schafft und der Hintergrund sich an die Größe des Browsers anpasst. Es gibt einige schöne Möglichkeiten für diese Anforderung, ich möchte kurz eine sehr einfache Möglichkeit mittels CSS aufzeigen, da so die Funktion von WordPress nicht angefasst werden muss.<br />
<span id="more-1230"></span><br />
Die folgende Syntax muss innerhalb des Stylesheet integriert werden. Dazu kann auch ein <a href="http://bueltge.de/wordpress-child-themes-verstehen/1192/">Child-Theme</a> angelegt werden, wenn das Originaltheme nicht verändert werden sollte. Die Werte müssen mit <code>!important</code> versehen werden, da ansonsten die Werte von WordPress genutzt werden, das Überschreiben dieser Werte ist nicht anders möglich. Damit wird der Hintergrund immer an die Größe des Browsers angepasst - aber Achtung: dies ist nicht immer die optimale Lösung, da die Bilder dazu in der eigentlichen Größe verändert werden, heißt also, dass ein sehr schmaler Bildausschnitt das Bild extrem verzerrt. Der Beispielscreenshot ist da wenig empfindlich, da die Wolken dies vertragen können und trotzdem ein angenehmes Hintergrundbild liefern - im Gegensatz zum Standard, in dem das Bild wie in der Vorschau gekachelt wäre; bei anderen Bildern kann dies sehr unschön aussehen.</p>
<p><img src="http://wpengineer.com/wp-content/uploads/autoresize-settings-300x190.png" alt="" title="autoresize-settings" width="300" height="190" class="aligncenter size-medium wp-image-2107" /></p>
<pre><code lang="css">
body {
	background-repeat:no-repeat !important;
	background-position:center center !important;
	background-attachment:fixed !important;
	-o-background-size: 100% 100%, auto !important;
	-moz-background-size: 100% 100%, auto !important;
	-webkit-background-size: 100% 100%, auto !important;
	background-size: 100% 100%, auto !important;
}
</code></pre>
<p>Das CSS ist nicht in allen Browsern nutzbar, <a href="http://caniuse.com/?utm_content=backtype-tweetcount&#038;utm_medium=bt.io-twitter&#038;utm_source=twitter.com#search=background-size">siehe Übersicht</a>, liefert daher nur in den aktuellen Browsern den erwarteten Effekt. Der Internet Explorer, Browser kann man ihn ja schlecht nennen, hat hiermit so seine Schwierigkeiten.</p>
<p><img src="http://wpengineer.com/wp-content/uploads/autoresize-example-300x153.png" alt="" title="autoresize-example" width="300" height="153" class="aligncenter size-medium wp-image-2106" /></p>
<p>Eine Alternative ist es den Callback für die Funktion mitzugeben und eine eigene kleine Funktion in der <code>functions.php</code> abzulegen, die sich um das Ausgeben des CSS kümmert. Die folgende Funktion tut dies statisch, fragt also nur das Bild ab und nutzt die Werte aus dem Backend nicht.</p>
<pre><code>
function fb_header_callback() {

  $background = get_background_image();
  if ( !$background )
    return;

  if ( $background ) {
    $image = &quot; background-image: url('$background');&quot;;

    $style  = 'background-repeat:no-repeat;';
    $style .= 'background-position:center center;';
    $style .= 'background-attachment:fixed;';
    $style .= '-o-background-size: 100% 100%, auto;';
    $style .= '-moz-background-size: 100% 100%, auto;';
    $style .= '-webkit-background-size: 100% 100%, auto;';
    $style .= 'background-size: 100% 100%, auto;';

    $style .= $image . $style;
  }
?&gt;
&lt;style type=&quot;text/css&quot;&gt;
body { &lt;?php echo trim( $style ); ?&gt; }
&lt;/style&gt;
&lt;?php
}
</code></pre>
<p>Diese Funktion muss in der Funktion als Callback mitgeben, sie kann natürlich beliebig angepasst werden. In der <code>functions.php</code> des Themes sollte es, wenn es die Background-Image-Funktionalität schon gibt, die Funktion <code>add_custom_background()</code> geben. Dieser muss im ersten Parameter mit der neuen Funktion erweitert werden und nun wird der Standard-Callback von WordPress nicht mehr aufgerufen. </p>
<pre><code class="php">
	// This theme allows users to set a custom background
	add_custom_background( 'fb_header_callback' );
</code></pre>
<p>Als Hinweis, der Style wird dann via Hook <code>wp_head</code> direkt im <code>head</code> ausgegeben, eher unschön - wie ich finde, und daher solltet ihr diese Formatierung wohl besser im Stylesheet ablegen, da sie eh statisch ist und nicht vom User angepasst werden kann. Ebenso ist wichtig das der Hook auch im Theme vorhanden ist, was aber auch für andere Plugins oder Funktionen wichtig ist.</p>
<h4>Werte aus dem Backend nutzen</h4>
<p>Als letzter kleiner Tipp für eure eigenen Anpassungen möchte ich noch zeigen, wie man die Werte aus dem Backend bekommt und nutzt.<br />
Die Hintergrundfarbe der Optionen zum Hintergrundbild wird mit folgender Funktion zurück gegeben:</p>
<pre><code>$color = get_background_color();</code></pre>
<p>Das Bild bekommt via:</p>
<pre><code>$background = get_background_image();</code></pre>
<p>Und einzelne Einstellungen zum Style werden via <code>get_theme_mod($name);</code> abgefragt:<br />
Der folgende kleine Schnipsel gibt die gesetzten Werte zum Theme zurück.</p>
<pre><code>
$mods = get_theme_mods();
var_dump($mods);
</code></pre>
<p>Dies könnte beispielsweise für das Standard Theme Tweny Ten wie folgt aussehen</p>
<pre><code class="php">
string 'Twenty Ten' (length=10)

array
  'background_image' => string 'http://localhost/wpbeta/wp-content/uploads/2010/12/apple-touch-icon.png' (length=71)
  'background_image_thumb' => string 'http://localhost/wpbeta/wp-content/uploads/2010/12/apple-touch-icon.png' (length=71)
  'background_repeat' => string 'no-repeat' (length=9)
  'background_position_x' => string 'center' (length=6)
  'background_attachment' => string 'scroll' (length=6)
  'background_color' => string '' (length=0)
</code></pre>
<p>Aufgrund dieser Werte im Array kann man beispielsweise den Wert <code>background_repeat</code> holen,</p>
<pre><code>$repeat = get_theme_mod( 'background_repeat' );</code></pre>
<p>der in diesem Beispiel <code>no-repeat</code> zurück gibt.</p>
<p>Mit den anderen Werten kann man genauso verfahren; eine Menge an Spielraum und Möglichkeiten.<br />
Zum den Themen CSS und Hintergrund findet man einen ausführlichen Artikel bei Chris: <a href="http://css-tricks.com/perfect-full-page-background-image/">Perfect Full Page Background Image</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/einfaches-autoresize-fur-die-wordpress-hintergrundbild-funktion/1230/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/einfaches-autoresize-fur-die-wordpress-hintergrundbild-funktion/1230/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:thumbnail url="http://wpengineer.com/wp-content/uploads/autoresize-settings-300x190.png" />
		<media:content url="http://wpengineer.com/wp-content/uploads/autoresize-settings-300x190.png" medium="image">
			<media:title type="html">autoresize-settings</media:title>
		</media:content>
		<media:content url="http://wpengineer.com/wp-content/uploads/autoresize-example-300x153.png" medium="image">
			<media:title type="html">autoresize-example</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>Anzahl der Links in WordPress ausgeben</title>
		<link>http://bueltge.de/anzahl-der-links-in-wordpress-ausgeben/1219/</link>
		<comments>http://bueltge.de/anzahl-der-links-in-wordpress-ausgeben/1219/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 20:25: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[counter]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1219</guid>
		<description><![CDATA[WordPress lässt die Verwaltung von Links zu, warum die Anzahl der Links in verschiedener Form also nicht ausgeben.]]></description>
			<content:encoded><![CDATA[<p>Nicht selten werden dem Leser statistische Werte auf der Website dargestellt, so werden die <a href="http://bueltge.de/summe-beitraege-seiten-kategorien-tags-kommentare-wordpress-theme/744/">Gesamtanzahl der Kommentare, der Beiträge und ähnliches</a> gern genutzt. Gleiches kann es natürlich auch für die Links geben, wenn man diese im Backend von WordPress verwaltet. Dies ist nicht immer nur im Sinne einer Blogroll gedacht - beim Einsatz von WordPress als Linkverwaltung beispielsweise kann so ein Wert interessant sein.<br />
Anbei zwei kleine Code-Schnippsel, die euch auf die Sprünge helfen oder gar ausreichend sind um die Links entsprechend auszugeben.<br />
<span id="more-1219"></span><br />
Die Gesamtanzahl der Links gibt man mit folgendem kleinen Schnippsel aus.</p>
<pre><code class="php">
$categories = get_terms( 'link_category' );
if ( $categories )
    echo $categories[0]-&gt;count;
</code></pre>
<p>Die Gesamtanzahl ein Linkkategorie geht ebenfalls, dazu steht der folgende Code als Beispiel. Hier muss die ID der Linkkategorie mitgegeben werden, im Beispiel ist dies die <em>2</em>.</p>
<pre><code>
$term = get_term( 2, 'link_category' ); // ID of link category
if ( $term ) {
	echo __( 'Link category', 'textdoamin' ) . ' ' . $term-&gt;name . __( ', number of links', 'textdomain' ) . ' '. $term-&gt;count;
}
</code></pre>
<p>Die Snippets verwendet ihr im Template eures Themes oder erstellt eine Funktion, die euch die Ausgabe steuert.<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/anzahl-der-links-in-wordpress-ausgeben/1219/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/anzahl-der-links-in-wordpress-ausgeben/1219/feed/</wfw:commentRss>
		<slash:comments>23</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>Ein Gästebuch im WordPress TwentyTen Theme</title>
		<link>http://bueltge.de/ein-gaestebuch-im-wordpress-twentyten-theme/1216/</link>
		<comments>http://bueltge.de/ein-gaestebuch-im-wordpress-twentyten-theme/1216/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 11:35:53 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Gästebuch]]></category>
		<category><![CDATA[Kommentar]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP3.0]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1216</guid>
		<description><![CDATA[WordPress besitzt die Kommentarfunktion, nichts anderes ist ein Gästebuch und ich möchte kurz am Beispiel des Standard-Theme TwentyTen zeigen, wie leicht und ohne Plugins ein Gästebuch eingerichtet ist. ]]></description>
			<content:encoded><![CDATA[<p>WordPress besitzt die Kommentarfunktion, nichts anderes ist ein Gästebuch und ich möchte kurz am Beispiel des Standard-Theme TwentyTen zeigen, wie leicht und ohne Plugins ein Gästebuch eingerichtet ist. Ich erhoffe mir, dass damit die vielen Mails zu dem Thema weg bleiben und jeder eine einfache, funktionierende und saubere Lösung erstellen kann.<br />
<span id="more-1216"></span><br />
Das folgende Tutorial ist erst mit WordPress 3.0 und höher nutzbar, da seit dem die Funktionen für die Kommentare neu im Core sind. Im Grunde kann man das auf jedes Theme anwenden, man muss den Aufruf der Kommentarfunktion anschauen - wird dieser mit der neuen Funktion <code>comment_form()</code> realisiert.</p>
<h4>Der grobe Ablauf</h4>
<ul>
<li>Kopie der <code>page.php</code> in <code>guestbook-page.php</code> erstellen</li>
<li>Inhaltlich einige Veränderungen vornehmen</li>
<li>Kopie der <code>comments.php</code> in <code>guestbook.php</code> erstellen</li>
<li>Inhaltlich den Aufbau ändern</li>
<li>Templates in den Theme-Ordner kopieren oder Child-Theme erstellen</li>
<li>Seite im Backend von WordPress erstellen und Template wählen</li>
</ul>
<p><img class="centered" src="http://bueltge.de/wp-content/images/gaestebuch/guestbook-twentyten.png" alt="Gästebuch mit TwentyTen Theme in WordPress" /></p>
<h4>Die <code>guestbook-page.php</code></h4>
<p>Im neuen Template sind nur wenige Veränderungen vorzunehmen. Im ersten Schritt braucht das Template einen Namen, damit es im backend von WordPress für statische Seiten erkannt wird. Dies geschieht in den Kommentaren am Anfang der Datei.</p>
<pre><code>
&lt;?php
/**
 * Template Name: Guestbook
 *
 * A custom page for guestbook function.
 *
 * The &quot;Template Name:&quot; bit above allows this to be selectable
 * from a dropdown menu on the edit page screen.
 *
 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.0
 */

</code></pre>
<p>Im Anschluss wird im Aufruf der Kommentarfunktion noch der Name der Datei mitgegeben, der sich um die Darstellung der Gästebucheinträge kümmert und das Formular zum Eintragen enthält. Im Grunde könnte man dies auch weglassen, aber dann ist inhaltlich alles auf Kommentare abgeglichen und das Formular für Neueinträge befindet sich am Ende, also nach den Einträgen. Da es bei Gästebüchern aber meist anders ist, legen wir das Formular vor die Liste der Einträge und ändern die Texte.<br />
Daher muss also die Datei an die Funktion übergeben werden. </p>
<pre><code>
&lt;?php comments_template( '/guestbook.php' ); ?&gt;
</code></pre>
<p>Das Beispieltemplate mit den Änderungen in der kompletten Sicht:</p>
<pre><code>
&lt;?php
/**
 * Template Name: Guestbook
 *
 * A custom page for guestbook function.
 *
 * The &quot;Template Name:&quot; bit above allows this to be selectable
 * from a dropdown menu on the edit page screen.
 *
 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.0
 */

get_header(); ?&gt;

		&lt;div id=&quot;container&quot;&gt;
			&lt;div id=&quot;content&quot; role=&quot;main&quot;&gt;

&lt;?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?&gt;

				&lt;div id=&quot;post-&lt;?php the_ID(); ?&gt;&quot; &lt;?php post_class(); ?&gt;&gt;
					&lt;?php if ( is_front_page() ) { ?&gt;
						&lt;h2 class=&quot;entry-title&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
					&lt;?php } else { ?&gt;
						&lt;h1 class=&quot;entry-title&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt;
					&lt;?php } ?&gt;

					&lt;div class=&quot;entry-content&quot;&gt;
						&lt;?php the_content(); ?&gt;
						&lt;?php wp_link_pages( array( 'before' =&gt; '&lt;div class=&quot;page-link&quot;&gt;' . __( 'Pages:', 'twentyten' ), 'after' =&gt; '&lt;/div&gt;' ) ); ?&gt;
						&lt;?php edit_post_link( __( 'Edit', 'twentyten' ), '&lt;span class=&quot;edit-link&quot;&gt;', '&lt;/span&gt;' ); ?&gt;
					&lt;/div&gt;&lt;!-- .entry-content --&gt;
				&lt;/div&gt;&lt;!-- #post-## --&gt;

				&lt;?php comments_template( '/guestbook.php' ); ?&gt;

&lt;?php endwhile; ?&gt;

			&lt;/div&gt;&lt;!-- #content --&gt;
		&lt;/div&gt;&lt;!-- #container --&gt;

&lt;?php get_sidebar(); ?&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>
<h4>Die <code>guestbook-page.php</code></h4>
<p>Auch hier gibt es wenig Verändeurngen. Im ersten Schritt holen wir das Formular vor die Ausgabe der Gästbuch-Einträge. Der folgende Code ist das Original und ruft das Formualr seit WordPress 3.0 auf.</p>
<pre><code>
&lt;?php comment_form(); ?&gt;
</code></pre>
<p>Diesen Code setzen wir nun vor die Ausgabe der Einträge, also vor</p>
<pre><code>
&lt;?php
	// You can start editing here -- including this comment!
?&gt;

&lt;?php if ( have_comments() ) : ?&gt;
</code></pre>
<p>Um nun aber die Felder richtig anzupassen und entsprechende Texte mitzugeben, müssen einige Paramter der Funktion übergeben werden. Die Funktion <code>comment_form()</code> lässt sehr viele Möglichkeiten zu und alle Parameter werden in einem Array übergeben. Im <a href="http://codex.wordpress.org/Function_Reference/comment_form">Codex</a> findet man die einzelnen Felder erläutert.<br />
In meinem Fall sieht der Abschnitt dann wie folgt aus.</p>
<pre><code>
&lt;?php
// You can start editing here -- including this comment!

// the form
$attr = array(
					'comment_field'        =&gt; '&lt;p class=&quot;comment-form-comment&quot;&gt;&lt;label for=&quot;comment&quot;&gt;' . _x( 'Guestbook entry', 'noun', 'twentyten' ) . '&lt;/label&gt;&lt;textarea id=&quot;comment&quot; name=&quot;comment&quot; cols=&quot;45&quot; rows=&quot;8&quot; aria-required=&quot;true&quot;&gt;&lt;/textarea&gt;&lt;/p&gt;',
					'label_submit'         =&gt; __( 'Post Entry', 'twentyten' ),
					'title_reply'          =&gt; __( 'Leave a Entry', 'twentyten' ),
					'title_reply_to'       =&gt; __( 'Leave a Entry to %s', 'twentyten' ),
					'cancel_reply_link'    =&gt; __( 'Cancel reply', 'twentyten' ),
				);
comment_form( $attr );

// list of guestbook entries
if ( have_comments() ) : ?&gt;
</code></pre>
<p>Das Beispieltemplate mit den Änderungen in der kompletten Sicht:</p>
<pre><code>
&lt;?php
/**
 * The template for displaying Comments.
 *
 * The area of the page that contains both current comments
 * and the comment form.  The actual display of comments is
 * handled by a callback to twentyten_comment which is
 * located in the functions.php file.
 *
 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.0
 */
?&gt;

			&lt;div id=&quot;comments&quot;&gt;
&lt;?php if ( post_password_required() ) : ?&gt;
				&lt;p class=&quot;nopassword&quot;&gt;&lt;?php _e( 'This post is password protected. Enter the password to view any comments.', 'twentyten' ); ?&gt;&lt;/p&gt;
			&lt;/div&gt;&lt;!-- #comments --&gt;
&lt;?php
		/* Stop the rest of comments.php from being processed,
		 * but don't kill the script entirely -- we still have
		 * to fully load the template.
		 */
		return;
	endif;
?&gt;

&lt;?php
// You can start editing here -- including this comment!

// the form
$attr = array(
					'comment_field'        =&gt; '&lt;p class=&quot;comment-form-comment&quot;&gt;&lt;label for=&quot;comment&quot;&gt;' . _x( 'Guestbook entry', 'noun', 'twentyten' ) . '&lt;/label&gt;&lt;textarea id=&quot;comment&quot; name=&quot;comment&quot; cols=&quot;45&quot; rows=&quot;8&quot; aria-required=&quot;true&quot;&gt;&lt;/textarea&gt;&lt;/p&gt;',
					'label_submit'         =&gt; __( 'Post Entry', 'twentyten' ),
					'title_reply'          =&gt; __( 'Leave a Entry', 'twentyten' ),
					'title_reply_to'       =&gt; __( 'Leave a Entry to %s', 'twentyten' ),
					'cancel_reply_link'    =&gt; __( 'Cancel reply', 'twentyten' ),
				);
comment_form( $attr );

// list of guestbook entries
if ( have_comments() ) : ?&gt;
			&lt;h3 id=&quot;comments-title&quot;&gt;&lt;?php
			printf( _n( 'One Entry in %2$s', '%1$s Entries in %2$s', get_comments_number(), 'twentyten' ),
			number_format_i18n( get_comments_number() ), '&lt;em&gt;' . get_the_title() . '&lt;/em&gt;' );
			?&gt;&lt;/h3&gt;

&lt;?php if ( get_comment_pages_count() &gt; 1 &amp;&amp; get_option( 'page_comments' ) ) : // Are there comments to navigate through? ?&gt;
			&lt;div class=&quot;navigation&quot;&gt;
				&lt;div class=&quot;nav-previous&quot;&gt;&lt;?php previous_comments_link( __( '&lt;span class=&quot;meta-nav&quot;&gt;&amp;larr;&lt;/span&gt; Older Entries', 'twentyten' ) ); ?&gt;&lt;/div&gt;
				&lt;div class=&quot;nav-next&quot;&gt;&lt;?php next_comments_link( __( 'Newer Entries &lt;span class=&quot;meta-nav&quot;&gt;&amp;rarr;&lt;/span&gt;', 'twentyten' ) ); ?&gt;&lt;/div&gt;
			&lt;/div&gt; &lt;!-- .navigation --&gt;
&lt;?php endif; // check for comment navigation ?&gt;

			&lt;ol class=&quot;commentlist&quot;&gt;
				&lt;?php
					/* Loop through and list the comments. Tell wp_list_comments()
					 * to use twentyten_comment() to format the comments.
					 * If you want to overload this in a child theme then you can
					 * define twentyten_comment() and that will be used instead.
					 * See twentyten_comment() in twentyten/functions.php for more.
                     * use param reverse_top_level to reverse the order of the guestbook-entries
					 */
					wp_list_comments( array( 'reverse_top_level' => TRUE, 'callback' =&gt; 'twentyten_comment' ) );
				?&gt;
			&lt;/ol&gt;

&lt;?php if ( get_comment_pages_count() &gt; 1 &amp;&amp; get_option( 'page_comments' ) ) : // Are there comments to navigate through? ?&gt;
			&lt;div class=&quot;navigation&quot;&gt;
				&lt;div class=&quot;nav-previous&quot;&gt;&lt;?php previous_comments_link( __( '&lt;span class=&quot;meta-nav&quot;&gt;&amp;larr;&lt;/span&gt; Older Entries', 'twentyten' ) ); ?&gt;&lt;/div&gt;
				&lt;div class=&quot;nav-next&quot;&gt;&lt;?php next_comments_link( __( 'Newer Entries &lt;span class=&quot;meta-nav&quot;&gt;&amp;rarr;&lt;/span&gt;', 'twentyten' ) ); ?&gt;&lt;/div&gt;
			&lt;/div&gt;&lt;!-- .navigation --&gt;
&lt;?php endif; // check for comment navigation ?&gt;

&lt;?php else : // or, if we don't have comments:

	/* If there are no comments and comments are closed,
	 * let's leave a little note, shall we?
	 */
	if ( ! comments_open() ) :
?&gt;
	&lt;p class=&quot;nocomments&quot;&gt;&lt;?php _e( 'Guestbook are closed.', 'twentyten' ); ?&gt;&lt;/p&gt;
&lt;?php endif; // end ! comments_open() ?&gt;

&lt;?php endif; // end have_comments() ?&gt;

&lt;/div&gt;&lt;!-- #comments --&gt;
</code></pre>
<h4>Die Sprache</h4>
<p>Nun müssen die Felder übersetzt werden. Dazu sollte ein Werkzeug genutzt werden - meine Empfehlung das Plugin für WordPress <a href="http://www.code-styling.de/deutsch/entwicklungen/wordpress-plugin-codestyling-localization">Localization</a>. Damit wird nun die Sprachdatei des TwentyTen Theme neu erstellt und die neuen Sprachschlüssel erkannt, welche dann übersetzt werden können.</p>
<p><strong>Hinweis:</strong> Damit wird ein Teil dem Update entnommen - die Sprachdatei. Daher ist es sauberer, wenn man ein Child-Theme anlegt, dort die beiden Templates ablegt und die Sprachdatei dort erzeugt. Hinweise, wie man ein Child-Theme erzeugt, findet ihr im Artikel <a href="http://bueltge.de/wordpress-child-themes-verstehen/1192/">WordPress Child Themes verstehen</a>. Trotzdem habe ich mal als Beispiel als Child Theme erzeugt. Es enthält die Sprachdateien und die Templates für das Gästebuch, sowie die notwendigen Dateien und Strings um ein Child Theme für diese Funktion zu erzeugen. Damit sollte es einfach möglich sein ein Child Theme mit der Möglichkeit der Erweiterung und einem Gästebuch zu erstellen. Der Download ist in den folgenden Zeilen zu finden.</p>
<h4>Abschluss</h4>
<p>Nun gilt es die beiden php-Templates und die Sprachdatei in das Theme zu kopieren und eine neue Seite über das Backend zu erstellen. Vergebt einen Namen für das Gästebuch, hinterlasst eventuell einen einführenden Text für die Gäste und wählt das neue Template &#8222;<em>Guestbook</em>&#8220; in der Meta-Box dieser Seite.<br />
Wenn alles ok ist, dann steht nun euer Gästebuch und kann genutzt werden. Keine Plugins, keine unnötigen Ressourcen oder Tabellen in der Datenbank. Aber, abhängig von Theme, was auch richtig ist, denn es handelt sich im Themen zum Design - der Inhalt steht in der Datenbank.</p>
<p>Für alle, die sich das Kopieren des Code ersparen wollen, lege ich die beiden Dateien als zip ab, so dass man sie downloaden und nutzen kann.</p>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="DT9BG8NJTXQN4">
<input type="image" src="http://bueltge.de/wp-content/images/donate.png" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal.">
<img class="ob" alt="Spendenbutton" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1"><br />
</form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und erm&ouml;glicht das weitere Arbeiten an freier Software.<br />
M&ouml;chtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<ul>
<li><strong>Template-Dateien</strong> im Download als zip-Datei: <a href="http://bueltge.de/wp-content/download/wp/guestbookthemes/guestbook-twentyten.zip">guestbook-twentyten.zip</a> - 2 kByte</li>
<li><strong>Child Theme inkl. Sprachdateien Deutsch</strong> etc. im Download als zip-Datei: <a href="http://bueltge.de/wp-content/download/wp/guestbookthemes/guestbook-tutorial.zip">guestbook-tutorial.zip</a> - 28 kByte</li>
</ul>
<p>Viel Freude damit und viel Erfolg beim Verstehen des Code und meiner kurzen Anleitung. Für Hinweise, Verbesserungen und Fehler steht die Kommentarfunktion zur Verfügung - vielen Dank.<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/ein-gaestebuch-im-wordpress-twentyten-theme/1216/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/ein-gaestebuch-im-wordpress-twentyten-theme/1216/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/gaestebuch/guestbook-twentyten.png" />
		<media:content url="http://bueltge.de/wp-content/images/gaestebuch/guestbook-twentyten.png" medium="image">
			<media:title type="html">Gästebuch mit TwentyTen Theme in WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de//www.paypal.com/de_DE/i/scr/pixel.gif" medium="image">
			<media:title type="html">Spendenbutton</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 Login-Seite anpassen #3</title>
		<link>http://bueltge.de/wordpress-login-seite-anpassen-3/1214/</link>
		<comments>http://bueltge.de/wordpress-login-seite-anpassen-3/1214/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 23:10:25 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1214</guid>
		<description><![CDATA[Schon mehrfach habe ich über die Möglichkeiten der Anpassungen des Login zum WordPress Backend berichtet, diverse Beiträge lassen sich dazu finden. Aktuell kommen trotzdem immer wieder Fragen und so möchte ich zwei einfache Möglichkeiten aufzeigen, so dass man mit wenig Aufwand das Login an die Site anpassen - ein schöner Mehrwert auch im Bezug auf Kundenprojekte, die so runder wirken, als wenn immer das WordPress Logo und der Link erscheint.]]></description>
			<content:encoded><![CDATA[<div class="contentnavi">
<h3>Mehr:</h3>
<ul>
<li><a href="http://bueltge.de/wordpress-25-und-theme-definiertes-login/617/">#1</a></li>
<li><a href="http://bueltge.de/wordpress-27-login-design-anpassen/846">#2</a></li>
<li>#3</li>
</ul>
</div>
<p>Schon mehrfach habe ich über die Möglichkeiten der Anpassungen des Login zum WordPress Backend berichtet, diverse Beiträge lassen sich dazu finden. Aktuell kommen trotzdem immer wieder Fragen und so möchte ich drei einfache Möglichkeiten aufzeigen, so dass man mit wenig Aufwand das Login an die Site anpassen - ein schöner Mehrwert auch im Bezug auf Kundenprojekte, die so runder wirken, als wenn immer das WordPress Logo und der Link erscheint.<br />
<span id="more-1214"></span><br />
Im ersten Schritt passe ich dazu das Logo auf der Login-Seite an. Dies wurde von mir <a href="http://bueltge.de/wordpress-27-login-design-anpassen/846/">schon mal beschrieben</a>, allerdings mehr im Hinblick auf das Ändern des kompletten Login-Screen und so hier eine einfachere Art und Weise, die schnell realisiert ist. Die Stylesheet-Anweisung soll einfach in den head geschrieben werden, im älteren Tutorial wird ein externes Stylesheet eingebunden.</p>
<h4>Logo ändern</h4>
<p>Im ersten Code-Beispiel binde ich das Favicon ein, ein schneller Weg ohne großen Aufwand. Alternativ kann natürlich auch ein Logo aus dem Theme eingebunden werden, dazu Code-Beispiel Nummer zwei. Jedes der folgenden Beispiele gehört in die functions.php des Themes.</p>
<pre><code class="php">
function fb_custom_login_logo() {
	$style = '&lt;style type=&quot;text/css&quot;&gt; h1 a { background: transparent url(' . get_bloginfo('url') . '/favicon.ico) no-repeat 30px center !important; } &lt;/style&gt;';
	echo $style;
}
add_action( 'login_head', 'fb_custom_login_logo' );
</code></pre>
<pre><code class="php">
function fb_custom_login_logo() {
	$style = '&lt;style type=&quot;text/css&quot;&gt; h1 a { background: transparent url(' . get_bloginfo('template_directory') . '/images/your-logo-image.png) no-repeat center top !important; } &lt;/style&gt;';
	echo $style;
}
add_action( 'login_head', 'fb_custom_login_logo' );
</code></pre>
<p>Nun haben wir zwar das Logo angepasst, aber der Name beim Hover-Effekt ist noch immer nicht der Site entsprechend. Also auch dafür eine Anpassung, wozu es einen Hook gibt.</p>
<h4>Namen ändern</h4>
<p>Diesen Hook sprechen wir an und geben in dem folgenden Schnippsel den Namen des Blog mit, der in der Datenbank gepflegt ist, der also über die Einstellungen erreichbar und veränderbar ist. Alternativ kann man natürlich auch statische Inhalte oder eigene Felder abfragen.</p>
<pre><code class="php">
function fb_login_headertitle() {
	$name = get_option('blogname');
	echo $name;
}
add_filter( 'login_headertitle', 'fb_login_headertitle' );
</code></pre>
<h4>Link ändern</h4>
<p>Zum Abschluss soll nun noch der Link ebenfalls angepasst werden, so dass ein Klick auf das Logo zum Frontend der Installation führt. Auch dafür hat WP einen Hook vorgesehen.</p>
<pre><code>
function fb_login_headerurl() {
	$url = bloginfo('url');
	echo $url;
}
add_filter( 'login_headerurl', 'fb_login_headerurl' );
</code></pre>
<p>Drei kleine einfache Möglichkeiten die in fast jedes Theme gehören und so das Login zur Site entsprechend anpassen. Der Kunde wird es danken und das Produkt ist einfach ein wenig runder. Viel Freude damit.<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-login-seite-anpassen-3/1214/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-login-seite-anpassen-3/1214/feed/</wfw:commentRss>
		<slash:comments>17</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 Child-Themes verstehen</title>
		<link>http://bueltge.de/wordpress-child-themes-verstehen/1192/</link>
		<comments>http://bueltge.de/wordpress-child-themes-verstehen/1192/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 16:10:57 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP3.0]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1192</guid>
		<description><![CDATA[Mit der Version 3.0 von WordPress wurde die viel erwartete Funktion der <a href="http://codex.wordpress.org/Child_Themes">Child Themes</a> integriert - viel erwartet? Ja, leider nicht in Deutschland. Ich vermute, dass es einfach daran liegt, dass der Markt der kostenpflichtigen Themes hier wesentlich kleiner ist und die meisten Entwickler komplett neue Themes erstellen und nicht auf eine Basis setzen. Aber egal, nun gibt es eine Lösung dafür und ich möchte am Beispiel den neuen Standard-Theme <a href="http://wordpress.org/extend/themes/twentyten">TwentyTen</a> zeigen, wie man es nutzt.

Die Funktion der Child Themes kann im Grunde bei jedem Theme angewandt werden und die neuen Funktionen erleichtern den Zugriff und das Erstellen einen Child Themes. Im Vorfeld gab es auch Möglichkeiten ein Theme zu verändern ohne die eigentlichen Dateien des Themes stark zu verändern. Mit Hilfe der Unterstützung von Child Themes ist dies nun aber komplett unabhängig und so kann man ein Theme nutzen, kann ohne Problem updaten, und trotzdem eigene Ideen realisieren.

In einigen Beiträgen des Netzes wurde die Child Themes schon angesprochen und ich habe bisher nur Artikel gefunden, die die Aktivierung und Änderung des Stylesheets ansprechen. Daher möchte ich dazu nur kurz eingehen, dass ist im Grunde auch recht einfach und dann die verschiedenen Möglichkeiten im Bezug der Template-Dateien aufzeigen.]]></description>
			<content:encoded><![CDATA[<p>Mit der Version 3.0 von WordPress wurde die viel erwartete Funktion der <a href="http://codex.wordpress.org/Child_Themes">Child Themes</a> integriert - viel erwartet? Ja, leider nicht in Deutschland. Ich vermute, dass es einfach daran liegt, dass der Markt der kostenpflichtigen Themes hier wesentlich kleiner ist und die meisten Entwickler komplett neue Themes erstellen und nicht auf eine Basis setzen. Aber egal, nun gibt es eine Lösung dafür und ich möchte am Beispiel den neuen Standard-Theme <a href="http://wordpress.org/extend/themes/twentyten">TwentyTen</a> zeigen, wie man es nutzt. Ein weiteres Beispiel findet ihr im übrigen in meinem <a href="http://wpbasis.de">WP Basis-Theme</a> (<a href="http://code.google.com/p/wp-basis-theme/source/browse/#svn/trunk/basis-child-example%3Fstate%3Dclosed">SVN</a>); aktuell nicht die html5-Version.</p>
<p>Die Funktion der Child Themes kann im Grunde bei jedem Theme angewandt werden und die neuen Funktionen erleichtern den Zugriff und das Erstellen einen Child Themes. Im Vorfeld gab es auch Möglichkeiten ein Theme zu verändern ohne die eigentlichen Dateien des Themes stark zu verändern. Mit Hilfe der Unterstützung von Child Themes ist dies nun aber komplett unabhängig und so kann man ein Theme nutzen, kann ohne Problem updaten, und trotzdem eigene Ideen realisieren.</p>
<p>In einigen Beiträgen des Netzes wurde die Child Themes schon angesprochen und ich habe bisher nur Artikel gefunden, die die Aktivierung und Änderung des Stylesheets ansprechen. Daher möchte ich dazu nur kurz eingehen, dass ist im Grunde auch recht einfach und dann die verschiedenen Möglichkeiten im Bezug der Template-Dateien aufzeigen.<br />
<span id="more-1192"></span></p>
<h4>Vorteile der Idee Child Theme</h4>
<p>Mehr oder weniger versucht jeder Administrator einer WordPress Installation etwas Individualismus zu leben. Dabei gehen nicht alle den Weg eines eigens erstellen Themes. Nicht selten wird ein freies oder kommerzielles Theme genutzt und dann an die eigenen Bedürfnisse angepasst. Dabei haben diverse Themes unterschiedliche Optionen, die aber trotzdem nur selten für das Anpassen ausreichen. Will man die einzelnen Darstellungen anpassen, beispielsweise die Sicht einer Kategorie, führt dies schnell zu sehr starken Veränderungen des Themes. Egal wie umfangreich, ein Update eines Themes ist nicht mehr ohne Probleme realisierbar. Hier kommen die Child Themes ins Spiel.</p>
<p>Mit einem Child Theme kann ein Theme angepasst werden oder man kann ein Theme als "Framework" nutzen und dabei komplett eigene Ideen umsetzen. Egal wie umfangreich, das eigentliche Theme bleibt unangetastet und kann ein Update erfahren.</p>
<h4>Nachteile der Verwendung Child Theme</h4>
<p>Wie so oft, wo Vorteile sind, sind auch Nachteile. Nicht selten sind die "Framework" Themes sehr umfangreich und bringen sehr viele Funktionen mit, die man als Laie nicht mehr überschauen kann und das Anpassen kann viel Mühe und Zeit kosten. Hier können auch die Child Themes nicht helfen.<br />
Einen großen Nachteile sehe ich  in der Performance, muss WordPress doch einnen Schritt weiter gehen und sich in zwei Bereichen nach den Templates umsehen und entsprechend ziehen.<br />
Im weiteren werden in der Regel die Stylesheets, wenn man auf sie aufbaut, via @-Regel eingebunden, die <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/">Nachteile in der Performance</a> hat.</p>
<p>In allen negativen Punkten kommt es auf Können und Wissen des Entwicklers an, also wie man das Theme bzw. Child Theme erstellt. Damit kann man die Punkte entkräften. Wichtig: die neue Funktion ist kein Freibrief, sie sollte genauso überlegt eingesetzt werden. Aber sie sorgt dafür, dass man sein erstandenes Theme nicht anfassen muss und trotzdem sehr überschaubar Anpassungen vornehmen kann.</p>
<h3>Child Theme anlegen</h3>
<p>Genug der Vorrede, die man sicher erweitern und diskutieren kann. Am Beispiel Theme TwentyTen soll nun eine angepasstes Theme entstehen - ich nenne es <em>TwentyTenJump</em> <img src='http://bueltge.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Im ersten Schritt wird ein neuer Ordner angelegt, in dem wir alle Template-Dateien, Bilder, Scripte und Stylesheets ablegen - was man im Grunde für das Child Theme benötigt. In diesem Beispiel ist das der Ordner <em>twentytenjump</em>. Um ein Child Theme zu erzeugen und WordPress dieses erkennbar zu machen bedarf es lediglich der <code>style.css</code> innerhalb der neuen Ordners mit diversen Strings in einem Kommentar.</p>
<p>Innerhalb der <code>style.css</code> sieht es wie folgt aus.</p>
<pre><code class="css">
@charset "UTF-8";

/**
 * Theme Name:     TwentyTenJump
 * Theme URI:      http://bueltge.de/?p=1192
 * Description:    Child theme for the Twenty Ten theme. Realized for a small tutorial to child themes in WordPress.
 * Author:         Frank Bültge
 * Author URI:     http://bueltge.de/
 * Template:       twentyten
 * Version:        0.1.0
 */

@import url('../twentyten/style.css');

</code></pre>
<p>Entscheidend sind die Schlüssel <em>Theme Name</em> und <em>Template</em>. Der Schlüssel <code>Template</code> verweist auf den <strong>Ordner-Namen</strong> des Theme, welches als Basis gezogen wird - in diesem Beispiel das Theme Twentyten.</p>
<p>Folgenden Aufbau habe ich nun innerhalb der Installation von WordPress.</p>
<ul>
<li><code>wp-content</code>
<ul>
<li><code>themes</code>
<ul>
<li><code>twentyten</code></li>
<p> (das Basis-Theme, inkl. aller Template-Dateien)</p>
<ul>
<li><code>style.css</code></li>
<li><code>index.php</code></li>
<li>...</li>
</ul>
<li><code>twentytenjump</code>
<ul>
<li><code>style.css</code> (muss diese Namenskonvetion erfüllen: <i>style.css</i>)</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Damit sind die ersten Voraussetzungen geschaffen und man kann das neue Theme im Backend von WordPress aktivieren.<br />
<strong>Achtung:</strong> der Verweis auf das Basis-Theme ist nicht sonderlich auffällig, so dass man die Abhängigkeit übersehen könnte. Darum also immer kontrolliert ein Theme löschen. Am verwendeten Theme gibt es keinerlei Hinweis, dass ein anderes Theme als Child-Theme auf dieses Theme zugreift.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/child-theme.jpg" alt="Child Themes in WordPress" /></p>
<h4>Am Stylesheet drehen</h4>
<p>Ab nun kann man jede beliebe Änderung in dem eigenen Stylesheet ablegen. Ebenfalls kann natürlich der Aufruf des Stylesheets <code>@import url('../twentyten/style.css');</code> aus dem Basis-Theme entfallen und man kann sich komplett eigene Stylesheet-Strukturen aufbauen.</p>
<p>Man nutzt quasi die Template-Dateien, den Aufbau und das PHP-KnowHow vom Basis Theme, in dem Fall Twenty Ten. Man kümmert sich ausschließlich um das Design und das im beliebigen Umfang. Beispielsweise könnte das im einfachsten Fall eine Farbänderung des Hintergrund sein und alternativ kann ein komplett eigenes Design kreiert werden.</p>
<h4>Templates ersetzen</h4>
<p>Die Funktionalität des Child Theme lässt aber mehr zu als das Änderung des Aussehen. So kann man bestehende Template-Dateien des Basis-Themes ersetzen. WordPress sucht quasi im ersten Schritt im übergeordneten Child Theme und dann im Basis-Theme nach dem möglichen Template. Durchläuft dabei die <a href="http://codex.wordpress.org/File:Template_Hierarchy.png">Hierarchie der Template-Dateien</a>.</p>
<p>An vielen Punkten vom Theme kann man via Hook eingreifen, was aber nicht jedem Nutzer liegt und kompliziert erscheint. So wird nicht selten die Ausgabe des Titel im <code>head</code> einer Website mit eigenen Funktionen oder von Plugins ersetzt. Man kann entweder via Hook den Titel bearbeiten oder die Ausgabe über eine Funktion steuern. Für das Beispiel soll nun der Titel mit einer Funktion aus einem Plugin ausgegeben werden. In dem Fall muss die <code>header.php</code> bearbeitet werden und darum muss man wie folgt vorgehen, so dass das Basis-Theme unangetastet bleibt.</p>
<p>Es ist lediglich die <code>header.php</code>, die den <code>head</code>-Abschnitt für das Theme enthält in das eigene Child Theme zu kopieren und hier kann sie beliebig bearbeitet werden. Ab nun zieht WordPress diese <code>header.php</code> und nicht mehr die Original-Datei aus dem Basis Theme Twenty Ten.</p>
<p>Damit kann nun auch die angesprochene Funktion in den Title integriert werden, ein Beispiel:</p>
<pre><code class="php">
&lt;title&gt;&lt;?php
	/*
	 * Print the &lt;title&gt; tag based on what is being viewed.
	 * We filter the output of wp_title() a bit -- see
	 * twentyten_filter_wp_title() in functions.php.
	 */
	if ( function_exists('seo_title_tag') )
		seo_title_tag();
	else
		wp_title( '|', true, 'right' );

	?&gt;&lt;/title&gt;
</code></pre>
<p>Das Basis-Theme bleibt unangetastet, kann weiterhin via Updates auf dem neusten Stand gehalten werden und ab nun zieht WordPress die <code>header.php</code> immer aus dem Child Theme.</p>
<p>Wie in diesem kleinen Beispiel kann man jedes Template ersetzen und so an die eigenen Anforderungen angepasst werden. Trotzdem sollte man bedenken, dass man das Template komplett ersetzt - in dem Beispiel-Fall würde man also ein Update der <code>header.php</code> nicht mitbekommen. Insofern kann es nützlich sein, wenn man auf diverse Bereiche besser via Hook zugreift und diese in eigenen Funktionen abbildet, dazu gleich mehr.</p>
<p><strong>Wichtig:</strong> eine Ausnahme ist die <code>functions.php</code>, dazu im Anschluss mehr.</p>
<h4>Templates erweitern</h4>
<p>Um eigene Anforderungen zu erfüllen, kann es sein, dass man neue Templates benötigt, Template-Dateien die es im Ist-Zustand nicht im Basis-Theme nicht gibt. Im Sinne der Hirarchie kann man immer erweitern. Beispielsweise besitzt Twenty Ten keine <code>home.php</code> - sollte man die aber definieren wollen, also dann wenn die definierte Home-Seite des Backend im Frontend geladen wird, dann kann man diese Datei einfach in das Child-Theme ablegen und WordPress zieht diese Datei, wenn der Zustand <code>is_home()</code> wahr ist.</p>
<p>Mit WordPress Version 3.0 gibt es aber eine weitere Möglichkeit außerhalb der Template-Hirarchie um eigene Templates einzubringen - <a href="http://bueltge.de/template-part-im-wordpress-template-laden/1157/" title="mehr Information in einem weiteren Beitrag"><code>get_template_part()</code></a>.<br />
Diese Funktion wird konsequent innerhalb von Twenty Ten verwendet - damit muss man in diversen Fällen keine eigenen Templates für den kompletten Aufruf anlegen, sondern lediglich den Abschnitt des Loop.<br />
Beispielsweise nutzt Twenty Ten für die Darstellung der Kategorie-Archive den Aufruf <code>get_template_part( 'loop', 'category' );</code>. Damit ist es möglich, dass in unserem Child Theme ein Template abgelegt wird, was diesen Loop bedient. Es ist also lediglich eine Datei <code>loop-category.php</code> anzulegen und dort alle notwendigen Infos abzulegen.<br />
Im folgenden Beispiel passe ich den Loop an, wenn man sich einem der vier Kategorien befindet. Weitere Änderungen sind möglich, so dass man volle Kontrolle und Flexibilität erhält.</p>
<pre><code class="php">
// Anpassungen des Loop
if ( in_category( array(47, 37, 27, 45) ) ) {
	query_posts( 'cat='.$cat.'&amp;posts_per_page=-1&amp;orderby=title&amp;order=ASC' );
}	else {
	query_posts( 'cat='.$cat.'&amp;posts_per_page=20&amp;paged='.$paged );
}
while ( have_posts() ) : the_post(); ?&gt;
</code></pre>
<p>Ähnlich könnte man so den Loop für die <code>index.php</code> anpassen - Template Datei <code>loop-index.php</code> wäre dann im Spiel</p>
<h4>Funktionen einbringen</h4>
<p>Natürlich kann man auch innerhalb des Child-Theme eigene Funktionen einbringen. Wenn man eine eigene <code>functions.php</code> im Child Theme ablegt, dann ersetzt diese Datei nicht die <code>functions.php</code> des Basis-Theme!<br />
Es werden immer die Funktionen des Basis-Theme genutzt; man muss sie via Hook deaktivieren. Die Möglichkeit wird auch in einer Doku in der Datei functions.php erklärt.</p>
<pre><code class="php">
add_action( 'after_setup_theme', 'my_child_theme_setup' );
function my_child_theme_setup() {
		// We are providing our own filter for excerpt_length (or using the unfiltered value)
		remove_filter( 'excerpt_length', 'twentyten_excerpt_length' );
		...
}
</code></pre>
<p>Innerhalb der Funktion <code>my_child_theme_setup()</code> kann man nun Funktione des Basis-Theme deaktivieren und eigene Funktionen einbringen.</p>
<p>Weitere Funktionen gehören in die <code>functions.php</code> des Child Themes - das Basis-Theme bleibt immer unangetastet. Im folgenden Code dazu ein Beispiel.<br />
Dabei deaktiviere ich die Funktion des Basis Theme Twenty Ten zur Länge des Excerpt und lade dazu eine eigene Funktion <code>twentytenjump_excerpt_length()</code> und es wird ein Widget eingebracht.</p>
<pre><code class="php">
&lt;?php
function twentytenjump_setup() {

	remove_filter( 'excerpt_length', 'twentyten_excerpt_length' );
	add_filter( 'excerpt_length', 'twentytenjump_excerpt_length' );

	add_action( 'widgets_init', 'register_limited_catagories_widget' );
}
add_action( 'after_setup_theme', 'twentytenjump_setup' );

function twentytenjump_excerpt_length( $length ) {
	return 10;
}

class limited_catagories_list_widget extends WP_Widget {

	function limited_catagories_list_widget(){
		$widget_ops = array( 'classname' =&gt; __('Selective categories'), 'description' =&gt; __('Show a list of Categories, with the ability to exclude categories') );

		$control_ops = array( 'id_base' =&gt; 'some-cats-widget' );
		$this-&gt;WP_Widget( 'some-cats-widget', __('Selective Catagories'), $widget_ops, $control_ops );
	}

	function form ( $instance){
		$defaults = array( 'title' =&gt; __('Catagories'), 'cats' =&gt; '', 'count' =&gt; 0 );
		$instance = wp_parse_args( (array) $instance, $defaults );
		$count = isset($instance['count']) ? (bool) $instance['count'] :false;
		?&gt;
		&lt;p&gt;
			&lt;label for=&quot;&lt;?php echo $this-&gt;get_field_id( 'title' ); ?&gt;&quot;&gt;&lt;?php _e( 'Title:' ); ?&gt;&lt;/label&gt;
			&lt;input id=&quot;&lt;?php echo $this-&gt;get_field_id( 'title' ); ?&gt;&quot; name=&quot;&lt;?php echo $this-&gt;get_field_name( 'title' ); ?&gt;&quot; value=&quot;&lt;?php echo $instance['title']; ?&gt;&quot; class=&quot;widefat&quot; /&gt;
		&lt;/p&gt;
		&lt;p&gt;
			&lt;input type=&quot;checkbox&quot; class=&quot;checkbox&quot; id=&quot;&lt;?php echo $this-&gt;get_field_id('count'); ?&gt;&quot; name=&quot;&lt;?php echo $this-&gt;get_field_name('count'); ?&gt;&quot;&lt;?php checked( $count ); ?&gt; /&gt;
			&lt;label for=&quot;&lt;?php echo $this-&gt;get_field_id('count'); ?&gt;&quot;&gt;&lt;?php _e( 'Show post counts' ); ?&gt;&lt;/label&gt;&lt;br /&gt;
		&lt;/p&gt;
		&lt;p&gt;
			&lt;label for=&quot;&lt;?php echo $this-&gt;get_field_id( 'cats' ); ?&gt;&quot;&gt;&lt;?php _e( 'Categories to exclude (comma separated list of Category-IDs): ' ); ?&gt;&lt;/label&gt;
			&lt;input id=&quot;&lt;?php echo $this-&gt;get_field_id( 'cats' ); ?&gt;&quot; name=&quot;&lt;?php echo $this-&gt;get_field_name( 'cats' ); ?&gt;&quot; value=&quot;&lt;?php echo $instance['cats']; ?&gt;&quot; class=&quot;widefat&quot; /&gt;
		&lt;/p&gt;
		&lt;?php
	}

	function update($new_instance, $old_instance) {
			$instance = $old_instance;
			$instance['title'] = strip_tags( $new_instance['title'] );
			$instance['count'] = !empty($new_instance['count']) ? 1 : 0;
			$instance['cats']  = strip_tags( $new_instance['cats'] );
			return $instance;
	}

	function widget($args, $instance){
		extract( $args );
		$title = apply_filters('widget_title', $instance['title'] );
		$c     = $instance['count'] ? '1' : '0';
		$cats  = $instance['cats'];
		echo $before_widget;
		if ( $title )
			echo $before_title . $title . $after_title;
		echo '&lt;ul&gt;';
		wp_list_categories(&quot;exclude=$cats&amp;title_li=&amp;show_count=$c&quot;);
		echo '&lt;/ul&gt;';
		echo $after_widget;
	}

}

function register_limited_catagories_widget(){
	register_widget('limited_catagories_list_widget');
}
?&gt;
</code></pre>
<h3>Fazit</h3>
<p>Ich meine aktuell, dass durch die Einführung des neuen Standard-Theme Twenty Ten sicher einige neue schöne Funktionen hinzugekommen sind. Ich denke aber ebenso, dass Twenty Ten sehr ungeeignet ist um die Arbeit von WordPress im Bereich des Themes zu verstehen. Gerade Einsteiger und PHP-Neulinge werden sich schwer tun. Trotzdem entstehen so neue Möglichkeiten und will man Child Themes sauber nutzen, dann kommt man um das Verständnis der Hooks in der WordPress API nicht herum. WordPress führt die Idee der Hooks konsequent fort, schon immer in Plugins beliebt, machen sie sich nun auch in Themes breit. Alles hat Vor- und Nachteile.<br />
Nutzt man aber ein gut gepflegtes Theme oder Framework, dann wird man die neuen Möglichkeiten schätzen und kann so immer ohne Probleme Updaten. Entscheidend wird das eigene Wissen um WordPress sein - je nach Interesse, Wissensstand und Arbeitsweise kann man eigene Themes erstellen. Man sollte sich im Vorfeld Gedanken machen und nicht blind loslegen und wie so oft, am Theme schrauben.</p>
<h3>Download:</h3>
<p>Zum Abschluss noch das Theme mit den entsprechenden Template-Dateien als Downlaod, so dass man einen kleinen Start zum Spielen hat.</p>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="DT9BG8NJTXQN4">
<input type="image" src="http://bueltge.de/wp-content/images/donate.png" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal.">
<img class="ob" alt="Spendenbutton" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1"><br />
</form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und erm&ouml;glicht das weitere Arbeiten an freier Software.<br />
M&ouml;chtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.<br />
Download als zip-Datei: <a href="http://bueltge.de/wp-content/download/wp/themes/twentytenjump.zip">twentytenjump.zip</a> - 5 kByte<br />
Einen Stand online einsehbar und erweiterbar, eventuell gepflegt findest du auf Github: <a href="https://github.com/bueltge/TwentyTenJump" title="bueltge / TwentyTenJump">github.com/bueltge/TwentyTenJump</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-child-themes-verstehen/1192/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-child-themes-verstehen/1192/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/child-theme.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/child-theme.jpg" medium="image">
			<media:title type="html">Child Themes in WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de//www.paypal.com/de_DE/i/scr/pixel.gif" medium="image">
			<media:title type="html">Spendenbutton</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 Custom Post Type und Permalinks</title>
		<link>http://bueltge.de/wordpress-custom-post-type-permalinks/1194/</link>
		<comments>http://bueltge.de/wordpress-custom-post-type-permalinks/1194/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 09:42:46 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP3.0]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1194</guid>
		<description><![CDATA[Bei der Verwendung von Custom Post Types und aktiven Permalinks muss die neue Erzeugung der Permalinks beachtet werden! Die Rewrite Rules von WordPress müssen neu geschrieben werden.]]></description>
			<content:encoded><![CDATA[<p>Seit Version 3.0 von WordPress werden die <a href="http://wpengineer.com/impressions-of-custom-post-type/">Custom Post Types</a> unterstützt und man kann eigene Typen von Inhalten definieren - eher zu verstehen wie Seiten, nicht wie Artikel! Dabei kann automatisiert die Permalink-Struktur von WordPress unterstützt werden. Die bedeutet, wenn man einen eigenen Post Type anlegt, dann kann dieser bei aktiver Verwendung von Permalinks genutzt werden.</p>
<p>Aber die Permalinks klappen erst dann, wenn die Rewrite Rules von WordPress neu erzeugt wurden <span id="more-1194"></span>- vermutlich kommen da die vielen Fragen her. Wenn man einen neuen Post Type anlegt und damit spielt, kommt oft die Frage, warum der Aufruf des Custom Beitrags auf einen 404 führt - WordPress kennt die URL-Struktur in den Permalinks nicht und immer wieder vergisst man, dass man die Rewrite Rules neu erzeugen muss.<br />
Im einfachsten Fall speichert man das Setzen der Permalinks in den Einstellungen neu - alternativ kann man in sein Plugin oder das Theme die Funktion <code>flush_rewrite_rules()</code> integrieren. Diese bewirkt das erneute Setzen der Rewrite Rules.<br />
<strong>Wichtig</strong> ist, dies nur beim Aktivieren bzw. Deaktivieren des Plugins oder Themes zu tun; ansonsten wird man schnell in die Performance-Krenze laufen.</p>
<p>* Ich überlege, ob ich ein Plugin mit Verwendung der Custom Post Types bereit stelle, wobei ich verschiedene Erweiterungen integriert habe, die mir typisch in der Verwendung der Post Types erscheinen. Wie ist dazu die Meinung, oder ist dies eher Entwicklerwerkzeug und bei diesen Anwendern bekannt und damit für die Leser uninteressant oder zu viel 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-custom-post-type-permalinks/1194/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-custom-post-type-permalinks/1194/feed/</wfw:commentRss>
		<slash:comments>27</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-Theme in Abhängigkeit des Titel</title>
		<link>http://bueltge.de/wordpress-theme-in-abhaengigkeit-des-titel/397/</link>
		<comments>http://bueltge.de/wordpress-theme-in-abhaengigkeit-des-titel/397/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 23:42:05 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=397</guid>
		<description><![CDATA[Individuelle Styles für jede Seite sind aktuell ein Trend. WordPress bietet verschiedene Ansätze dafür, eine Möglichkeit will ich aufzeigen.]]></description>
			<content:encoded><![CDATA[<p>Das Blog hat ein Theme und bekommt für jede Seite ein extra Stylesheet. Dieser aktuelle Trend der Individualität für jeden Inhalt wird auf diversen Sites diskutiert. Auch mit WordPress kann man dies tun; verschiedene Möglichkeiten gibt es. Eine Möglichkeit ist es auf Basis des Titels ein individuelles Stylesheet zu erstellen.<br />
Im Standard gibt die Klassenvergabe der Funktion <a href="http://codex.wordpress.org/Template_Tags/body_class" title="mehr dazu im Codex von WordPress"><code>body_class()</code></a> schon eine Menge an Möglichkeiten. Noch mehr Individualität kann man über den Titel oder die ID erreichen.<br />
Lohnt sicher nicht im klassischen Blogumfeld aber für eine Seite mit überschaubaren Content und dem wunschgemäßen Unterschied funktioniert meine Idee recht gut. Wie habe ich es in dem Fall umgesetzt?<br />
<span id="more-397"></span><br />
Wenn eine Seite geladen wird, dann kann man ja den Title übergeben. Wenn man diesen in den Body-Tag als ID oder class übernimmt, und dann jeweils für die <code>ID</code> oder <code>class</code> eine Style erstellt, wird das passende Design geladen.</p>
<p>Alternativ kann man mit der ID der Seite oder des Beitrags arbeiten, Funktion the_ID() übergibt diese. Aufpassen, IDs und Klassen dürfen nicht mit einem Zahlenweert beginnen und daher muss ein String ergänzt werden, beispielsweise </p>
<pre><code class="php">
&lt;div id="page-&lt;?php the_ID(); ?&gt;"&gt;
</code></pre>
<p>Als letzte Alternative möchte ich erwähnen, dass man die Funktion <code>body_class()</code> via Hook mit eigenen Klassen erweitern kann. So kann man auch den Titel einer Seite/Beitrags via Hook in diese Funktion bringen und ausgeben lassen.</p>
<pre><code class="php">
function fb_title_body_class($classes) {
	global $post;

	$classes[] = sanitize_title_with_dashes( get_the_title( $post->ID ) );

	return $classes;
}
add_filter( 'body_class', 'fb_title_body_class' );
</code></pre>
<p>Im folgenden der einfachste Fall via Titel, so dass man lediglich diese Klasse ausgibt und <code>body_class()</code> wird nicht genutzt.</p>
<h4>Mit Hilfe des Titel</h4>
<p>in den header des Themes kommt das Stylesheet:</p>
<pre><code>
&lt;link rel="stylesheet" href="&lt;?php bloginfo('template_url'); ?&gt;/custom.css" type="text/css" media="screen" /&gt;
</code></pre>
<p>Alternativ wird dieses via Hook <code>wp_head</code> eingebunden, wenn die entsprechende Seite geladen wird, so lädt man das explizite Stylesheet nur, wenn es benötigt wird und der header ist lesbar. Alles spielt sich in der <code>functions.php</code> des Themes ab.</p>
<p>in den body-Tag der <code>page.php</code> kommt der Titel der Seite:</p>
<pre><code>&lt;body class="&lt;?php echo sanitize_title_with_dashes( get_the_title() ); ?&gt;"&gt;</code></pre>
<p>Damit hat die Seite "My Home" den body-Tag:</p>
<pre><code>
&lt;body class="my-home"&gt;
und so weiter...
</code></pre>
<p>in der <code>custom.css</code> definierst du nun alle Styles für class home: bsp.</p>
<pre><code>
.my-home a { color: #090; text-decoration: none; }
.my-home a:visited { color: #999; text-decoration: none; }
.my-home a:hover { color: #f60; text-decoration: none; }
</code></pre>
<p>in dem original-Theme sieht das so aus:</p>
<pre><code>
a { color: #009; text-decoration: underline; }
a:visited { color: #999; text-decoration: underline; }
a:hover { color: #c00; text-decoration: underline; }
</code></pre>
<p>Wie ich finde, ein Ansatz mit viel Potential und dies überlasse ich gern eurer Kreativität. Wer also mit WordPress für jede Seite ein anders Stylesheet laden möchte, hat so einen Ansatz für eine Lösung.</p>
<h4>Plugin-Lösung</h4>
<p>Auf Wunsch einiger Leser habe ich ein kleines Plugin erstellt, welches den Titel des Beitrags in die Funktion body_class() schreibt. Man muss also lediglich das Plugin aktivieren und die WordPress Standard-Funktion body_class() im body-Tag verwenden - wenn sie nicht schon im Theme integriert ist. In der Regel findet das im Template <code>header.php</code> statt.</p>
<pre><code class="php">
&lt;body &lt;?php body_class(); ?&gt;&gt;
</code></pre>
<p>Die Version 0.1 sieht wie folgt aus:</p>
<pre><code>
&lt;?php
/**
 * Plugin Name: Title 2 body_class
 * Plugin URI: http://bueltge.de/wordpress-theme-in-abhaengigkeit-des-titel/397/
 * Text Domain: title2bodyclass
 * Domain Path: /languages
 * Description: Add the title of the post to the boy_class-function
 * Author: Frank B&amp;uuml;ltge
 * Version: 0.1
 * Author URI: http://bueltge.de/
 * Donate URI: http://bueltge.de/wunschliste/
 * License: GPL
 * Last change: 26.07.2010 10:37:23
 */ 

/**
License:
==============================================================================
Copyright 2010 Frank Bueltge  (email : frank@bueltge.de)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Requirements:
==============================================================================
This plugin requires WordPress &gt;= 2.8 and tested with PHP Interpreter &gt;= 5.2.9
*/

if ( !class_exists('title2body_class') ) {

	global $wp_version;
	if ( !function_exists ('add_action') || version_compare($wp_version, &quot;2.8alpha&quot;, &quot;&lt;&quot;) ) {
		if (function_exists ('add_action'))
			$exit_msg = 'The plugin requires WordPress 2.8 or newer. &lt;a href=&quot;http://codex.wordpress.org/Upgrading_WordPress&quot;&gt;Please update WordPress&lt;/a&gt; or delete the plugin.';
		else
			$exit_msg = '';
		header('Status: 403 Forbidden');
		header('HTTP/1.1 403 Forbidden');
		exit($exit_msg);
	}

	class title2body_class{

		function __construct() {

			add_action( 'body_class', array( &amp;$this, 'title_body_class' ) );
		}

		function title_body_class($classes) {
			global $post;

			$classes[] = sanitize_title_with_dashes( get_the_title( $post-&gt;ID ) );

			return $classes;
		}
	}

	function title2body_class_start(){
		new title2body_class();
	}

	add_action('plugins_loaded', 'title2body_class_start');
}
?&gt;
</code></pre>
<p>Download des Plugins <strong>Title 2 body_class</strong>: <a href="http://bueltge.de/wp-content/download/wp/plugins/title2body-class.zip">title2body-class.zip</a> (1 kByte)<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-theme-in-abhaengigkeit-des-titel/397/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-theme-in-abhaengigkeit-des-titel/397/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>Photoblog Theme Greyfoto in neuer Version</title>
		<link>http://bueltge.de/photoblog-theme-greyfoto-in-neuer-version/1175/</link>
		<comments>http://bueltge.de/photoblog-theme-greyfoto-in-neuer-version/1175/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 13:29:54 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1175</guid>
		<description><![CDATA[Das Theme Greyfoto in neuer Version verfügbar - Betatester gesucht!]]></description>
			<content:encoded><![CDATA[<p>Da das <a href="http://bueltge.de/photoblog-theme-greyfoto/837/">Theme Greyfoto</a> eine große Resonanz erfahren hat,  pflege ich es bisher noch. Aktuell habe ich eine neue Version erstellt und in Übersee wurde es bereits bei einigen Anwendern getestet. Auch mit der neuen Version 3.0 von WordPress wird es laufen und es werden einige Funktionen unterstützt.<br />
<span id="more-1175"></span><br />
Auf den ersten Blick werden nur wenige Anwender Unterschiede erkennen, unter der Haube hat sich aber einiges getan und daher wäre ich dankbar, wenn ihr testet und mir eine Rückmeldung gebt. Die neue <strong>Version 2.3.2</strong> ist auf der <a href="http://bueltge.de/photoblog-theme-greyfoto/837/">Seite zum Theme</a> zu bekommen - hinterlasst bitte auch dort eure Hinweise oder direkt via Mail an mich. Ich werde dann versuchen, dass ich es zeitnah bearbeiten kann.</p>
<p><a href="http://bueltge.de/photos/"><img class="centered" src="http://bueltge.de/wp-content/download/wp/themes/greyfoto.jpg" alt="Screenshot Greyfoto" /></a><br />
<cite><a href="http://bueltge.de/photos/">Demo des Photoblog</a></cite><br />
Vielen Dank schon jetzt an die Tester.<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/photoblog-theme-greyfoto-in-neuer-version/1175/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/photoblog-theme-greyfoto-in-neuer-version/1175/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/download/wp/themes/greyfoto.jpg" />
		<media:content url="http://bueltge.de/wp-content/download/wp/themes/greyfoto.jpg" medium="image">
			<media:title type="html">Screenshot Greyfoto</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>Codeschnippsel zu WordPress Kategorien</title>
		<link>http://bueltge.de/codeschnippsel-zu-wordpress-kategorien/1163/</link>
		<comments>http://bueltge.de/codeschnippsel-zu-wordpress-kategorien/1163/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 03:23:51 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1163</guid>
		<description><![CDATA[Die Kategorien von WordPress können ein mächtiges Werkzeug sein, man kann aber auch daran verzweifeln, dazu ein anderes mal vielleicht mehr, aber es gibt auch nicht für jede Anwendung einen entsprechenden Template-Tag von WordPress und so muss man sich etwas bauen. Zwei kleine Sachen, die ich in letzter Zeit gebraucht habe und die ich nicht verstauben lasse will stehen nun in diesem Beitrag.]]></description>
			<content:encoded><![CDATA[<p>Die Kategorien von WordPress können ein mächtiges Werkzeug sein, man kann aber auch daran verzweifeln, dazu ein anderes mal vielleicht mehr, aber es gibt auch nicht für jede Anwendung einen entsprechenden Template-Tag von WordPress und so muss man sich etwas bauen. Zwei kleine Sachen, die ich in letzter Zeit gebraucht habe und die ich nicht verstauben lasse will stehen nun in diesem Beitrag.<br />
<span id="more-1163"></span></p>
<h4>Liste aller Unterkategorien</h4>
<p>Manchmal braucht man einfach nur eine Liste alle untergeordneten Kategorien, fragt nicht warum. Die Anforderungen von Projekten kann sehr vielfältig sein, ebenso der Lösungsweg und in meinem Fall ist ein kleiner Code-Schnippsel entstanden, die sich um die Ausgabe der Subcategories kümmert; zum mitnehmen, spielen, verbessern und erweitern.</p>
<pre><code class="php">
$echo = '&lt;ul&gt;' . "\n";
$childcats = get_categories('child_of=' . $cat . '&#038;hide_empty=1');
foreach ($childcats as $childcat) {
	if (1 == $childcat-&gt;category_parent) {
		$echo .= "\t" . '&lt;li&gt;&lt;a href="' . get_category_link($childcat-&gt;cat_ID).'" title="' . $childcat-&gt;category_description . '"&gt;';
		$echo .= $childcat-&gt;cat_name . '&lt;/a&gt;';
		$echo .= '&lt;/li&gt;' . "\n";
	}
}
$echo .= '&lt;/ul&gt;' . "\n";
echo $echo;
</code></pre>
<h4>Abfrage, ob in Kategorie oder Subkategorie</h4>
<p>Die zweite Sache brauchte ich nicht erstellen, die habe ich bei <a href="http://valendesigns.com/wordpress/is-category-or-subcategory-wp-function/">valen</a> gefunden - klein aber fein. Sie gibt zurück, ob man sich in einer untergeordneten- oder der Haupt-Kategorie befindet. Brauchen kann man so was, wenn man komplexe Strukturen aufbaut und steuern will. Als Übergabe muss die ID der Kategorie mitgegeben werden, kein Slug!</p>
<pre><code class="php">
function is_category_or_subcategory($catID = 0) {
	foreach (get_the_category() as $cat) {
		if ( $catID == $cat-&gt;cat_ID || cat_is_ancestor_of($catID, $cat) )
			return true;
	}
	return false;
}
</code></pre>
<p>In dem Zusammenhang im übrigen der Hinweis auf die Funktion <a href="http://codex.wordpress.org/Function_Reference/cat_is_ancestor_of"><code>cat_is_ancestor_of()</code></a> - sehr mächtig und nützlich.<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/codeschnippsel-zu-wordpress-kategorien/1163/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/codeschnippsel-zu-wordpress-kategorien/1163/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Template-Part im WordPress Template laden</title>
		<link>http://bueltge.de/template-part-im-wordpress-template-laden/1157/</link>
		<comments>http://bueltge.de/template-part-im-wordpress-template-laden/1157/#comments</comments>
		<pubDate>Thu, 06 May 2010 09:39:11 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP3.0]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1157</guid>
		<description><![CDATA[Wer sein Theme für WordPress recht flexibel gestaltet wollte und die Modularisierung liebt, der musste bisher immer über den Pfad gehend das Template einbinden. Mit WordPress 3.0 wird dies anders sein und es steht eine Funktion bereit, die das laden von Templates einfach macht.]]></description>
			<content:encoded><![CDATA[<p>Wer sein Theme für WordPress recht flexibel gestalten wollte und die Modularisierung liebt, der musste bisher immer über den Pfad gehend das Template einbinden. Mit WordPress 3.0 wird dies anders möglich sein und es steht eine Funktion bereit, die das laden von Templates einfach macht.<br />
<span id="more-1157"></span></p>
<h4>Am Beispiel verstehen</h4>
<p>Stellen wir uns vor, es soll eine Navigation mehrfach verwendet werden - aber an unterschiedlichen Positionen und an unterschiedlicher Stelle des Markup. Hier würde es also nicht ausreichen, wenn man via CSS das Aussehen beeinflusst. In den meisten Fällen würde man wohl die Navigation in ein eigenes Template auslagern, zum Beispiel die <code>nav.php</code>.  In dieser Datei befindet sich das HTML-Markup und die nötigen Template Tags um eine Navigation zu erstellen. Diese Datei würde man dann inkludieren. Bis WordPress 3.0 wurde das üblicherweise wie folgt getan: <code>include( TEMPLATEPATH . '/navi.php' );</code></p>
<h4>Funktion <code>get_template_part()</code></h4>
<p>Mit WordPress 3.0 soll in diese Form der Modularisierung mehr Bewegung kommen und so kann man mit Hilfe der Funktion <code>get_template_part()</code> Templates ansprechen. Die Funktion erlaubt die Übergabe von zwei Parametern:</p>
<pre><code class="php">
/**
 * @uses locate_template()
 * @since 3.0.0
 * @uses do_action() Calls 'get_template_part{$slug}' action.
 *
 * @param string $slug The slug name for the generic template.
 * @param string $name The name of the specialised template.
 */
get_template_part( $slug, $name = null )
</code></pre>
<p>und besitzt einen Hook <code>get_template_part_$slug</code>, den man ansprechen kann.</p>
<p>Kommen wir nun zurück auf das obige Beispiel der Navigation, die nun mit Hilfe der neuen Funktion wie folgt inkludiert wird: <code>get_template_part( 'navi' );</code>. In diesem Fall wurde lediglich der Parameter <code>slug</code> übergeben - <code>navi</code> - der nun dafür sorgt, dass die <code>navi.php</code> geladen wird.<br />
Im nächsten Schritt soll die Navi, welche explizit für die Sidebar erstellt wurde, genutzt werden. Der Source ist in der <code>navi-sidebar.php</code> gehalten und damit sieht der Aufruf wie folgt aus: <code>get_template_part( 'navi', 'sidebar' );</code>. Der Aufbau der Template-Datei muss also aus <code><em>slug</em>-<em>name</em>.php</code> entstehen.</p>
<p>So lassen sich quasi beliebige Muster erstellen, die vor allem dann an Wert gewinnen, wenn es um Wiederverwendung geht oder wenn man mit Hilfe von Child-Themes arbeitet, da man so auf das Vater-Theme zugreifen kann und doch recht flexibel die eigenen Templates erstellen kann.</p>
<h4>Reihenfolge beim Laden</h4>
<p>WordPress nutzt beim Laden der Templates eine Hierarchie, so dass man auf verschiedene Templates zugreifen kann, ein Beispiel soll es verdeutlichen. Das Vater-Theme befindet sich in <code>wp-content/themes/</code> und benutzt den Ordner <code>wpbasis</code>, das Child-Theme ist im Ordner <code>wpbasischild</code> zu finden. Nun gibt es in einem der Templates den Aufruf <code>&lt;?php get_template_part( 'navi', 'index' ); ?&gt;</code>. Nun wird nach der <code>navi-index.php</code> gesucht mit folgendem Muster:</p>
<ol>
<li><code>wp-content/themes/wpbasischild/navi-index.php</code></li>
<li><code>wp-content/themes/wpbasischild/navi.php</code></li>
<li><code>wp-content/themes/wpbasis/navi-index.php</code></li>
<li><code>wp-content/themes/wpbasis/navi.php</code></li>
</ol>
<p>Auch hier also einige Neuerungen unter der Haube, die für Theme-Autoren recht nützlich sein können. Da in letzter Zeit die Nutzung von Child-Themes gewachsen ist, sicher eine nützliche Funktion.<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/template-part-im-wordpress-template-laden/1157/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/template-part-im-wordpress-template-laden/1157/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Theme Documentation in neuer Version</title>
		<link>http://bueltge.de/theme-documentation-in-neuer-version/1103/</link>
		<comments>http://bueltge.de/theme-documentation-in-neuer-version/1103/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 00:25:37 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1103</guid>
		<description><![CDATA[Mein Theme Documentation gibt es nun in einer neuen Version und unterstützt damit einige neuen Möglichkeiten aus WordPress 2.8 und 2.9. Vieles wurde überarbeitet und die Mehrsprachigkeit ist weiterhin gegeben.]]></description>
			<content:encoded><![CDATA[<p>Ich habe in letzter Zeit diverse Plugins gepflegt, diverse Veränderungen in WordPress 2.9 haben einiges an Zeit erfordert und trotzdem bin ich noch nicht mit allen Plugins durch.</p>
<p>Parallel habe ich aber auch das Theme <a href="http://bueltge.de/documentations-theme-fuer-wordpress/469/">Documentation</a> auf einen neuen Stand gehoben und einige kleine Erweiterungen integriert. Liegt zum einem daran, dass ich das Theme in einigen Bereichen einsetze, wo explizit Neuentwicklungen dokumentiert werden und zum anderen, dass es einige Anfragen per Mail gab. Im Grunde pflege ich keine Themes, der Zeitaufwand ist von mir einfach nicht zu stemmen - in diesem Fall also eine Ausnahme und nun viel Freude mit dem Theme <a href="http://bueltge.de/documentations-theme-fuer-wordpress/469/">Documentation</a>.<br />
<span id="more-1103"></span><br />
Aktuell unterstützt das Plugin einige Funktionen, eine Auswahl:<br />
<img class="alignright" src="http://bueltge.de/wp-content/download/wp/themes/documentation20.png" alt="Documentation Theme für WordPress" /></p>
<ul>
<li>Post-Thumbnails für Beiträge</li>
<li>Übersicht der Post-Thumbnails im Edit-Bereich des Admin</li>
<li>Angepasstes Login-Design</li>
<li>Mehrsprachigkeit vollständig unterstützt, deutsches Sprachfile liegt bei</li>
<li>Kommentarfunktion mit allen Möglichkeiten, die WordPress seit 2.8 mitbringt</li>
<li>Filter der Kommentare in Trackback, Pingback und Kommentare; inkl. Zähler</li>
<li>2 Widget-Bereiche zum Trennen der Ausgabe:
<ol>
<li>Nicht sichtbar auf Seiten und Beiträgen</li>
<li>Nur sichtbar auf Seiten und Beiträgen</li>
</ol>
</li>
<li>Angepasster Title in Abhängigkeit der dargestellten Inhalte</li>
<li>Abfrage <a href="http://wpml.org/">WPML Plugin</a> bei Mehrsprachigkeit im Sidebar</li>
<li>Minimiertes Stylesheet; Arbeitsdatei liegt jeweils bei als <code>...-dev.css</code></li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/theme-documentation-in-neuer-version/1103/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/theme-documentation-in-neuer-version/1103/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/download/wp/themes/documentation20.png" />
		<media:content url="http://bueltge.de/wp-content/download/wp/themes/documentation20.png" medium="image">
			<media:title type="html">Documentation Theme für WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Post-Thumbnails in der Artikelansicht</title>
		<link>http://bueltge.de/post-thumbnails-in-der-artikelansicht/1099/</link>
		<comments>http://bueltge.de/post-thumbnails-in-der-artikelansicht/1099/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 09:11:27 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1099</guid>
		<description><![CDATA[Mit WordPress Version 2.9 wurde die Funktion der Post Thumbnail eingeführt. Über diese Funktion und dessen Randthemen wurde bereits hier und in anderen Blogs viel geschrieben. Von Vorteil empfinde ich es aber, wenn man direkt in der Übersicht der Artikel und Seiten das zugeordnete Thumbnail sieht, so dass man leicht die Verwendung zuordnen kann. Daher möchte ich einen kleinen Codeschnippsel vorstellen, der genau das macht.]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress Version 2.9 wurde die Funktion der Post Thumbnail eingeführt. Über diese Funktion und dessen Randthemen wurde <a href="http://bueltge.de/wordpress-post-thumbnail-abwaertskompatibel/1079/">bereits hier</a> und in anderen Blogs viel geschrieben. Von Vorteil empfinde ich es aber, wenn man direkt in der Übersicht der Artikel und Seiten das zugeordnete Thumbnail sieht, so dass man leicht die Verwendung zuordnen kann. Daher möchte ich einen kleinen Codeschnippsel vorstellen, der genau das macht.<br />
<span id="more-1099"></span><br />
Die Funktion habe ich noch ein wenig ausgebaut, so dass nicht nur das Post Thumbnail gezogen wird, sondern wenn dieses nicht vergeben wurde, aber Bilder über die Upload-Funktion zum Post zugeordnet wurden, dann wird das erste Bild dieser Bilder gezogen. Dies ist vor allem dann interessant, wenn man vor WordPress 2.9 mit den Bildern aus der Mediathek das <a href="http://bueltge.de/wordpress-attachment-metadaten-nutzen/625/">gleiche Ziel erreicht hat</a>, wie mit der neuen Funktion des Post Thumbnail.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/post-thumbnail-edit.png" alt="Pos Thumbnail in der Übersicht der Beiträge" width="450" height="360" /></p>
<p>Der obige Screenshot sollte verdeutlichen, was die kleine Erweiterung macht. Der folgende Code muss lediglich in ein Plugin ausgelagert oder in die <code>functions.php</code> des Themes kopiert werden.</p>
<pre><code>
if ( !function_exists('fb_AddThumbColumn') &amp;&amp; function_exists('add_theme_support') ) {

	// for post and page
	add_theme_support('post-thumbnails', array( 'post', 'page' ) );

	function fb_AddThumbColumn($cols) {

		$cols['thumbnail'] = __('Thumbnail');

		return $cols;
	}

	function fb_AddThumbValue($column_name, $post_id) {

			$width = (int) 35;
			$height = (int) 35;

			if ( 'thumbnail' == $column_name ) {
				// thumbnail of WP 2.9
				$thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true );
				// image from gallery
				$attachments = get_children( array('post_parent' =&gt; $post_id, 'post_type' =&gt; 'attachment', 'post_mime_type' =&gt; 'image') );
				if ($thumbnail_id)
					$thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
				elseif ($attachments) {
					foreach ( $attachments as $attachment_id =&gt; $attachment ) {
						$thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
					}
				}
					if ( isset($thumb) &amp;&amp; $thumb ) {
						echo $thumb;
					} else {
						echo __('None');
					}
			}
	}

	add_filter( 'manage_posts_columns', 'fb_AddThumbColumn' );
	add_action( 'manage_posts_custom_column', 'fb_AddThumbValue', 10, 2 );
}
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/post-thumbnails-in-der-artikelansicht/1099/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/post-thumbnails-in-der-artikelansicht/1099/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/post-thumbnail-edit.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/post-thumbnail-edit.png" medium="image">
			<media:title type="html">Pos Thumbnail in der Übersicht der Beiträge</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 IDs, Classes &amp; Tag Referenz</title>
		<link>http://bueltge.de/wordpress-ids-classes-tag-referenz/1102/</link>
		<comments>http://bueltge.de/wordpress-ids-classes-tag-referenz/1102/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 09:45:50 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Linktipp]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1102</guid>
		<description><![CDATA[Wer mit Stylesheets im Bezug auf WordPress Themes arbeitet, der braucht immer diverse Klassen und IDs, um das Design an die jeweiligen Anforderungen anzupassen. Aktuell gibt es eine Referenz als PDF-Dokument  zum freien Download im Blog von Banhawi. Wer also ebenso etwas schnelles zum Nachschlagen benötigt und nicht erst Firebug und co. benutzen will, der sollte mal dort  vorbei schauen.]]></description>
			<content:encoded><![CDATA[<p>Wer mit Stylesheets im Bezug auf WordPress Themes arbeitet, der braucht immer diverse Klassen und IDs, um das Design an die jeweiligen Anforderungen anzupassen.<br />
Aktuell gibt es eine Referenz als <a href="http://banhawi.com/2010/02/banhawis-wordpress-ids-classes-tags-referenece/">PDF-Dokument</a> zum freien Download im <a href="http://banhawi.com/2010/02/banhawis-wordpress-ids-classes-tags-referenece/">Blog von Banhawi</a>. Wer also ebenso etwas schnelles zum Nachschlagen benötigt und nicht erst Firebug und co. benutzen will, der sollte mal <a href="http://banhawi.com/2010/02/banhawis-wordpress-ids-classes-tags-referenece/">dort</a> vorbei schauen.<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-ids-classes-tag-referenz/1102/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-ids-classes-tag-referenz/1102/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>WordPress Plugin für mehr Flexibilität beim Schreiben</title>
		<link>http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/</link>
		<comments>http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 04:20:27 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1086</guid>
		<description><![CDATA[Heute ist er nun da, der letzte Tag im Kalender und der letzte Tag, der mich zwingt, jeden Tag einen Beitrag zu veröffentlichen. Nicht selten habe ich über Nacht noch einen kleinen Beitrag geschrieben um die Leser am kommenden Morgen mit einem neuen Türchen zu beglücken. Nicht nur Kinder mögen die Überraschung am Morgen beim Öffnen eines neuen Türchens. Für mich ist nun erst mal Pause, andere Themen sind wichtiger und nur wenige werden vermutlich diesen Beitrag hier lesen; ist doch heute Weihnachten. Mir bleibt nur noch zu sagen:
Alles liebe und Gute, die herzlichsten Wünsche, ein friedliches Weihnachtsfest und einen guten Rutsch in das neue Jahr wünsche ich allen Lesern, allen Kunden, allen netten Kontakten und jedem, der irgendwie Mensch ist und mit mir zu tun hatte. Ich freue mich auf ein neues Jahr mit euch und hadere der Dinge, die uns im neuen Jahr erreichen werden. Als kleines Präsent zum heiligen Abend heute habe ich euch ein Plugin erstellt, was euch zum einen zusätzliche Felder in den Bereich Schreiben von WordPress bringt, was euch zeigt, wie einfach man den Bereich erweitern kann und was nach belieben von euch genutzt werden darf.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-24.jpg" alt="WP Adventskalender 24" /><br />
Heute ist er nun da, der letzte Tag im Kalender und der letzte Tag, der mich zwingt, jeden Tag einen Beitrag zu veröffentlichen. Nicht selten habe ich über Nacht noch einen kleinen Beitrag geschrieben um die Leser am kommenden Morgen mit einem neuen Türchen zu beglücken. Nicht nur Kinder mögen die Überraschung am Morgen beim Öffnen eines neuen Türchens. Für mich ist nun erst mal Pause, andere Themen sind wichtiger und nur wenige werden vermutlich diesen Beitrag hier lesen; ist doch heute Weihnachten. Mir bleibt nur noch zu sagen:<br />
<strong>Alles liebe und Gute, die herzlichsten Wünsche, ein friedliches Weihnachtsfest und einen guten Rutsch in das neue Jahr wünsche ich allen Lesern, allen Kunden, allen netten Kontakten und jedem, der irgendwie Mensch ist und mit mir zu tun hatte. Ich freue mich auf ein neues Jahr mit euch und harre der Dinge, die uns im neuen Jahr erreichen werden.</strong></p>
<p><img class="centeredob" src="http://bueltge.de/wp-content/images/weihnacht.png" alt="Es weihnachtet" /></p>
<p>Als kleines Präsent zum heiligen Abend heute habe ich euch ein Plugin erstellt, was euch zum einen zusätzliche Felder in den Bereich Schreiben von WordPress bringt, was euch zeigt, wie einfach man den Bereich erweitern kann und was nach belieben von euch genutzt werden darf.<br />
<span id="more-1086"></span><br />
Das Plugin bringt 3 neue Felder in einer Metabox mit:</p>
<ul>
<li><strong>Untertitel</strong> - wie der Name schon sagt, eine Zeile ohne Formatierung in der Ausgabe</li>
<li><strong>Zusatzinformationen</strong> - ein vollwertiger Editor, ebenso kann man jede Art von Attachments hinzufügen, also fast gleich dem Content-Editor.</li>
<li><strong>Listdaten</strong> - Hier wird ermöglicht, dass man pro Zeile einen Inhalt pflegt und jede Zeile als List-Element ausgeben wird, ungeordnete Liste <code>ul</code></li>
</ul>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/different-type/screenshot-1.png" alt="Screenshot im Edit-Bereich von WordPress" /></p>
<p>Jedes dieser Felder kann gezielt im Template des Themes eingesetzt werden, hat also einen Template Tag, der die Ausgabe steuert. Nur wenn es in diesem Feld Daten gibt, dann werden sie auch ausgegeben. Im folgenden ein Beispiel, der die drei neuen Felder ausgibt.</p>
<pre><code>
&lt;div &lt;?php post_class() ?&gt; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;

	&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;

	&lt;h3&gt;&lt;?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post-&gt;ID, 'heading'); ?&gt;&lt;/h3&gt;

	&lt;div class=&quot;entry&quot;&gt;

		&lt;?php the_content('&lt;p class=&quot;serif&quot;&gt;Read the rest of this entry &amp;raquo;&lt;/p&gt;'); ?&gt;

		&lt;?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post-&gt;ID, 'additional-info'); ?&gt;

		&lt;?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post-&gt;ID, 'listdata'); ?&gt;
</code></pre>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/different-type/screenshot-2.png" alt="Screenshot im Frontend von WordPress" /></p>
<p>Das Plugin soll als Vorlage dienen, wer also mag, der passt es an und schafft eine Oberfläche, in der sich die Autoren wohl fühlen, keine Pflege der benutzerdefinierten Felder.</p>
<p>Das Plugin sorgt dafür, dass die Metaboxen "Benutzerdefinierte Felder" und "Trackbacks" nicht mehr da sind (<code>remove_meta_box()</code>); auch das als Beispiel für die Nutzung. Zu jedem der genutzten Code-Schnipsel im Plugin gibt es hier im Blog einen Beitrag und so sollte man damit klar kommen. Im folgenden der Code ohne Zusatzfiles und im Anschluss das Plugin als Download, inkl. readme, Sprachfiles für deutsche User und die nötigen Scripte.</p>
<pre><code>
&lt;?php
/**
 * @package Different Type
 * @author Frank B&amp;uuml;ltge
 * @version 0.1
 */

/*
	Plugin Name: Different Type
	Plugin URI: http://bueltge.de/
	Description: Add different types to posts
	Author: Frank B&amp;uuml;ltge
	Version: 0.1
	License: GPL
	Author URI: http://bueltge.de/
	Last change: 24.12.2009 00:00:00
*/

/**
 * Example for use outside the loop:
 * &lt;?php the_DifferentTypeFacts($post-&gt;ID); ?&gt;
 * @param $id Integer - Post-ID
 * @param $type String - heading, additional-info, listdata (default is ''-empty)
 *
 * Example: &lt;?php the_DifferentTypeFacts($post-&gt;ID, 'heading'); ?&gt;
 */

//avoid direct calls to this file, because now WP core and framework has been used
if ( !function_exists('add_action') ) {
	header('Status: 403 Forbidden');
	header('HTTP/1.1 403 Forbidden');
	exit();
}

if ( function_exists('add_action') ) {
	//WordPress definitions
	if ( !defined('WP_CONTENT_URL') )
		define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
	if ( !defined('WP_CONTENT_DIR') )
		define('WP_CONTENT_DIR', ABSPATH . 'wp-content');
	if ( !defined('WP_PLUGIN_URL') )
		define('WP_PLUGIN_URL', WP_CONTENT_URL.'/plugins');
	if ( !defined('WP_PLUGIN_DIR') )
		define('WP_PLUGIN_DIR', WP_CONTENT_DIR.'/plugins');
	if ( !defined('PLUGINDIR') )
		define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH.  For back compat.
	if ( !defined('WP_LANG_DIR') )
		define('WP_LANG_DIR', WP_CONTENT_DIR . '/languages');

	// plugin definitions
	define( 'FB_DT_BASENAME', plugin_basename(__FILE__) );
	define( 'FB_DT_BASEDIR', dirname( plugin_basename(__FILE__) ) );
	define( 'FB_DT_TEXTDOMAIN', 'different-types' );
}

if ( !class_exists( 'DifferentType' ) ) {
	class DifferentType {

		// constructor
		function DifferentType() {

			if (is_admin() ) {
				add_action( 'admin_init', array(&amp;$this, 'on_admin_init') );
				add_action( 'wp_insert_post', array(&amp;$this, 'on_wp_insert_post'), 10, 2 );
				add_action( 'init', array(&amp;$this, 'textdomain') );
				register_uninstall_hook( __FILE__, array(&amp;$this, 'uninstall') );
				add_action( &quot;admin_print_scripts-post.php&quot;, array($this, 'enqueue_script') );
				add_action( &quot;admin_print_scripts-post-new.php&quot;, array($this, 'enqueue_script') );
				add_action( &quot;admin_print_scripts-page.php&quot;, array($this, 'enqueue_script') );
				add_action( &quot;admin_print_scripts-page-new.php&quot;, array($this, 'enqueue_script') );
			}
		}

		// active for multilanguage
		function textdomain() {

			if ( function_exists('load_plugin_textdomain') )
				load_plugin_textdomain( FB_DT_TEXTDOMAIN, false, dirname( FB_DT_BASENAME ) . '/languages' );
		}

		// unsintall all postmetadata
		function uninstall() {

			$all_posts = get_posts('numberposts=0&amp;post_type=post&amp;post_status=');

			foreach( $all_posts as $postinfo) {

				delete_post_meta($postinfo-&gt;ID, '_different-types');

			}
		}

		// add script
		function enqueue_script() {
			wp_enqueue_script( 'tinymce4dt', WP_PLUGIN_URL . '/' . FB_DT_BASEDIR . '/js/script.js', array('jquery') );
		}

		// admin init
		function on_admin_init() {

			if ( !current_user_can( 'publish_posts' ) )
				return;

			add_meta_box( 'different_types',
									__( 'Different Types', FB_DT_TEXTDOMAIN ),
									array( &amp;$this, 'meta_box' ),
									'post', 'normal', 'high'
									);

			// remove meta box for trackbacks
			remove_meta_box('trackbacksdiv', 'post', 'normal');
			// remove meta box for custom fields
			remove_meta_box('postcustom', 'post', 'normal');
		}

		// check for preview
		function is_page_preview() {
			$id = (int)$_GET['preview_id'];
			if ($id == 0) $id = (int)$_GET['post_id'];
			$preview = $_GET['preview'];
			if ($id &gt; 0 &amp;&amp; $preview == 'true') {
				global $wpdb;
				$type = $wpdb-&gt;get_results(&quot;SELECT post_type FROM $wpdb-&gt;posts WHERE ID=$id&quot;);
				if ( count($type) &amp;&amp; ($type[0]-&gt;post_type == 'page') &amp;&amp; current_user_can('edit_page') )
					return true;
			}
			return false;
		}

		// after save post, save meta data for plugin
		function on_wp_insert_post($id) {
			global $id;

			if ( !isset($id) )
				$id = (int)$_REQUEST['post_ID'];
			if ( $this-&gt;is_page_preview() &amp;&amp; !isset($id) )
				$id = (int)$_GET['preview_id'];

			if ( !current_user_can('edit_post') )
				return;

			if ( isset($_POST['dt-heading']) &amp;&amp; $_POST['dt-heading'] != '' )
				$this-&gt;data['heading'] = esc_attr( $_POST['dt-heading'] );
			if ( isset($_POST['dt-additional-info']) &amp;&amp; $_POST['dt-additional-info'] != '' )
				$this-&gt;data['additional-info'] = $_POST['dt-additional-info'];
			if ( isset($_POST['dt-listdata']) &amp;&amp; $_POST['dt-listdata'] != '' )
				$this-&gt;data['listdata'] = esc_attr( $_POST['dt-listdata'] );

			if ( isset($this-&gt;data) &amp;&amp; $this-&gt;data != '' )
				update_post_meta($id, '_different-types', $this-&gt;data);
		}

		// load post_meta_data
		function load_post_meta($id) {

			return get_post_meta($id, '_different-types', true);
		}

		// meta box on post/page
		function meta_box($data) {

			$value = $this-&gt;load_post_meta($data-&gt;ID);
			?&gt;
			&lt;table id=&quot;dt-page-definition&quot; width=&quot;100%&quot; cellspacing=&quot;5px&quot;&gt;
				&lt;tr valign=&quot;top&quot;&gt;
					&lt;td style=&quot;width:20%;&quot;&gt;&lt;label for=&quot;dt-heading&quot;&gt;&lt;?php _e( 'Subtitle:', FB_DT_TEXTDOMAIN ); ?&gt;&lt;/label&gt;&lt;/td&gt;
					&lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;dt-heading&quot; name=&quot;dt-heading&quot; class=&quot;heading form-input-tip&quot; size=&quot;16&quot; autocomplete=&quot;off&quot; value=&quot;&lt;?php echo $value['heading']; ?&gt;&quot; tabindex=&quot;6&quot; style=&quot;width:99.5%&quot;/&gt;&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr valign=&quot;top&quot;&gt;
					&lt;td&gt;&lt;label for=&quot;dt-additional-info&quot;&gt;&lt;?php _e( 'Additional information:', FB_DT_TEXTDOMAIN ); ?&gt;&lt;/label&gt;&lt;/td&gt;
					&lt;td&gt;&lt;textarea cols=&quot;16&quot; rows=&quot;5&quot; id=&quot;dt-additional-info&quot; name=&quot;dt-additional-info&quot; class=&quot;additional-info form-input-tip code&quot; size=&quot;20&quot; autocomplete=&quot;off&quot; tabindex=&quot;6&quot; style=&quot;width:90%&quot;/&gt;&lt;?php echo wpautop( $value['additional-info'] ); ?&gt;&lt;/textarea&gt;
						&lt;table id=&quot;post-status-info&quot; cellspacing=&quot;0&quot; style=&quot;line-height: 24px;&quot;&gt;
							&lt;tbody&gt;
								&lt;tr&gt;
									&lt;td&gt;&amp;nbsp;&lt;/td&gt;
									&lt;td&gt;&amp;nbsp;&lt;/td&gt;
								&lt;/tr&gt;
							&lt;/tbody&gt;
						&lt;/table&gt;
					&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr valign=&quot;top&quot;&gt;
					&lt;td&gt;&lt;label for=&quot;dt-listdata&quot;&gt;&lt;?php _e( 'Listdata:', FB_DT_TEXTDOMAIN ); ?&gt;&lt;/label&gt;&lt;/td&gt;
					&lt;td&gt;&lt;textarea cols=&quot;16&quot; rows=&quot;10&quot; id=&quot;dt-listdata&quot; name=&quot;dt-listdata&quot; class=&quot;listdata form-input-tip&quot; size=&quot;20&quot; autocomplete=&quot;off&quot; tabindex=&quot;6&quot; style=&quot;width:99.5%&quot;/&gt;&lt;?php echo $value['listdata']; ?&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;small&gt;&lt;?php _e( 'One list per line', FB_DT_TEXTDOMAIN ) ?&gt;&lt;/small&gt;&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/table&gt;
			&lt;?php
		}

		// return facts incl. markup
		function get_DifferentTypeFacts($id, $type, $value) {

			if (!$value)
				return false;
			if ( $type == '' )
				return false;

			if ( 'heading' == $type &amp;&amp; '' != $value['heading'] )
				return $value['heading'];
			if ( 'additional-info' == $type &amp;&amp; '' != $value['additional-info'] )
				return wpautop( wptexturize($value['additional-info']) );
			if ( 'listdata' == $type &amp;&amp; '' != $value['listdata'] ) {
				$return = '';
				$listdatas = preg_split(&quot;/\r\n/&quot;, $value['listdata'] );

				foreach ( (array) $listdatas as $key =&gt; $listdata ) {

					$return .= '&lt;li&gt;' . trim($listdata) . '&lt;/li&gt;';

				}
				return '&lt;ul&gt;' . $return . '&lt;/ul&gt;'. &quot;\n&quot;;
			}
		}

		// echo facts, if exists
		function DifferentTypeFacts($id, $type, $string) {

			if ( $id ) {
				$value = $this-&gt;load_post_meta($id);

				echo $this-&gt;get_DifferentTypeFacts($id, $type, $value);
			}
		}

	} // End class

	// instance class
	$DifferentType = new DifferentType();

	// use in template
	function the_DifferentTypeFacts($id, $type = '', $string = '') {
		global $DifferentType;

		$DifferentType-&gt;DifferentTypeFacts($id, $type, $string);
	}

} // End if class exists statement
?&gt;
</code></pre>
<p>Download als zip-Datei: <a href="https://github.com/bueltge/different-type/zipball/master">github.com/bueltge/different-type/zipball/master</a> - 40 kByte<br />
Das Plugin liegt in einer gepflegten Version bei <a href="https://github.com/bueltge/different-type">github.com</a> und kann dort besichtigt, geforkt und gezogen werden.</p>
<p>Ich wünsche viel Spass damit und vielleicht wird das einen oder andere Projekt mit WordPress damit in diesem Bereich ein wenig klarer und logischer für die Autoren.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-plugin-flexibilitaet-schreiben/1086/feed/</wfw:commentRss>
		<slash:comments>59</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-24.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-24.jpg" medium="image">
			<media:title type="html">WP Adventskalender 24</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/weihnacht.png" medium="image">
			<media:title type="html">Es weihnachtet</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/different-type/screenshot-1.png" medium="image">
			<media:title type="html">Screenshot im Edit-Bereich von WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/different-type/screenshot-2.png" medium="image">
			<media:title type="html">Screenshot im Frontend von WordPress</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Contactable - Kontaktformular in WordPress</title>
		<link>http://bueltge.de/kontaktformular-wordpress-contactable/1072/</link>
		<comments>http://bueltge.de/kontaktformular-wordpress-contactable/1072/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 07:41:43 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1072</guid>
		<description><![CDATA[Die Integration eines Kontaktformulars mit WordPress beginnt meist bei einer Pluginsuche und endet oft mit einem viel zu großem Aufwand. Da werden Scripte geladen, Filter von WordPress über alle Seiten und Beiträge gejagt - nur um auf einer Seite ein Formular zu integrieren. Das Blog ist immer so gut wie sein Techniker und ich möchte heute mal einen ganz einfachen Weg zeigen, wie man sich ohne große Kenntnisse trotzdem ein Kontakt-Formular in das eigene Blog integriert.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" alt="WP Adventskalender 22" /><br />
Die Integration eines Kontaktformulars mit WordPress beginnt meist bei einer Pluginsuche und endet oft mit einem viel zu großem Aufwand. Da werden Scripte geladen, Filter von WordPress über alle Seiten und Beiträge gejagt - nur um auf einer Seite ein Formular zu integrieren. Das Blog ist immer so gut wie sein Techniker und ich möchte heute mal einen ganz einfachen Weg zeigen, wie man sich ohne große Kenntnisse trotzdem ein Kontakt-Formular in das eigene Blog integriert.<br />
<span id="more-1072"></span><br />
Die Lösung ist nicht der Weisheit letzter Schuss, aber sie zeigt, wie einfach es ist und wie ressourcenschonend für WordPress die Integration sein kann.<br />
Damit wir uns voll und ganz der Integration widmen können, und uns nicht mit PHP und JavaScript im Sinne des Formulars beschäftigen müssen, nutze ich hier im Beispiel das tolle Formular-Plugin<br />
<a href="http://theodin.co.uk/blog/ajax/contactable-jquery-plugin.html"><strong>Contactable</strong></a> für jQuery von Philip Beel. Das Plugin bringt alle erforderlichen Dateien mit und muss lediglich integriert werden - sehr einfach zu nutzen und wenn man mag an die eigenen Bedürfnisse anzupassen. Hinweise dazu gibt es auf der <a href="http://theodin.co.uk/blog/ajax/contactable-jquery-plugin.html">Site zum jQuery-Plugin</a>. Die Integration des Formulars zeige ich anhand des Standard-Themes Kubrick von WordPress, ist aber in jedem anderen Theme eben so zu nutzen. <strong>Aber Achtung</strong>, Spamer könnten das Plugin missbrauchen, daher gut überlegen oder erweitern - mehr dazu gibt es hier in den <a href="http://http://bueltge.de/kontaktformular-wordpress-contactable/1072/#comment-350200">Kommentaren</a> zu lesen. Danke in diesem Hinblick an Robert für die Hinweise und die damit verbundene Mühe.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/contactable.png" alt="Contactable im Kubrick" /></p>
<p>WordPress bringt im Standard die jQuery Bibliothek mit und so müssen wir uns um die nicht kümmern, sondern nutzen sie lediglich. Dabei findet der Aufruf aller nötigen Dateien und Scripte innerhalb des Templates statt, welches sich im Anschluss um die Ausgabe des Kontaktformulars kümmert. Dieses Aufruf erledigen wir mit den Funktionen von WordPress - so gehen wir sicher, dass die Dateien wirklich nur einmal geladen werden. WordPress kümmert sich um die richtige Reihenfolge und um die Abhängigkeiten. Zu diesem Thema habe ich bereits einiges an <a href="http://bueltge.de/javascript-bibliotheken-in-und-aus-wordpress-nutzen/808/">Infos hinterlegt und verweise auf diesen Beitrag</a>.</p>
<p>Als erstes erstellen wir ein Template, ich nenne es <code>contact-page.php</code> und es muss im Ordner eures Themes abgelegt werden. Dies enthält den Aufruf der nötigen Scripte und der dazugehörigen Stylesheets. Im Grunde benötigt ihr nur diese vier Aufrufe in der <code>page.php</code> eures Theme abzulegen, einen neuen Namen für die Datei zu vergeben und den Kommentar zum Erkennen durch WordPress im Page-Bereich des Backend abzulegen (ganz am Anfang der Datei). Im folgenden die Syntax am Beispiel der <code>page.php</code> aus dem Standard-Theme Kubrick.</p>
<pre><code>
&lt;?php
/**
 * Template Name: Contact Page
 *
 * @package WordPress
 * @subpackage Default_Theme
 */

wp_enqueue_script( 'jquery.contactable', get_bloginfo('template_directory') . '/contactable/jquery.contactable.js', array('jquery') , 3.1, true );
wp_enqueue_script( 'jquery.validate', get_bloginfo('template_directory') . '/contactable/jquery.validate.pack.js', array('jquery') , 3.1, true );
wp_enqueue_script( 'my_contactable', get_bloginfo('template_directory') . '/contactable/my_contactable.js', array('jquery') , 3.1, true );
wp_enqueue_style( 'contactable', get_bloginfo('template_directory') . '/contactable/contactable.css' );

get_header(); ?&gt;

	&lt;div id=&quot;content&quot; class=&quot;narrowcolumn&quot; role=&quot;main&quot;&gt;

		&lt;div class=&quot;post&quot; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;
		&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;

			&lt;div class=&quot;entry&quot;&gt;
				&lt;?php the_content('&lt;p class=&quot;serif&quot;&gt;Read the rest of this page &amp;raquo;&lt;/p&gt;'); ?&gt;

				&lt;div id=&quot;mycontactform&quot;&gt; &lt;/div&gt;

			&lt;/div&gt;
		&lt;/div&gt;

	&lt;/div&gt;

&lt;?php get_sidebar(); ?&gt;

&lt;?php get_footer(); ?&gt;
</code></pre>
<p>Wie in der Syntax zu erkennen, habe ich alle Dateien des jQuery-Formular-Plugnis im Ordner <code>contactable</code> im Ordner des Themes abgelegt. Eventuell müssen daher eure Pfade angepasst werden. Aktuell sieht es in meinem Theme wie folgt aus:</p>
<ul>
<li>
default</p>
<ul>
<li>contactable
<ul>
<li>jquery.contactable.js</li>
<li>jquery.validate.pack.jss</li>
<li>my.contactable.js</li>
<li>contactable.css</li>
</ul>
</li>
<li>style.css</li>
<li>contact-page.php</li>
<li>...</li>
</ul>
</li>
</ul>
<p>Einzig die Datei <code>my.contactable.js</code> habe ich hinzugefügt; diese kümmert sich um den Aufruf des Formulars und kann mit Parametern gefüllt werden. Inhaltlich sieht sie wie folgt aus:</p>
<pre><code>
jQuery(document).ready( function($){
	$('#mycontactform').contactable({
		name: 'Name',
		email: 'E-Mail',
		message : 'Nachricht',
		recipient: 'example@domain.com',
		subject: 'Kontaktformular',
		recievedMsg : 'Vielen Dank f&amp;uuml;r Ihre Nachricht.'
	});
});
</code></pre>
<p>Sind alle Dateien gespeichert und an eure Bedürfnisse angepasst, dann muss lediglich im Admin-Bereich von WordPress eine Seite angelegt werden. Dieser Seite gebt ihr einen Namen, eventuell Inhalt und ihr müsst das Template auswählen - in unserem Fall die <strong>Contact Page</strong>. Nachdem Speichern sollte die Seite im Frontend des Blog aufzurufen sein und mit einem Klick auf das kleine Label fährt das Formular in die Sicht und kann ausgefüllt werden.</p>
<p>Durch die Aufrufe mit Hilfe von WordPress Funktionen und den richtigen Parametern, sind nun die Scripte im Footer der Site integriert. Die Bibliothek jQuery muss nicht aufgerufen werden, sie wird von WordPress hinzugefügt, wenn sie noch nicht da ist, durch die Abhängigkeit der Parameter zum Schlüssel <code>jquery</code>. Durch die Nutzung eines Templates mit allen Aufrufen werden sämtliche Scripte und StyleSheets nur eingebunden, wenn diese Seite von WordPress aufgerufen wird. Wer das Formular-Schnippsel auf allen Seiten möchte, der macht den Aufruf bspw. in der <code>header.php</code> oder <code>functions.php</code>.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/contactable-ocss.png" alt="Contactable im Kubrick" /></p>
<p>Möchte man diese Funktion nicht nutzen, so kann entweder dass CSS nicht genutzt werden, bzw. ein eigenes Design hinzugefügt werden oder man passt das JS an seine eigenen Bedürfnisse an. Gleiches gilt für zusätzliche Felder im Formular, dazu muss der Inhalt der Dateien angepasst werden.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/kontaktformular-wordpress-contactable/1072/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kontaktformular-wordpress-contactable/1072/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" medium="image">
			<media:title type="html">WP Adventskalender 22</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/contactable.png" medium="image">
			<media:title type="html">Contactable im Kubrick</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/contactable-ocss.png" medium="image">
			<media:title type="html">Contactable im Kubrick</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Scripte von Plugins aus dem Frontend entfernen</title>
		<link>http://bueltge.de/scripte-plugins-frontend-entfernen/1083/</link>
		<comments>http://bueltge.de/scripte-plugins-frontend-entfernen/1083/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 07:59:53 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

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

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

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

