<?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; Anleitung</title>
	<atom:link href="http://bueltge.de/tag/anleitung/feed/" rel="self" type="application/rss+xml" />
	<link>http://bueltge.de</link>
	<description>Frank Bültge schreibt auf bueltge.de zu den Themen Webentwicklung &#38; design, WordPress, Literatur und andere Themen bezüglich Internet und Development</description>
	<lastBuildDate>Tue, 22 May 2012 20:02:25 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordPress WYSIWYG-Editor TinyMCE erweitern #2</title>
		<link>http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern-2/1100/</link>
		<comments>http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern-2/1100/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 00:12:03 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[TinyMCE]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1100</guid>
		<description><![CDATA[Das schöne am Leben ist ja: man lernt immer dazu und nie aus. Auch in diesem Bereich ist das mal wieder so, denn ein alter Artikel auf diesem meinem kleinen Blog hier, hat mal erklärt, wie man den Editor TinyMCE in WordPress an seine Bedürfnisse anpassen kann - sträflich, denn ich habe damals die Core-Dateien von WordPress angefasst.

Um so wichtiger, dass ich eine bessere Lösung aufzeige und wiedermal, in dem Fall auch mich, darauf hinweise, dass man die Core-Dateien von Systemen nicht anfasst! Aber der Artikel scheint recht beliebt und scheinbar wollen auch viele Nutzer diesen Editor anpassen. Im ersten Schritt sucht man dann nach Plugins und nicht immer wird man fündig. Es gibt also noch immer Bedarf im Plugin-Sektor von WordPress; wie im übrigen auch meine Mails zeigen.]]></description>
			<content:encoded><![CDATA[<p>Das schöne am Leben ist ja: man lernt immer dazu und nie aus. Auch in diesem Bereich ist das mal wieder so, denn ein <a href="http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402/">alter Artikel</a> auf diesem meinem kleinen Blog hier, hat mal erklärt, wie man den Editor TinyMCE in WordPress an seine Bedürfnisse anpassen kann - sträflich, denn ich habe damals die Core-Dateien von WordPress angefasst.</p>
<p>Um so wichtiger, dass ich eine bessere Lösung aufzeige und wiedermal, in dem Fall auch mich, darauf hinweise, dass man die Core-Dateien von Systemen nicht anfasst! Aber <a href="http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402/">der Artikel</a> scheint recht beliebt und scheinbar wollen auch viele Nutzer diesen Editor anpassen. Im ersten Schritt sucht man dann nach Plugins und nicht immer wird man fündig. Es gibt also noch immer Bedarf im Plugin-Sektor von WordPress; wie im übrigen auch meine Mails zeigen.<br />
<span id="more-1100"></span><br />
Nun aber zum eigentlichen Inhalt des Beitrags, das Anpassen des Editor TinyMCE via Hook, also unabhängig der Core-Dateien von WordPress. Die folgenden Code-Schnippsel legt man in die <code>functions.php</code> des Themes oder lagert sie in ein Plugin aus. Es gibt eine ganze Reihe von Möglichkeiten und ich möchte nur eine Auswahl aufzeigen. Das Anpassen der Buttons ist sicher recht bequem über das Plugin <a href="http://wordpress.org/extend/plugins/tinymce-advanced/">TinyMCE Advanced</a> zu erledigen.</p>
<h4>Den HTML-Filter anpassen</h4>
<p>Im Standard ist der Editor so eingestellt, dass immer xHTML 1.0 erzeugt wird und damit werden nicht alle Tags erlaubt; klassisches Beispiel sind iframes, die man Beispielsweise mit Google Map im Boot hat. Auch dafür gibt es andere Ansätze via Shortcode etc., aber darum soll es hier nicht gehen. Lediglich als Beispiel soll das Erlauben des Tag <code>iframe</code> mit diversen Attributen hier stehen und die Tags müssen zur Variable <code>$ext</code> ergänzt werden.</p>
<pre><code class="php">
function fb_change_mce_options($initArray) {
	// Comma separated string od extendes tags
	// Command separated string of extended elements
	$ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';

	if ( isset( $initArray['extended_valid_elements'] ) ) {
		$initArray['extended_valid_elements'] .= ',' . $ext;
	} else {
		$initArray['extended_valid_elements'] = $ext;
	}
	// maybe; set tiny paramter verify_html
	//$initArray['verify_html'] = false;

	return $initArray;
}
add_filter('tiny_mce_before_init', 'fb_change_mce_options');
</code></pre>
<h4>Anpassen der Funktion, der Buttons im Editor</h4>
<p>Im weiteren eine kleine Möglichkeit um die Blockformate (<code>theme_advanced_blockformats</code>) zu erweitern bzw. zu verändern und einige Buttons im Editor zu deaktivieren (<code>theme_advanced_disable</code>).</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/mytinymce.png" alt="TinyMCE in WordPress angepasst" /></p>
<pre><code class="php">
function fb_change_mce_buttons( $initArray ) {
	//@see http://wiki.moxiecode.com/index.php/TinyMCE:Control_reference
	$initArray['theme_advanced_blockformats'] = 'p,address,pre,code,h3,h4,h5,h6';
	$initArray['theme_advanced_disable'] = 'forecolor,bold,italic';

	return $initArray;
}
add_filter('tiny_mce_before_init', 'fb_change_mce_buttons');
</code></pre>
<h4>Sprachen der Rechtschreibprüfung ändern</h4>
<p>Im dritten Fall passen wir die Sprachen der Rechtschreibprüfung an, im Beispiel wird nun nur noch Deutsch und Englisch zugelassen.</p>
<pre><code class="php">
function fb_mce_external_languages($initArray){
	$initArray['spellchecker_languages'] = '+German=de, English=en';

	return $initArray;
}
add_filter('tiny_mce_before_init', 'fb_mce_external_languages');
</code></pre>
<h4>Die Standard-Werte von WordPress</h4>
<p>Im Anschluss die Werte, die im Standard von WordPress genutzt werden und die einen Einblick in die Möglichkeiten für die Übergabe des Arrays geben.</p>
<pre><code class="php">
'mode' =&gt; 'specific_textareas'
'editor_selector' =&gt; 'theEditor'
'width' =&gt; '100%'
'theme' =&gt; 'advanced'
'skin' =&gt; 'wp_theme'
'theme_advanced_buttons1' =&gt; 'bold,italic,strikethrough,|,bullist,numlist,blockquote,|,justifyleft,justifycenter,justifyright,|,link,unlink,wp_more,|,spellchecker,fullscreen,wp_adv'
'theme_advanced_buttons2' =&gt; 'formatselect,underline,justifyfull,forecolor,|,pastetext,pasteword,removeformat,|,media,charmap,|,outdent,indent,|,undo,redo,wp_help'
'theme_advanced_buttons3' =&gt; ''
'theme_advanced_buttons4' =&gt; ''
'language' =&gt; 'de'
'spellchecker_languages' =&gt; 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,+German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv'
'theme_advanced_toolbar_location' =&gt; 'top'
'theme_advanced_toolbar_align' =&gt; 'left'
'theme_advanced_statusbar_location' =&gt; 'bottom'
'theme_advanced_resizing' =&gt; true
'theme_advanced_resize_horizontal' =&gt; false
'dialog_type' =&gt; 'modal'
'relative_urls' =&gt; false
'remove_script_host' =&gt; false
'convert_urls' =&gt; false
'apply_source_formatting' =&gt; false
'remove_linebreaks' =&gt; true
'gecko_spellcheck' =&gt; true
'entities' =&gt; '38,amp,60,lt,62,gt'
'accessibility_focus' =&gt; true
'tabfocus_elements' =&gt; 'major-publishing-actions'
'media_strict' =&gt; false
'paste_remove_styles' =&gt; true
'paste_remove_spans' =&gt; true
'paste_strip_class_attributes' =&gt; 'all'
'wpeditimage_disable_captions' =&gt; false
'plugins' =&gt; 'safari,inlinepopups,spellchecker,paste,wordpress,media,fullscreen,wpeditimage,wpgallery,tabfocus'
</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-wysiwyg-editor-tinymce-erweitern-2/1100/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern-2/1100/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/mytinymce.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/mytinymce.png" medium="image">
			<media:title type="html">TinyMCE in WordPress angepasst</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>WP - Tutorial, wir schreiben ein WordPress Theme - Teil 4</title>
		<link>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/</link>
		<comments>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 21:29:40 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/</guid>
		<description><![CDATA[Es ist viel Zeit seit dem letzten Teil dieser Serie vergangen. Liegt einerseits daran, dass ich viele Projekte bearbeite, andererseits daran, dass das Feedback zur Serie so gering ausgefallen ist, dass ich dachte: Kein Interesse, dann muss ich mich auch nicht weiter bemühen. Offensichtlich habe ich aber doch einige Leser, denen das Tutorial hilft und somit mache gibt es nun einen weiteren Teil 4.

In diesem Abschnitt der Serie werden wir den Loop kennen lernen. Denn dieser stellt den Kern bei der Ausgabe im Frontend von WordPress dar. Eine ganze Reihe von Template Tags sind nur im Loop funktionstüchtig und nur im Loop hat man einfachen Zugriff auf die Datenbank. Der Loop sieht außerdem im Standard eine ganze Reihe von Daten, mit denen die einzelnen Template Tags oder eigene Funktionen arbeiten.]]></description>
			<content:encoded><![CDATA[<div class="contentnavi">
<h3>Inhalt:</h3>
<ul>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/">Teil 1 - Wir legen los,<br />Voraussetzungen,<br />Grundlagen, Layout</a></li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">Teil 2 - Das statische<br />Design wird<br />WordPress-fähig</a></li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Teil 3 - Noch mehr Daten<br />aus dem Backend</a></li>
<li>Teil 4 - Der Loop</li>
<li>. . .</li>
</ul>
</div>
<p>Es ist viel Zeit seit dem letzten Teil dieser Serie vergangen. Liegt einerseits daran, dass ich viele Projekte bearbeite, andererseits daran, dass das Feedback zur Serie so gering ausgefallen ist, dass ich dachte: Kein Interesse, dann muss ich mich auch nicht weiter bemühen. Offensichtlich habe ich aber doch einige Leser, denen das Tutorial hilft und somit mache gibt es nun einen weiteren Teil 4.</p>
<p>In diesem Abschnitt der Serie werden wir den Loop kennen lernen. Denn dieser stellt den Kern bei der Ausgabe im Frontend von WordPress dar. Eine ganze Reihe von Template Tags sind nur im Loop funktionstüchtig und nur im Loop hat man einfachen Zugriff auf die Datenbank. Der Loop sieht außerdem im Standard eine ganze Reihe von Daten, mit denen die einzelnen Template Tags oder eigene Funktionen arbeiten.<span id="more-634"></span></p>
<h3>Definition Loop</h3>
<p>Im Umfeld von WordPress fällt das Wort oft und es ist auch für das Verständnis unerlässlich. Worum handelt es sich also beim Loop: der Loop ist eine Ereignisschleife im Template, wobei man unendlich viele Templates mit dem Loop bestücken kann. Ebenso kann man den Loop verschachteln, mehrere Loop nacheinander verwenden oder den Loop einschränken.  Der Loop wirkt in single, page, archive, index und viele weitere Templates. Für jede Funktion/Template kan nein eigener Loop hinterlegt werden und die Ausgabe kann unterschiedlich sein. Ebenso kann man es einfach gestalten und den Loop immer wieder verwenden. Alles Punkte, die von dem eigenen Wissen und Können abhängen.</p>
<p>Sehr viele Template Tags sind nur innerhalb des Loop funktionsfähig. Der <a href="http://codex.wordpress.org/Template_Tags">WordPress Codex zu Template Tags</a> gibt dazu immer genau Auskunft.</p>
<p>Alles was sich im Loop befindet wird auf die Ausgabe angewandt, für jeden Artikel oder Seite, die der Loop ausgibt.<br />
Der Standard-Loop durchläuft dabei immer so oft, wie es im Backend der Installation eingestellt ist, siehe Screenshot.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/theme_schreiben/wp25_einstellungen_lesen.png" alt="Einstellungen in WP 2.5" /></p>
<p>Diese Einstellung wird bei jeder Art von Archiv, Suche und index gezogen. Aber auch da kann man in dem jeweiligen Template Anpassungen vornehmen. In diesem Zusammenhang sollte man sich das Verständnis der <a href="http://wordpress-buch.bueltge.de/downloads/extra/">Template-Hirarchie</a> ansehen. Diese Übersicht stellt recht gut da, wie und mit was man das Theme aufgrund der Templates beeinflussen kann.</p>
<h3>Basic Loop</h3>
<p>Der klassische Loop, die einfachste Variante sieht wie folgt aus. Der Loop unterteilt sich in übersichtlich gestaltet in vier Abschnitte. Eigentlich drei, wer Punkt 4 zum 1 gehört. Es ist die Alternative zur wenn (<code>if</code>)-Abfrage.</p>
<ol>
<li>Gibt es Beiträge?
<pre><code class="php">
&lt;?php if (have_posts()) : ?&gt;
</code></pre>
</li>
<li>Dann wird die Schleife gestartet, so lange es Beiträge gibt und der Wert im Backend zulässt.
<pre><code class="php">
&lt;?php while (have_posts()) : the_post(); ?&gt;
    &lt;!-- Punkt 2: Hier kommt die Ausgabe rein, realisiert mit xHTML und Template Tags&gt;
&lt;?php endwhile; ?&gt;
</code></pre>
</li>
<li>Ende der Schleife ...<br />
<code>&lt;!-- Punkt 3: Hier kommt die Ausgabe rein, wenn die Schleife beendet ist --&gt;</code>
</li>
<li>und wenn es nicht passendes gibt, dann zeige ...
<pre><code class="php">
&lt;?php else: ?&gt;
    &lt;!-- Punkt 4: Hier kommt die Ausgabe rein, realisiert mit xHTML und Template Tags, wenn kein passender Inhalt gefunden wurde --&gt;
&lt;?php endif; ?&gt;
</code></pre>
</li>
</ol>
<p>Gibt es Beiträge (<code>if (have_posts())</code>) in <strong>Punkt 1</strong> und sind in der Datenbankabfrage Daten enthalten (<code>have_posts</code>), dann wird die Ausgabe gestartet und alle Inhalte mit Hilfe der Template Tags ausgelesen --> <strong>Punkt 2</strong>. Das Markup wird mit Hilfe von xHTML realisiert. Dazu machen wir im Anschluss ein einfaches Beispiel.</p>
<p>Ist die <code>while</code>-Schleife beendet, dann werden die Inhalte ausgegeben, die in Position des <strong>Punkt 3</strong> hinterlegt werden. Auch hier wird mit xHTML und Template Tags das entsprechende an Markup und Inhalt erschaffen.</p>
<p>Werden keine Beiträge gefunden, zum Beispiel bei einer Suche, dann wird alles ausgegeben, was sich in <strong>Punkt 4</strong> findet. Hier gestalten wir die Ausgabe ebenfalls mit den genannten Möglichkeiten.</p>
<h4>Der Loop komplett</h4>
<pre><code class="php">
&lt;?php if (have_posts()) : ?&gt;

	&lt;?php while (have_posts()) : the_post(); ?&gt;

	&lt;?php endwhile; ?&gt;
	
	&lt;?php else: ?&gt;
	
&lt;?php endif; ?&gt;
</code></pre>
<h3>Inhalte ausgeben</h3>
<p>Hinterlegt man den obigen Loop in unsere <code>index.php</code> der Beispieldatei, dann haben wir zwar einen funktionierenden Loop, aber ohne Ausgabe. Daher realisieren wir nun die Ausgabe mit wenig Markup um das Verständnis zu fördern und nicht mit unnötig Syntax zu erschweren.</p>
<p>Nochmal zurück zum <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Tutorial Teil 3</a>, dort haben wir die Ausgabe des Inhalt in den Container mit der ID <code>content</code> gepackt. Schaut euch die <code>index.php</code> aus dem <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Teil 3</a> dieser Serie an und vergleicht es mit dem folgenden Syntax. Dieses Markup wollen wir weiterhin nutzen und lassen aber nicht mit statischem Inhalt füllen, sondern mit Daten aus der Datenbank, aus dem installierten Blog.</p>
<p>Dazu erweitere ich die <code>index.php</code> um den Loop aus den obigen Erläuterungen und entferne den statischen Inhalt. Der d<code>iv</code> <code>content</code> und das <code>h2</code>-Tag bleiben. Darin legen wir dann den Inhalt aus der Datenbank.</p>
<div class="contentdiv">
<h4>Tipp:</h4>
<p>Die Spielereien sorgen für reichlich Veränderung in Code und Ausgabe. Bitte alle Schritte in einem Testblog, am besten auf dem Rechner lokal installiert. Das ist unter jedem Betriebssystem einfach und schnell gemacht. Dazu gibt es eine ganze Reihe Tutorials, siehe Teil 1 dieser Serie, &#8222;<a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/#wasbrauchenwir">Was brauche wir?</a>&#8220;.
</div>
<p>Damit sieht der komplette <code>body</code> wie folgt aus; die Inhalte fehlen, ebenso die Inhalte des Sidebar, denn sie sind nicht relevant für Loop und Markup im Loop. Die Darstellung in diesem Artikel wird aber leserlicher und der abschließende Download und komplette Quellcode füllt dann diese Lücken wieder.<br />
Zusätzlich habe ich einen weitern <code>div</code> eingefügt mit der Klasse <code>post</code>. Dieser Container nimmt in der Ausgabe jeden einzelnen Artikel auf und lässt uns die Formatierung mit CSS sehr gut ermöglichen. </p>
<pre><code class="php">
&lt;body&gt;

	&lt;div id=&quot;container&quot;&gt;

		&lt;div id=&quot;header&quot;&gt;
			&lt;h1&gt;WordPress Theme Tutorial bei bueltge.de&lt;/h1&gt;
			&lt;p&gt;Eu sit discere assueverit, sea solum sententiae intellegebat ea. Id est verterem consequat.&lt;/p&gt;
		&lt;/div&gt;

		&lt;div id=&quot;sidebar&quot;&gt;
			. . .
		&lt;/div&gt;

		&lt;div id=&quot;content&quot;&gt;

			&lt;?php if (have_posts()) : ?&gt;

				&lt;?php while (have_posts()) : the_post(); ?&gt;
				&lt;div class=&quot;post&quot;&gt;
					&lt;h2&gt; . . . &lt;/h2&gt;
					. . .
				&lt;/div&gt;
				&lt;?php endwhile; ?&gt;
			
				&lt;?php else: ?&gt;
			
			&lt;?php endif; ?&gt;
			
		&lt;/div&gt;

	&lt;/div&gt;
&lt;/body&gt;
</code></pre>
<p>Nun aber endlich, Daten aus den Datenbank. Der folgende Code nutzt drei Template Tag und holt </p>
<ul>
<li>den Titel des Beitrags - <code>the_title()</code></li>
<li>den Link zum Beitrag - <code>the_permalink()</code></li>
<li>und den Inhalt des Beitrags, ungekürzt - the_content()</li>
</ul>
<p>Dazu muss man wissen, dass der Editor im Backend von WordPress die Vergabe von Absatz und Breaks vor nimmt. Das komplette Markup und der Text des Beitrags stehen in der Datenbank und werden nun nur noch geladen.</p>
<pre><code class="php">
&lt;div id="content"&gt;
			
	&lt;?php if (have_posts()) : ?&gt;
	
		&lt;?php while (have_posts()) : the_post(); ?&gt;
				
		&lt;div class="post"&gt;
			&lt;h2&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;" rel="bookmark"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
			&lt;?php the_content(); ?&gt;
		&lt;/div&gt;

		&lt;?php endwhile; ?&gt;
				
		&lt;?php else: ?&gt;
				
	&lt;?php endif; ?&gt;
			
&lt;/div&gt;
</code></pre>
<p>Schaut man sich die Ausgabe im Frontend nun an, dann werden die Artikel aus der DB geholt, nach einer Standard-Installation von WordPress ist das lediglich der Begrüßungsartikel. Erstellt also noch den einen oder anderen Beitrag um zu sehen, dass der Loop mehr als diesen einen Beitrag lädt, je nach Einstellung im Backend.</p>
<p>Ebenso bekommt jeder Titel eines Beitrags einen Link zu dem einzelnen Beitrag, so dass man diesen einzeln betrachten kann. Damit läßt sich schon erahnen, es ist eine Menge an Möglichkeiten und wir stehen erst am Anfang.</p>
<p>Wir werden nun die anderen Abschnitte des Loop noch mit Tags befüllen um die Alternativen zu schaffen.</p>
<pre><code class="php">
&lt;div id="content"&gt;
	
	&lt;?php if (have_posts()) : ?&gt;

		&lt;?php while (have_posts()) : the_post(); ?&gt;
		
		&lt;div class="post"&gt;
			&lt;h2&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;" rel="bookmark"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
			&lt;?php the_content(); ?&gt;
		&lt;/div&gt;

		&lt;?php endwhile; ?&gt;
		
		&lt;p class="navigation"&gt;&lt;?php next_posts_link(' &laquo;&laquo;&laquo; '); ?&gt;&lt;?php previous_posts_link(' &raquo;&raquo;&raquo; '); ?&gt;&lt;/p&gt;
		
		&lt;?php else: ?&gt;
		
		&lt;p&gt;&lt;?php _e('Nichts gefunden, was den Suchkriterien entspricht.'); ?&gt;&lt;/p&gt;
		
	&lt;?php endif; ?&gt;
	
&lt;/div&gt;
</code></pre>
<p>Der obige Syntax wurde um zwei Abschnitte bereichert. Zum einen haben wir eine &#8222;Navigation&#8220; hinterlegt. Ist man in der Sicht aller Artikel, beispielsweise der Startseite oder eines Archives, so wird man nun auf den weiteren Artikel verwiesen. Zur Ausgabe sind aktuell nur die Zeichen <strong>&laquo;&laquo;&laquo;</strong> hinterlegt, dass kann man natürlich auch anders machen, aber dazu später mehr. Die Ausgabe findet nach dem Beenden der Schleife statt.</p>
<pre><code class="php">
&lt;p class="navigation"&gt;&lt;?php next_posts_link(' &laquo;&laquo;&laquo; '); ?&gt;&lt;?php previous_posts_link(' &raquo;&raquo;&raquo; '); ?&gt;&lt;/p&gt;
</code></pre>
<p>Die beiden Funktionen wurden mit Parametern gefüllt, diese werden übergeben und dienen der angepassten Ausgabe. Viele Template Tags können Parameter aufnehmen, dadurch wird das gestalten flexibel und sorgt für mehr Freiheiten.</p>
<p>Der zweite Syntax, eine reiner Text dient nur dazu, dass eine Ausgabe entsteht, wenn nichts passendes zur Datenbankabfrage gefunden wurde, beispielsweise einer Suche. Auch für diesen Fall gib es vielen schönerer Varianten und Lösungen, aber die sorgen nicht für ein besseres Verständnis und in weiteren Abschnitten dieses Tutorials, wenn es dazu kommt, soll es ja noch Themen geben.<br />
Auffallen sollte aber die Funktion <code>_e()</code>, die hier zur direkten Ausgabe des Textes dient. Diese Funktion ist ein Bestandteil von <a href="http://en.wikipedia.org/wiki/Gettext">gettext</a> und sorgt dafür, dass man das Theme später mehrsprachig machen kann, ohne den Syntax für jede Sprach in den Templates zu ändern. Aber auch das ist dann kür, noch sind wir bei den Grundlagen.</p>
<pre><code class="php">
&lt;p&gt;&lt;?php _e('Nichts gefunden, was den Suchkriterien entspricht.'); ?&gt;&lt;/p&gt;
</code></pre>
<div class="contentdiv">
<h4>Tipp:</h4>
<p>Nochmal der Hinweis, alle verwendeten Template Tags lassen sich im <a href="http://codex.wordpress.org/Template_Tags">Codex zum Thema</a> nachlesen. Auch die <a href="http://doku.wordpress-deutschland.org/Template_Tags">deutsche Dokumentation</a> ist in dieser Hinsicht gut gepflegt.
</div>
<p>Im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">letzten Teil</a> dieser Serie haben wir die <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/#conditionaltags">Conditional Tags</a> kennen gelernt, davon gibt es eine ganze Reihe und auch hier wollen wir einen einsetzen, in zwei verschiedenen Anwendungen.</p>
<p>Da wir nur mit einer Datei die komplette Ausgabe steuern, müssen wir, um die Navigation auch auf einzelnen Beiträgen zu realisieren, die Darstellung abfragen. Also nutzen wir die if-Abfragen und prüfen, ob es sich nicht um eine einzelne Beitrags-Seite handelt - <code>!is_single()</code>. Im Anschluss prüfen wir, ob es sich um eine Beitragsseite handelt, die einzelne dargestellt wird - <code>is_single()</code>. Je nach Abfrage, nutzen wir die jeweiligen Template Tags zur Ausgabe. Damit sieht unser Navigationsabschnitt wie folgt aus.</p>
<pre><code class="php">
&lt;p class="postlink"&gt;
&lt;?php if ( !is_single() ) next_posts_link(' &laquo;&laquo;&laquo; '); previous_posts_link(' &raquo;&raquo;&raquo; '); ?&gt;
&lt;?php if ( is_single() ) previous_post_link('%link', ' &laquo;&laquo;&laquo; '); next_post_link('%link', ' &raquo;&raquo;&raquo; '); ?&gt;	
&lt;/p&gt;
</code></pre>
<p>Zum Abschluss werden wir noch den Header mit Leben erfüllen und die Inhalte aus der Datenbank, also aus den Einstellungen des Backend holen.</p>
<pre><code class="php">
&lt;div id="header"&gt;
	&lt;h1&gt;&lt;a accesskey="1" href="&lt;?php bloginfo('url'); ?&gt;/"&gt;&lt;?php bloginfo('name'); ?&gt;&lt;/a&gt;&lt;/h1&gt;
	&lt;p&gt;&lt;?php bloginfo('description'); ?&gt;&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<p>Damit übergeben wir mit dem schon in <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Teil 3</a> ausgiebig erläuterten Template Tag <code>bloginfo()</code> den Link, den Namen und die Beschreibung des Weblog an den Header. Somit genügt nun ein Klick auf die Überschrift im Header und wir befinden uns wieder auf der Startseite. Alternativ kann man auch die Accesskey nutzen, denn dazu haben wir den Syntax <code>accesskey="1"</code> hinterlegt. Im Firefox ist dazu das Drücken von Alt + Shitf und 1 erforderlich. Dazu aber mehr auf <a href="http://www.google.de/search?q=accesskey+web&#038;sourceid=navclient-ff&#038;ie=UTF-8&#038;rlz=1B3GGGL_deDE235DE235">vielen Webseiten</a>, die sich mit dem Thema Barrierefreiheit bzw. -arm beschäftigen.</p>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="amount" id="eins" value="" /><br />
<input type="hidden" name="cmd" value="_xclick" /><input type="hidden" name="business" value="frank@bueltge.de" /><input type="hidden" name="item_name" value="Spende bueltge.de" /><input type="hidden" name="no_shipping" value="1" /><input type="hidden" name="return" value="http://bueltge.de/" /><input type="hidden" name="cancel_return" value="http://bueltge.de/" /><input type="hidden" name="currency_code" value="EUR" /><input type="hidden" name="tax" value="0" /><input type="hidden" name="bn" value="PP-DonationsBF" /><input type="image" src="http://bueltge.de/wp-content/images/donate.png" style="border:0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!" /><br />
</form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.<br />
Möchtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<p>Download als zip-Datei: <a href="http://bueltge.de/wp-content/download/theme_schreiben/wp_tutorial_teil4.zip">wp_tutorial_teil4.zip</a> - 1 kByte</p>
<div style="clear:both;">&emsp;</div>
<h3>Fazit und Ausblick</h3>
<p>Nun sind wir bei dem wichtigstem Ausgabeelemet von WordPress angekommen - der Loop. Ich hoffe, dass ich es ein wenig verständlich darlegen konnte. Der Loop ist sehr mächtig und kann sehr vielfältig beeinflusst werden. Dazu aber später in einem anderen Abschnitt. Sollte noch Bedarf bestehen, so werde ich an dieser Serie weiter arbeiten und würde dann im nächsten Artikel den Sidebar einbinden und das Theme Widget-fähig machen. Damit sind der Vielfältigkeit der Gestaltung im Sidebar viele Möglichkeiten gegeben und es ist steuerbar im Backend.</p>
<p>Ebenso sollte man die Reihenfolge und Unterstützung der Templates in WordPress kennen und nutzen, die Variation des Loop, eigene und mehrfache Schleifen und die Beieinflussung per Funktionen im Theme sind nur einige Themenpunkte, die WordPress sehr interessant machen. Werden wir also sehen, wohin uns diese Reise führt.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/feed/</wfw:commentRss>
		<slash:comments>89</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/theme_schreiben/wp25_einstellungen_lesen.png" />
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/wp25_einstellungen_lesen.png" medium="image">
			<media:title type="html">Einstellungen in WP 2.5</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>WP - Tutorial, wir schreiben ein WordPress Theme - Teil 3</title>
		<link>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/</link>
		<comments>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 20:52:42 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/</guid>
		<description><![CDATA[Nachdem wir im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">zweiten Teil</a> der Serie &#8222;Ein WordPress Theme selbst erstellen&#8221; das Stylesheet mit Hilfe der Template Tags eingebunden haben, sollen nun im dritten Teil alle weiteren Daten aus dem Backend von WordPress geladen werden. Damit wird die Grundlage geschaffen, dass ein Theme die Einstellungen des jeweiligen Weblogs nutzt und das Theme in jedem beliebigen Weblog einsetzbar ist.

Gleich vorweg, es wird in diesem Artikel eine ganze Reihe an Code kommen. Bitte nicht verzweifeln, wenn es der erste Kontakt mit PHP-Syntax ist. Mit der Zeit kommt die Übung, ganz gleich wie das Lernen von HTML. Außerdem werde ich gleichzeitig auf eine Reihe Template Tags und Funktionen eingehen, die für das erstellen eines Themes von Relevanz sind und in diesem Teil des Tutorials nötig sind.

Im diesem Abschnitt des Tutorials werden wir den <code>head</code>-Abschnitt der <code>index.php</code> erweitern. Es werden nicht nur die statischen Daten so erweitert, dass die Werte aus der Datenbank gezogen werden, sondern ich erweitere gleich um eine Reihe weiterer Zeilen und Zeichen, um die Möglichkeiten und nach meiner Meinung wichtigen Daten zu integrieren.]]></description>
			<content:encoded><![CDATA[<div class="contentnavi">
<h3>Inhalt:</h3>
<ul>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/">Teil 1 - Wir legen los,<br />Voraussetzungen,<br />Grundlagen, Layout</a></li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">Teil 2 - Das statische<br />Design wird<br />WordPress-fähig</a></li>
<li>Teil 3 - Noch mehr Daten<br />aus dem Backend</li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/">Teil 4 - Der Loop</a></li>
<li>. . .</li>
</ul>
</div>
<p>Nachdem wir im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">zweiten Teil</a> der Serie &bdquo;Ein WordPress Theme selbst erstellen&rdquo; das Stylesheet mit Hilfe der Template Tags eingebunden haben, sollen nun im dritten Teil alle weiteren Daten aus dem Backend von WordPress geladen werden. Damit wird die Grundlage geschaffen, dass ein Theme die Einstellungen des jeweiligen Weblogs nutzt und das Theme in jedem beliebigen Weblog einsetzbar ist.</p>
<p>Gleich vorweg, es wird in diesem Artikel eine ganze Reihe an Code kommen. Bitte nicht verzweifeln, wenn es der erste Kontakt mit PHP-Syntax ist. Mit der Zeit kommt die Übung, ganz gleich wie das Lernen von HTML. Außerdem werde ich gleichzeitig auf eine Reihe Template Tags und Funktionen eingehen, die für das erstellen eines Themes von Relevanz sind und in diesem Teil des Tutorials nötig sind.</p>
<p>Im diesem Abschnitt des Tutorials werden wir den <code>head</code>-Abschnitt der <code>index.php</code> erweitern. Es werden nicht nur die statischen Daten so erweitert, dass die Werte aus der Datenbank gezogen werden, sondern ich erweitere gleich um eine Reihe weiterer Zeilen und Zeichen, um die Möglichkeiten und nach meiner Meinung wichtigen Daten zu integrieren.<span id="more-527"></span></p>
<h3><code>html</code>-Tag</h3>
<p>Als erstes wird der Doctype deklariert. Ich wähle dabei XHTML 1.0 Transitional und erweitere den <code>html</code>-Tag lediglich um eine Funktion von WordPress <code>language_attributes()</code>.</p>
<pre><code>
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &amp;lt;?php if ( function_exists('language_attributes') ) language_attributes(); ?&amp;gt; id=&quot;fb&quot;&gt;
</code></pre>
<p>Diese Funktion übergibt zwei Werte die für sauberen und validierbaren Code nötig sind. </p>
<pre><code>dir="ltr" lang="de-DE"</code></pre>
<p>Das Attribut <code>dir</code> bekommt den Wert aus den WordPress-Einstellungen und übergibt den Wert <code>ltr</code>, womit der Text von links nach rechts (<strong>l</strong>eft <strong>t</strong>o <strong>r</strong>ight) dargestellt wird. Nähere Information zum Beispiel bei <a href="http://de.selfhtml.org/html/text/logisch.htm#textrichtung">SELFHTML</a>.</p>
<p>Das Attribut <code>lang</code> übergibt die Sprache der Website und wird aus der <code>wp-config.php</code> gezogen. Je nach dem welcher Wert dort hinterlegt wurde, wird nun das Attribut lang ergänzt. Bekommt die Konstante <code>WPLANG</code> in der <code>wp-config.php</code> keinen Wert zugeordnet, so wird auch kein Wert für das Attribut <code>lang</code> ausgeben, wie es beispielsweise die Sprache des Weblog und Backend interpretiert. In dem Fall wird en_US genutzt und ausgeben, interessant bei der Erstellung von mehrsprachigen Themes oder Plugins. Gleichzeitig wird aber auch das Attribut nicht ausgegeben, also lediglich das <code>dir</code>-Attribut.</p>
<div class="contentdiv">
<h4>Tipp</h4>
<p>Es empfiehlt sich, alle verwendeten Funktionen innerhalb des Templates mit der PHP-Funktion <code>function_exists</code> abzufragen.</p>
<pre><code>&lt;?php if ( function_exists('FUNKTION') ) FUNKTION(); ?&gt;</code></pre>
<p>Nur so kann sicher gestellt werden, dass das Weblog auch ohne die Funktion auf unterschiedlichen Plattformen funktioniert. Natürlich ist auch das kein Garant, je nach Aufbau des Markups, aber damit können oft Probleme in der Darstellung oder lästige PHP-Fehlermeldungen auf das Weblog umgangen werden. Das gleiche gilt natürlich auch für die Integration von Plugins, werden sie deaktiviert, dann ist das Weblog auch weiterhin verfügbar. Dieses wenigen Zeilen sollten es euch wert sein und der Leser wird nicht mit unwichtigen PHP-Fehlermeldungen genervt.<br />
Näheres ist ebenso im Artikel &bdquo;<a href="http://bueltge.de/abfrage-einer-php-funktion-bzw-wp-plugins/160/">Abfrage einer PHP-Funktion, bzw. WP-Plugins</a>&rdquo; nachzulesen.
</div>
<p>Möchte man die beiden Attribute einzelnen übergeben, dann steht die Funktion <code>get_bloginfo()</code> als Alternative zur Verfügung. Bei der Verwendung dieser Möglichkeit, würde unser Beispiel wie folgt aussehen.</p>
<pre><code>&lt;html xmlns="http://www.w3.org/1999/xhtml" dir="&lt;?php echo get_bloginfo('text_direction'); ?&gt;" lang="&lt;?php echo get_bloginfo('language'); ?&gt;" id="fb"&gt;</code></pre>
<p>Allerdings muss in diesem Fall beachtet werden, dass bei nicht hinterlegtem Wert für die Konstante <code>WPLANG</code> in der <code>wp-config.php</code> auch kein Wert gezogen wird. Das Attribut <code>lang</code> steht also ohne Inhalt, was zu Fehlern führt. Also diese Version nur bei gepflegtem Wert in der <code>wp-config.php</code> nutzen.</p>
<h3><code>head</code>-Tag</h3>
<p>WordPress unterstützt das Metadaten-Profil der <a href="http://www.gmpg.org/xfn/">XHMTL Friens Network</a> (XFN) und dieses wird dem <code>head</code>-Tag hinzugefügt. Das Attribut <code>profile</code> ist dafür zuständig. Kurz gesagt, kann man damit persönliche Beziehungen über Links deklarieren. WordPress nutzt das bei der Definition der Links in der Blogroll (<a href="http://de.wikipedia.org/wiki/XHTML_Friends_Network" title="mehr dazu gibt es unter anderem bei Wikipedia">mehr zu XFN</a>).</p>
<pre><code>
&lt;head profile=&quot;http://gmpg.org/xfn/11&quot;&gt;
</code></pre>
<p>Innerhalb des head-Abschnittes werden eine Reihe an <code>meta</code>-Tags definiert, bei denen ich eine ganze Reihe mehr als unbedingt nötig nutze. Das hat einerseits den Grund der Suchmaschinenfütterung und andererseits den Grund alle Daten zu dem Dokument Weblog zu hinterlegen, der für sauberen und vollständigen Code nötig ist.</p>
<h4><code>meta</code>-Tag die 1.</h4>
<p>Die ersten beiden <code>meta</code>-Tags legen den <code>Content-Type</code> (Angaben zur Zeichencodierung) und den <code>Content-Script-Type</code> (Angaben zum Standard für Scripte) fest. Sollte keinerlei Script zum Einsatz kommen, dann kann die Zeile fehlen. In der Regel sind aber immer JavaScript-Codes in der Ausgabe des Weblog zu finden.</p>
<pre><code>
&lt;meta http-equiv="Content-Type" content="&lt;?php bloginfo('html_type'); ?&gt;; charset=&lt;?php bloginfo('charset'); ?&gt;" /&gt;
&lt;meta http-equiv="Content-Script-Type" content="text/javascript" /&gt;
</code></pre>
<p>Im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">zweiten Teil dieses Tutorials</a> haben wir den Template Tag <code><strong>bloginfo()</strong></code> schon einmal verwendet, zur Angabe der Stylesheet-Adresse.<br />
Dieser Tag ist ein recht mächtiger und wichtiger Template Tag bei dem Erstellen von Theme und Plugins. Er akzeptiert eine große Anzahl von Parametern. Der <a href="http://codex.wordpress.org/Template_Tags/bloginfo">Codex</a> stellt nicht alle Möglichkeiten des Tags dar, deshalb kurz die Möglichen Parameter und was es damit auf sich hat.</p>
<p>Die Funktion <code>bloginfo()</code> ist im übrigen nur die Ausgabe (<code>echo</code>) von der Funktion <code>get_bloginfo()</code>. Sollte man also den Wert eines Parameters ohne Ausgabe wünschen, dann kann die Funktion <code>get_bloginfo()</code> als Alternative dienen.</p>
<ul>
<li><code>url</code> Blog-Adresse (URL) aus den Einstellungen im Backend (ehemals auch <code>home</code> oder <code>siteurl</code>, fällt aber in den Folgeversionen >2.4 von WP weg)</li>
<li><code>wpurl</code> WordPress-Adresse (URL) aus den Einstellungen im Backend (Installationsadresse)</li>
<li><code>description</code> Blog-Thema aus den Einstellungen im Backend</li>
<li><code>rdf_url</code> URL für RDF/RSS 1.0 Feed</li>
<li><code>rss_url</code> URL für RSS 0.92 Feed</li>
<li><code>rss2_url</code> URL für RSS 2.0 Feed</li>
<li><code>atom_url</code> URL für den Atom Feed</li>
<li><code>comments_atom_url</code> URL für den Atom Feed zu Kommentaren</li>
<li><code>comments_rss2_url</code> URL für den RSS 2.0 Feed zu Kommentaren</li>
<li><code>pingback_url</code> Pingback Adresse</li>
<li><code>stylesheet_url</code> URL zum Stylesheet des aktiven Themes (muss im Theme ohne Unterordner liegen)</li>
<li><code>stylesheet_directory</code> URL zum Ordner des verwendeten Stylesheets</li>
<li><code>template_directory</code> oder <code>template_url</code> URL zum Order des aktiven Themes</li>
<li><code>admin_email</code> E-Mail-Adresse des Administrators aus den allgemeinen Einstellungen im Backend</li>
<li><code>charset</code> Zeichensatz aus den lesenden Einstellungen im Backend</li>
<li><code>html_type</code> <code>Content-Type</code> für das Blog</li>
<li><code>version</code> Version der WordPress-Installation</li>
<li><code>language</code> Sprache aus der <code>wp-config.php</code>, siehe oben im Abschnitt</li>
<li><code>text_direction</code> Wert für das <code>dir</code>-Attribut, siehe oben im Abschnitt</li>
<li><code>name</code> Blogtitel aus den allgemeinen Einstellungen im Backend</li>
</ul>
<h4><code>title</code>-Tag</h4>
<p>In der folgenden Zeile übergebe ich den <code>title</code>-Tag, der den Title des jeweiligen Beitrags, Seite, Kategorie usw. übergeben soll. Im einfachsten Fall wird dieser mit Hifle des Template Tag <code>the_title()</code> gefüttert.</p>
<pre><code>&lt;title&gt;&lt;?php wp_title(); ?&gt;&lt;/title&gt;</code></pre>
<p>Der Template Tag <code><strong>the_title()</strong></code> hat dabei die Funktion der Übergabe des jeweiligen Beitrags, Seite, Archiv usw.. Der <a href="http://codex.wordpress.org/Template_Tags/the_title">Codex</a> beschreibt den Tag ausführlich.</p>
<pre><code>&lt;?php the_title('before', 'after', display); ?&gt;</code></pre>
<p><strong>Parameter:</strong><br />
<code>before</code> (string) Text vor dem Titel, standard ist ''<br />
<code>after</code> (string) Text nach dem Titel, standard ist ''<br />
<code>display</code> (Boolean) Zeige den Title (TRUE) oder Rückgabe für PHP (FALSE), standard ist TRUE.</p>
<p>Natürlich lässt sich dieser beliebig erweitern, beispielsweise um den Namen des Weblog.</p>
<pre><code>
&lt;title&gt;&lt;?php bloginfo('name'); ?&gt;&lt;?php wp_title(); ?&gt;&lt;/title&gt;
</code></pre>
<p>Allerdings sollte man wissen, dass eine derartige Darstellung nicht besonders schön für Leser, die beispielsweise einen Beitrag als Lesezeichen ablegen, oder Suchmaschinen ist. Dafür nutze ich die Conditional Tags und je nach geladenem Dokument-Type wird der Title angepasst. Eine Möglichkeit könnte wie folgt aussehen.</p>
<pre><code>
&lt;title&gt;&lt;?php if ( is_home() ) { _e('Startseite | ', 'THEMENAME'); } wp_title(' '); if (wp_title(' ', false)) { echo ' | '; } bloginfo('name'); ?&gt;&lt;/title&gt;
</code></pre>
<p>Im Beitrag &bdquo;<a href="http://bueltge.de/wp-wordpress-titel-aendern/102/">WordPress Titel ändern</a>&rdquo; bin ich schon auf Hintergründe und Lösungen eingegangen. Deshalb hier keine weiteren Erklärungen. Lediglich die Erläuterung zum Thema Conditional Tags soll nicht verloren gehen.</p>
<p><strong id="conditionaltags">Conditional Tags</strong> sind Funktionen, mit denen man Bedingungen abfragen kann. Die Ausgabe des Weblog ist damit vielfältig und einfach steuerbar. Es gibt eine ganze Reihe von Conditional Tags. Einige von ihnen können Parameter aufnehmen. Das Ergebnis der Übergabe ist immer <code>TRUE</code> oder <code>FALSE</code>.</p>
<ul>
<li><code>is_admin</code> Wenn im Adminbereich</li>
<li><code>is_archive</code> Ob ein Archiv dargestellt wird</li>
<li><code>is_attachment</code> Anhang im Beitrag oder Seite</li>
<li><code>is_author</code> Autorenseite</li>
<li><code>is_category</code> Kategorie Archiv oder Parameter</li>
<li><code>is_tag</code> Tag-seite</li>
<li><code>is_comments_popup</code> Kommentar per Popup Funktion</li>
<li><code>is_date</code> Archivseite auf Basis Datum</li>
<li><code>is_day</code> Archivseite auf Basis Tag</li>
<li><code>is_feed</code> wenn es ein Feed ist</li>
<li><code>is_front_page</code> die definierte Startseite des Blog (nur ab WP 2.5)</li>
<li><code>is_home</code> Startseite (nicht nur die statische Seite)</li>
<li><code>is_month</code> Archivseite auf Basis Monat</li>
<li><code>is_page</code> statische Seite</li>
<li><code>is_paged</code> Seite/ Weblog wurde &bdquo;geblättert&rdquo;</li>
<li><code>is_preview</code> Vorschau</li>
<li><code>is_robots</code> </li>
<li><code>is_search</code> Suchseite</li>
<li><code>is_single</code> einzelner Beitrag</li>
<li><code>is_singular</code> </li>
<li><code>is_time</code> Archivseite auf Basis Zeit</li>
<li><code>is_trackback</code> wenn es es sich um Pingback oder Trackback handelt</li>
<li><code>is_year</code> Archivseite auf Basis Jahr</li>
<li><code>is_404</code> Fehlerseite 404</li>
</ul>
<p>Nicht alle Tags sind im Theme-Umfeld üblich, trotzdem sollen sie erwähnt werden und stehen somit als vollständige Liste zur Verfügung. Eine Dokumentation der Conditional Tags findet man ebenso im <a href="http://codex.wordpress.org/Conditional_Tags">Codex</a>.</p>
<h4><code>meta</code>-Tag die 2.</h4>
<p>In den folgenden Zeilen werden eine ganze Reihe von <code>meta</code>-Tags hinterlegt und mit Werten gefüllt. Wenn möglich, dann fülle ich diese mit Daten aus dem Backend. Dabei kommen wieder die bereits erwähnten Template Tags zum Tragen. Deshalb werde ich auch nicht auf jede Zeile eingehen, Informationen zu den Möglichkeiten mit Tag <code>bloginfo()</code> bzw. <code>get_bloginfo()</code> sind im obigen Abschnitt zu finden.<br />
Ebenso wende ich Conditional Tags an, um den Inhalt der Attribute je nach Ausgabe entsprechend zu füllen.</p>
<pre><code>
&lt;meta name=&quot;generator&quot; content=&quot;WordPress &lt;?php bloginfo('version'); ?&gt;&quot; /&gt;
&lt;meta name=&quot;robots&quot; content=&quot;index, follow&quot; /&gt;
&lt;meta name=&quot;description&quot; content=&quot;&lt;?php if ( is_single() ) { wp_title(''); echo ' - '; } elseif ( is_page() ) { wp_title(''); echo ' - '; } bloginfo('description'); ?&gt;&quot; /&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;
&lt;meta name=&quot;language&quot; content=&quot;&lt;?php bloginfo('language'); ?&gt;&quot; /&gt;
&lt;meta name=&quot;content-language&quot; content=&quot;&lt;?php bloginfo('language'); ?&gt;&quot; /&gt;
&lt;meta name=&quot;publisher&quot; content=&quot;&lt;?php bloginfo('name'); ?&gt;&quot; /&gt;
&lt;meta name=&quot;revisit-after&quot; content=&quot;1 days&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;Frank Bueltge&quot; /&gt;
</code></pre>
<p>Die Übergabe von Keywords im entsprechendem <code>meta</code>-Tag ist nicht so ohne weiteres möglich. Der kann beispielsweise mit den <a href="http://bueltge.de/wordpress-benutzerdefinerte-felder-custom-fields/525/">benutzerdefinierten Feldern</a> oder einem Plugin entsprechend dem Inhalt der Ausgabe befüllt werden.</p>
<h4>Stylesheet laden</h4>
<p>Im Anschluss lade ich das Stylesheet des Themes. Diese Zeilen haben wir schon im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">Teil 2</a> des Tutorials besprochen und dementsprechend <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">verweise</a> ich nur drauf und hinterlasse hier keine weiteren Zeilen Erklärung.</p>
<h4><code>link</code>-Tag</h4>
<p>Der <code>link</code>-Tag ist im Zusammenhang mit seinem <code>rel</code>-Attribut eine sehr sinnvolle Erweiterung mit Mehrwert. In unserem Fall definieren wir die RSS 2.0 Feed-URL, das Favicon und die Pingback-URL des Blogs und können so eine Reihe von weiteren Funktionen vieler Browser bzw. Applikationen nutzen.<br />
Auch hierbei kommt der Template Tag <code>bloginfo()</code> zum Einsatz.</p>
<pre><code>
&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;RSS 2.0&quot; href=&quot;&lt;?php bloginfo('rss2_url'); ?&gt;&quot; /&gt;
&lt;link rel=&quot;Shortcut Icon&quot; type=&quot;image/x-icon&quot; href=&quot;&lt;?php bloginfo('url'); ?&lt;/favicon.ico&quot; /&gt;
&lt;link rel=&quot;pingback&quot; href=&quot;&lt;?php bloginfo('pingback_url'); ?&gt;&quot; /&gt;
</code></pre>
<h4><code>wp_head</code> Hook</h4>
<p>Bevor wir zum Abschluss des Abschnittes <code>head</code> kommen, erweitern wir den Teil noch um den Hook <code>wp_head</code>. Dieser ermöglicht die Erweiterung der Daten im <code>head</code>-Abschnitt durch WordPress, zum Beispiel durch Plugins innerhalb des Backends. Alle Daten können mit Hilfe dieses Hook aus dem Backend, einem Plugin, direkt hier hinzugefügt werden, ohne Arbeit am Code. Dies macht die Einbindung von Plugins einfacher, insofern sie Daten hier ablegen müssen und ebenso die Integration von neuen Funktionen der WordPress-Anwender. (<a href="http://codex.wordpress.org/Theme_Development#Plugin_API_Hooks">Doku im Codex</a>)</p>
<pre><code>&lt;?php wp_head(); ?&gt;</code></pre>
<h3>kompletter Code <code>doctype</code>, <code>html</code> und <code>head</code></h3>
<p>Zum Schluss nun noch der komplette Code des besprochenen Abschnittes.</p>
<pre><code>
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &lt;?php if ( function_exists('language_attributes') ) language_attributes(); ?&gt; id=&quot;fb&quot;&gt;

&lt;head profile=&quot;http://gmpg.org/xfn/11&quot;&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;&lt;?php bloginfo('html_type'); ?&gt;; charset=&lt;?php bloginfo('charset'); ?&gt;&quot; /&gt;
	&lt;meta http-equiv=&quot;Content-Script-Type&quot; content=&quot;text/javascript&quot; /&gt;
	
	&lt;title&gt;&lt;?php if (is_home()) { _e('Startseite | ', 'THEMENAME'); } wp_title(' '); if (wp_title(' ', false)) { echo ' | '; } bloginfo('name'); ?&gt;&lt;/title&gt;

	&lt;meta name=&quot;generator&quot; content=&quot;WordPress &lt;?php bloginfo('version'); ?&gt;&quot; /&gt;
	&lt;meta name=&quot;robots&quot; content=&quot;index, follow&quot; /&gt;
	&lt;meta name=&quot;description&quot; content=&quot;&lt;?php if ( is_single() ) { wp_title(''); echo ' - '; } elseif ( is_page() ) { wp_title(''); echo ' - '; } bloginfo('description'); ?&gt;&quot; /&gt;
	&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;
	&lt;meta name=&quot;language&quot; content=&quot;&lt;?php bloginfo('language'); ?&gt;&quot; /&gt;
	&lt;meta name=&quot;content-language&quot; content=&quot;&lt;?php bloginfo('language'); ?&gt;&quot; /&gt;
	&lt;meta name=&quot;publisher&quot; content=&quot;&lt;?php bloginfo('name'); ?&gt;&quot; /&gt;
	&lt;meta name=&quot;revisit-after&quot; content=&quot;1 days&quot; /&gt;
	&lt;meta name=&quot;author&quot; content=&quot;Frank Bueltge&quot; /&gt;
	
	&lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;
		@import url( &lt;?php bloginfo('stylesheet_url'); ?&gt; );
	&lt;/style&gt;

	&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;RSS 2.0&quot; href=&quot;&lt;?php bloginfo('rss2_url'); ?&gt;&quot; /&gt;
	&lt;link rel=&quot;Shortcut Icon&quot; type=&quot;image/x-icon&quot; href=&quot;&lt;?php bloginfo('url'); ?&gt;/favicon.ico&quot; /&gt;
	&lt;link rel=&quot;pingback&quot; href=&quot;&lt;?php bloginfo('pingback_url'); ?&gt;&quot; /&gt;

	&lt;?php wp_head(); ?&gt;

&lt;/head&gt;
</code></pre>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick"><br />
<input type="hidden" name="hosted_button_id" value="DT9BG8NJTXQN4"><br />
<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."><br />
<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 php-Datei: <a href="http://bueltge.de/wp-content/download/theme_schreiben/wp_tutorial_teil3.zip">wp_tutorial_teil3.zip</a> - 2 kByte</p>
<h3>Fazit und Ausblick</h3>
<p>In diesem dritten Teil der Serie haben wir eine ganze Reihe neuer Informationen, so hoffe ich, gelernt. Die Mächtigkeit der Conditional Tags ist hoffentlich zum Tragen gekommen und ebenso das Verständnis der Template Tags, auch wenn wir nur sehr wenige der vielen Tags genutzt haben.</p>
<p>Im kommen Teil 4 werde ich den Loop ins Spiel bringen, denn nun soll es endlich Daten aus dem Backend geben. Ich hoffe, dass es nicht zu theoretisch und zu langweilig ist, aber nur so kann ich auf die kleinen Details eingehen und Bezug zu den Unterschieden zu einer statischen HTML-Datei nehmen. Noch mehr Inhalt in die jeweiligen Teile zu bringen, halte ich für weniger gut und es macht die Seite unleserlich. Außerdem ist es für mich auch recht viel Aufwand derartige Artikel zu schreiben.</p>
<p>Auch hier wieder der Hinweis, ich freue mich über Feedback in jeder Form.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:thumbnail url="http://bueltge.de//www.paypal.com/de_DE/i/scr/pixel.gif" />
		<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>WP - Tutorial, wir schreiben ein WordPress Theme - Teil 2</title>
		<link>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/</link>
		<comments>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/#comments</comments>
		<pubDate>Sun, 30 Sep 2007 19:32:43 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/</guid>
		<description><![CDATA[Im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/">ersten Teil des Tutorial</a> zum erstellen eines WordPress-Themes haben wir Grundsteine gelegt. Ich hoffe, dass sich alle Teilnehmer mit den Markups und CSS-Styles der verschiedenen Layouts auseinander gesetzt haben?

Prinzipiell kann nun mit jedem beliebigen Layout weiter gearbeitet werden. Die Basis stellt immer eine statische HTML-Datei dar. So hat man die Möglichkeit das Layout in verschiedenen Browsern zu testen und einen Überblick über eventuelle Probleme zu erhalten.]]></description>
			<content:encoded><![CDATA[<div class="contentnavi">
<h3>Inhalt:</h3>
<ul>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/">Teil 1 - Wir legen los,<br />Voraussetzungen,<br />Grundlagen, Layout</a></li>
<li>Teil 2 - Das statische<br />Design wird<br />WordPress-fähig</li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Teil 3 - Noch mehr Daten<br />aus dem Backend</a></li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/">Teil 4  -Der Loop</a></li>
<li>. . .</li>
</ul>
</div>
<p>Im <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/">ersten Teil des Tutorial</a> zum erstellen eines WordPress-Themes haben wir Grundsteine gelegt. Ich hoffe, dass sich alle Teilnehmer mit den Markups und CSS-Styles der verschiedenen Layouts auseinander gesetzt haben?</p>
<p>Prinzipiell kann nun mit jedem beliebigen Layout weiter gearbeitet werden. Die Basis stellt immer eine statische HTML-Datei dar. So hat man die Möglichkeit das Layout in verschiedenen Browsern zu testen und einen Überblick über eventuelle Probleme zu erhalten.<br />
<span id="more-513"></span></p>
<div class="contentdiv">
<h4>Tipp:</h4>
<p>Du hast einen Entwurf auf Papier bzw. einem Grafikprogramm gemacht, dann lade es als Hintergrundbild in deine neue Seite und baue die jeweiligen Container und Markup-Elemente mit Hilfe eines Editors nach. Zeichne die nötigen Container (<code>div</code>) auf das Papier, vergebe <code>id</code> und <code>class</code> und vermerke sie ebenso auf dem Papier.<br />
Stehen alle wichtigen Container, dann kannst du beispielsweise im Browser <a href="http://pagead2.googlesyndication.com/pagead/iclk?sa=l&#038;num=0&#038;client=ca-ref-pub-6961884676946222&#038;adurl=http://tools.google.com/firefox/toolbar/bundle/intl/de/%3Fai%3DBI11YiNCTRrf9EaGinQObqKHBDdGe8heFl5OXAsWNtwEAEAEgrJ2EBDgBUMCYt8UCYJWit4LIB5gBlIcBmAG-iAGYAYWTBqABtZXI_QOyAQpidWVsdGdlLmRlyAEC2gESaHR0cDovL2J1ZWx0Z2UuZGUvgAIBqAMD&#038;ai=BQZ2hiNCTRrf9EaGinQObqKHBDdGe8heFl5OXAsWNtwEAEAEgrJ2EBDgBULvKk9L______wFglaK3gsgHmAGUhwGYAb6IAZgBhZMGoAG1lcj9A7IBCmJ1ZWx0Z2UuZGXIAQLaARJodHRwOi8vYnVlbHRnZS5kZS-AAgGoAwM">Firefox</a> und dem Add-on <a href="http://chrispederick.com/work/web-developer/">WebDeveloper</a> das Deisgn live editieren, auf Basis der Grafikdatei die als Hintergrund hinterlegt ist.
</div>
<p>Hat man später ausreichend Erfahrung muss sicher nicht auf Basis eines statische Layouts aufgebaut werden, aber so kann man eine Reihe von Problemen umgehen. Auch im Bezug auf professionelle Entwicklungen kann so im Vorfeld eine Reihe von Komplikationen umgangen werden. Der Kunde kann eine Layout sehen, ohne das spezifische Wissen über WordPress zu integrieren. In der Regel soll er erstmal einen Entwurf außerhalb des Papiers absegnen und das geht sicher mit einer statischen HTML-Seite scheller. Nun aber zum Umsetzen, so dass wie die simple HTML-Datei mit Daten von WordPress füttern.</p>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/absolute_pos.html"><img class="alignright" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_ap.gif" alt="Absolute Positionierung" /></a></p>
<p>Ich beziehe mich in den folgenden Abschnitten immer auf das <strong>absolut positionierte Layout</strong>. Warum? - ganz einfach, ich möchte Probleme mit CSS umgehen und eine Reihe von lieben Lesern meines Blogs möchten Layouts im Rahmen der CMS-Anwendung umsetzen. Aber wie gesagt, um WordPress zu verstehen, spielt es keine Rolle, das sind Grundlagen und Können im Rahmen von HTML und CSS.</p>
<blockquote><p>Ich bin ein Amateur-Webdesigner. Im Allgemeinen unterstütze ich das Profi-Tun im Webdesign nicht, sobald es über das Vermitteln von &bdquo;Basics&rdquo; und eine lockerer Anleitung hinausgeht. Ich gebe mein Bestes und ich bin ein starker Verfechter der Methode sich selbst zu motivieren und selbst zu lernen. <cite>Frank Bueltge</cite></p></blockquote>
<p>Damit wir das komplette Layout nun aber sauber und standardisiert außerhalb des Markup haben, muss der interne Styleabschnitt in die <code>style.css</code> integriert werden. Dazu nehmt eines der Beispielmarkups, mit dem ihr das Tutorial weiter absolvieren wollt und kopiert den Inhalt zwischen</p>
<pre><code>
&lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;

&lt;/style&gt;
</code></pre>
<p>Die CSS-Anweisungen kopiert ihr in die bestehende <code>style.css</code>.  Die beiden oben genannten Zeilen löscht ihr dann, inklusiver der Styleanweisungen. Somit steht nun nur noch die Anweisung für moderne Browser im Markup zum Laden des Stylesheets <code>@import url( style.css );</code>, gefolgt in von den Zeilen:</p>
<pre><code>
&lt;/head&gt;
&lt;body&gt;
</code></pre>
<p>Für alle sparsamen Teilnehmer, der Code steht im Anschluss wieder zum Download bereit.</p>
<h3>WordPress erkennt das Template</h3>
<p>Im aktuellen Zustand haben wir unser Design lediglich als HTML-Datei vorliegen. Damit WordPress die Datei erkennt und damit arbeiten kann, müssen wir nun eine Reihe von Anpassungen vornehmen. Ich werde versuchen, es so einfach und nachvollziehbar wie möglich zu erläutern. Tipps, Kritik und Verbesserungen sind erwünscht. In diesem Teil wird es noch wenig Code sein, aber das ändert sich ab Teil 3 dieses Tutorial.</p>
<p>Nachdem wir die statische HTML-Datei in unserem Editor des Vertrauens geöffnet haben, werden nun einige Eckdaten so geändert, dass die Inhalte aus der Datenbank kommen und Einstellungen des Blog an das Template übergeben werden. Nur so kann das Frontend, die eigentliche Seite für den Leser, sauber vom Backend, dem Administrationsbereich, angepasst werden.<br />
Dazu speichern wir als erstes die HTML-Datei als PHP-Datei unter dem Namen <code>index.php</code> ab, im gleichen Verzeichnis <code>wp-content/themes/wp_tutorial/</code>, in dem wir schon im ersten Teil gearbeitet haben. Dort liegt auch das Stylesheet der verschiedenen HTML-Layout-Vorschläge.</p>
<p>Nun könnt ihr schon das Theme im Backend von WordPress aktivieren und das Layout bewundern. </p>
<p>Ein nicht sonderlich schöner Anblick, denn es fehlt die Zuordnung des Stylesheets. Bisher wurde die Datei direkt zugewiesen <code>@import url( style.css );</code>. Das müssen wir nun im Sinne von WordPress tun und damit erscheint dann auch die Seite im Design des Stylesheets. Ändert also diese Anweisung in den folgenden Syntax: <code>@import url( &lt;?php bloginfo('stylesheet_url'); ?&gt; );</code>.</p>
<p><strong>Wichtig</strong>, das Stylesheet wird nur dann von WordPress als solches erkannt, wenn die Datei <code>style.css</code> heißt und die entsprechenden Kommentarfelder in der Datei vorhanden sind.</p>
<pre><code>
/*
Theme Name: WordPress Tutorial
Theme URI: http://bueltge.de
Description: Das Theme zum WordPress Tutorial
Version: 1.0
Author: Frank Bueltge
Author URI: http://bueltge.de
*/
</code></pre>
<h4>Template Tag</h4>
<p>Durch die Anpassung der <code>index.php</code> haben wir nun auch unseren ersten Template-Tag genutzt. Ein Grund, um ein wenig mehr darüber zu schreiben und zu verstehen.</p>
<p>Mit Hilfe der Template Tags werden Informationen aus der Datenbank an das Frontend, im Gewissen Maße auch an das Backend von WordPress übergeben. Im Grunde sind Template Tags PHP-Funktionen, welche in den Dateien der WordPress-Installation liegen. Einige dieser Template Tags können Parameter aufnehmen. Wobei die Parameter durch Variablen übergeben werden. Diese Variablen bekommen in den meisten Template Tags schon Werte mit und so können die Funktionen, die Template Tags unkompliziert eingesetzt werden.</p>
<p>Template Tags werden nach den Regeln von PHP in HTML eingebunden: <code>&lt;?php bloginfo('stylesheet_url'); ?&gt;</code>. Es wird also jeder Tag nach SGML Processing Instructions in HTML integriert: <code>&lt;?php ?&gt;</code>.</p>
<p>Es gibt eine ganze Reihe von Template Tags und am besten man gewöhnt sich an die Arbeit mit dem <a href="http://codex.wordpress.org">Codex</a>, der Dokumentation rund um WordPress, denn dort werden alle Template Tags erläutert und aktuell gehalten. Denn im Rahmen von neuen Versionen kommen neue Tags hinzu und ab und zu werden auch bestehende Tags verändert oder werden gar nicht mehr unterstützt.</p>
<div class="contentdiv">
<h4>Tipp:</h4>
<p>Du bist schon mit Template Tags vertraut und muss nicht mehr jeden Tag nachschlagen, dann nutze zum Beispiel das <a href="http://bueltge.de/wp-wordpress-cheat-sheet-fuer-theme-tags-und-plugin-api/205/">WordPress Cheat Sheet</a>, zur schnellen Übersicht der Tags, sortiert nach ihrem Einsatzbereich. Für die Inhaber meines <a href="http://wordpress-buch.bueltge.de">Buches</a>, im Anhang ist diese Übersicht beigefügt.
</div>
<p>Nun sind aber Template Tags nicht gleich Template Tag. Es gibt drei Arten von Tags:</p>
<ul>
<li>Tags ohne Parameter</li>
<li>Tags mit PHP-Funktion-Style-Paramtern</li>
<li>Tags mit Quera-Style-Parametern</li>
</ul>
<p>Was ist das nun wieder und muss ich das wissen? Die Unterscheidung ist bei der Arbeit an einem Theme sicher nicht von expliziter Bedeutung, Hauptsache man kann die Tags einsetzen und versteht die Anwendung. Trotzdem ist ein solides Hintergrundwissen niemals verkehrt und sorgt für mehr Verständnis beim Einsatz der Template Tags. Deshalb im folgenden kurz und knapp die Erläuterungen.</p>
<h5>Tags ohne Parameter</h5>
<p>Einige Funktionen benötigen keine Parameter und sind einfach und unkompliziert eingesetzt. Diese Tags werden lediglich mit Namen und folgender Klammerpaar eingesetzt. Ein typisches Beispiel ist <code>the_meta()</code>. Dieser Template Tag listet lediglich den Schlüssel und den Wert aus den benutzerdefinierten Feldern aus.</p>
<p><code>&lt;?php the_author(); ?&gt;</code></p>
<h5>Tags mit PHP-Funktion-Style-Parametern</h5>
<p>Ein große Anzahl der Template Tags akzeptiert Parameter. Diese Parameter werden genauso wie in PHP-Funktion eingesetzt und daher kommt auch der Name. Werden mehrere Parameter übergeben, so sind diese per Kommata zu trennen. Alle Parameter werden immer in ein Klammerpaar eingeschlossen. Und damit schließe ich auch wieder den Kreis zu unserem verwendeten Template Tag <code>bloginfo()</code>. Dieser Tag ist ein klassisches und viel verwendeter Tag mit PHP-Funktion-Style-Parametern. Er akzeptiert eine große Anzahl von Parametern und gibt je nach Parameter das entsprechende Ergebnis. In unserem aktuellen Fall die URl zur Stylesheet-Datei <code>bloginfo('stylesheet_url')</code>.</p>
<p><code>&lt;?php the_content('Weiterlesen ...'); ?&gt;</code></p>
<h5>Tags mit Query-Style-Parametern</h5>
<p>Damit aber nicht genug, denn es gibt noch ein drittes Model der Templates Tags. Diese Form nutzt den Query-String und entspricht damit der GET-Methode des HTTP-Protokolls. Dadurch kann man Template Tags, die eine besonders große Anzahl von Parametern besitzen, mit Hilfe eines Wrapper - einer Hülle nutzen. Dies führt dazu, dass man einen Template Tag schnell und einfach nutzen kann. Es müssen nur die Parameter übergeben werden, die man auch benötigt, nicht die benötigen der Funktion.</p>
<p>Es gibt nur eine Auswahl von Template Tags mit Wrapper. Am Syntax kann man einige Tags erkennen. In der Regel sind Tags, die einen Wrapper besitzen mit <code>wp_</code> am Anfang gekennzeichnet. Leider gilt das nicht ausnahmslos. Ein typisches Beispiel ist der Aufruf des Archiv <code>wp_get_archives()</code>. Dieser Tag mit Wrapper beruht auf der Funktion <code>get_archives('type', 'limit', format, 'before', 'after', 'show_post_counter')</code>. Benötigt man also nur eine oder wenige Paramater, so ist die Anwendung mit Wrapper wesentlich einfacher - <code>wp_get_archives('limit=5')</p>
<pre><code>
&lt;ul&gt;
&lt;?php wp_tag_cloud('smallest=8&#038;largest=22'); ?&gt;
&lt;/ul&gt;
</code></pre>
<h3>WordPress und das Theme</h3>
<p>Nach unserem Ausflug zu den Template Tags und der verschiedenen Arten, hoffe ich, dass alles ein wenig verständlicher ist. In diesem Teil des Tutorial ging es ja darum, dass wir WordPress im kleinsten Abschnitt dazu bringen, dass es unser Layout versteht. In diesem Sinne ist uns das auch gelungen. Aber es ist natürlich noch einiges an Arbeit und Veränderungen in der entstandenen <code>index.php</code> notwendig, damit es zu einem echten und mächtigen Theme wird, denn derzeit holen wir keinerlei Daten aus der Datenbank außer die Zuordnung der Stylesheet-Datei.</p>
<p>Da ich diesem Teil nicht weiter auf die Anpassung eingehen möchte und das Ergebnis so stehen soll, werde ich noch ein wenig das Theme im Sinne von WordPress erläutern. Denn um ein Layout für WordPress zu entwickeln, sollten die Grundlagen und das Wissen rund um das Theme bekannt sein.</p>
<p>WordPress Themes müssen bzw. sollten sich in einem Ordner befinden. Man kann mit einigen Lösungen den Ordner umgehen, aber das ist nicht sinnvoll und sorgt nur für zusätzliche Probleme. Sie liegen im Ordner <code>wp-content/themes/</code>. Damit WordPress mit den Dateien im Ordner des jeweiligen Themes etwas anfangen kann, muss man sich an entsprechende Konventionen halten.</p>
<p>Im Theme-Ordner liegen alle benötigten Dateien, dazu zählen in erster Linie die Templates und das Stylesheet. Im kleinsten und einfachsten Fall gehören die <code>index.php</code> und die <code>style.css</code> zu einem Theme. Damit könnte WordPress schon arbeiten.  Allerdings wird damit die Übersicht im Theme sehr schnell schlecht überschaubar und so unterstützt WordPress eine ganze Reihe weitere Dateien, die im Standard erkannt und genutzt werden. Zwingend im Theme sind also lediglich die <code>index.php</code> und die <code>style.css</code>. Werden die folgend vorgestellten Templates, außer die <code>index.php</code>, nicht gefunden, so wird immer die <code>index.php</code> als Darstellungsdatei genutzt.</p>
<ul>
<li><code>index.php</code> Das Hauptindex-Template die in der Regel als Startaufruf genutzt wird und bei allen Aktionen genutzt wird, die nicht anders definiert sind. Diese Datei muss vorhanden sein.</li>
<li><code>home.php</code> Das Template für eine Startseite, wenn eine extra Startseite gewünscht ist, die sich dann beispielsweise im Inhalt und Design von anderen Seiten unterscheidet.</li>
<li><code>single.php</code> Einzelne (<em>single</em>) Beiträge mit diesem Template geladen.</li>
<li><code>page.php</code> Die Seiten (<em>page</em>) werden mit diesem Template dargestellt.</li>
<li><code>category.php</code> Egal um welche Kategorie es sich handelt, es wird mit dieser Datei dargestellt.</li>
<li><code>author.php</code> Die Autoren der Webseite wollen sich vorstellen, dann kann mit dieser Datei ein entsprechendes Template genutzt werden.</li>
<li><code>date.php</code> Das Datum/Zeit-Template wird immer gezogen, wenn Ausgaben zu Jahr, Monat, Tag, Stunde Minute oder Sekunde geholt werden.</li>
<li><code>archive.php</code> Das Archiv ist ein klassisches Merkmal von WordPress und wird mit diesem Template unterstützt.</li>
<li><code>search.php</code> Das Suchergebnis, ob erfolgreich oder nicht, wird mit diesem Template in die richtige Form gebracht.</li>
<li><code>404.php</code> Error 404 - nicht gefunden, dann zieht WordPress dieses Template.</li>
<li><code>comments_popup.php</code> Diese Art der Kommentare, das Anzeigen mit Hilfe eines Popup ist kaum genutzt. Zur Verfügung steht trotzdem das Template und WordPress unterstützt es.</li>
</ul>
<p>&nbsp;</p>
<ul>
<li><code>header.php</code> Das Header-Template sollte sämtliche Informationen enthalten, die im Bereich <code>head</code> des HTML-Dokumentes anfallen.</li>
<li><code>sidebar.php</code> Das klassische Sidebar, ein Merkmal von Bloglayouts, wird mit diesem Template uterstützt.</li>
<li><code>footer.php</code> Das Footer-Template übernimmt alle Daten aus dem Fußbereich der Webseite und Daten, beispielsweise JavaScript, die im Anschluss an den klassischen Inhaltsaufbau geladen werden.</li>
<li><code>comments.php</code> Die Kommentare haben sich in der Blogosphäre etabliert und werden mit diesem Template innerhalb von WordPress unterstützt.</li>
</ul>
<p>Nun ist dem einen oder anderen vielleicht schon aufgefallen, die letzten 4 Templates unterscheiden sich ein wenig von den anderen in ihrer Aufgabe. Sie sind nicht eigenständig nutzbar, sie werden in bestehenden Templates integriert (<em>include</em>) und genutzt. Dabei gibt WordPress dem Anwender eine besondere Form der Integraion in die Hand, die <strong>Include Tags</strong>.</p>
<h4>Include Tags</h4>
<p>Die Include Tags sorgen für die Integration der Dateien müssen nicht über den kompletten Pfad eingebunden werden. Es müssen lediglich die entsprechenden Tags im entsprechenden Theme gesetzt werden. Es stehen folgende Include Tags zur Verfügung, wobei sich deren Funktion im Bezug auf die angesprochenen Templates sicher selbst erklärt.</p>
<ul>
<li><code>get_header()</code></li>
<li><code>get_sidebar()</code></li>
<li><code>get_footer()</code></li>
<li><code>get_comments()</code></li>
</ul>
<p>Die Integration im Template erfolgt wieder über die oben angesprochene PHP in HTML Regel: <code>&lt;?php ?&gt;</code>.</p>
<p>Sollen weitere Dateien integriert (<em>included</em>) werden, so gibt es zwei Möglichkeiten, da es dafür keine Include Tags gibt. Die erste Möglichkeit geht davon aus, dass die Dateien innerhalb des Theme-Ordners liegen. Dafür steht die Konstante <code>TEMPLATEPATH</code> zur Verfügung.</p>
<pre><code>
&lt;?php include (TEMPLATEPATH . '/example.php'); ?&gt;
</code></pre>
<p>Die zweite Möglichkeit integriert Dateien die in jedem anderen Verzeichnis von WordPress liegen können. Die Konstante <code>ABSPATH</code> stellt das root-Verzeichnis von WordPress zur Verfügung.</p>
<pre><code>
&lt;?php include (ABSPATH . 'wp-content/themes/default/example.php'); ?&gt;
</code></pre>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="amount" id="eins" value="" /><br />
<input type="hidden" name="cmd" value="_xclick" /><input type="hidden" name="business" value="frank@bueltge.de" /><input type="hidden" name="item_name" value="Spende bueltge.de" /><input type="hidden" name="no_shipping" value="1" /><input type="hidden" name="return" value="http://bueltge.de/" /><input type="hidden" name="cancel_return" value="http://bueltge.de/" /><input type="hidden" name="currency_code" value="EUR" /><input type="hidden" name="tax" value="0" /><input type="hidden" name="bn" value="PP-DonationsBF" /><input type="image" src="http://bueltge.de/wp-content/images/donate.png" style="border:0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!" /><br />
</form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.<br />
Möchtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<p>Download als php-Datei: <a href="http://bueltge.de/wp-content/download/theme_schreiben/wp_tutorial_teil2.zip">wp_tutorial_teil2.zip</a> - 1 kByte</p>
<div style="clear:both;">&emsp;</div>
<h3>Fazit und Ausblick</h3>
<p>Auch in diesem Teil 2 des Tutorial sind nur wenige Codezeilen geflossen, trotzdem denke ich, dass Mann/ Frau nicht um ein gewisses Maß an Grundlagen des Themas herum kommt. Nur so kann man selbstständig und zuverlässig Layouts für WordPress entwickeln. Es soll nicht darum gehen, dass ich meine Artikelanzahl in die Höhe treibe, ich möchte, dass Leser nach dem Tutorial in der Lage sind ein eigenes Theme zu erstellen, auf Basis ihrer eigenen Vorlage die sie mit Kenntnissen im Bereich HTML und CSS erstellt haben.</p>
<p>Im kommenden Teil 3 werden wir die entstandene Datei <code>index.php</code> mit weiteren Daten aus der Datenbank füttern und den berühmten Loop integrieren. Auch dazu werde ich wohl wieder ein wenig erläutern müssen, denn auch in diesem Bereich gibt es einiges an Hintergrundwissen. Trotzdem kommen wir damit dem Theme, dem eigentlichen Ziel, wieder eine wenig näher und lernen dazu.</p>
<p>Gleichzeitig werden wir die derzeitige <code>index.php</code> in drei Bestandteile zerlegen, so dass es an die Anforderungen und Empfehlungen von WordPress und den im oberen Abschnitt erläuterten Templates näher kommt.</p>
<p>Ich freue mich auf Kommentare, Feedbacks und den kommenden Abschnitt. Wann und wie er aussehen wird, das weis ich auch nicht, denn er entsteht wie immer in der Freizeit und mit viel Schlafmangel. In diesem Sinne wünsche ich mir, dass man es nicht nur überfliegt, sondern, dass jeder interessierte Leser mit dem Willen zu einem eigenen Theme das Tutorial sorgfältig liest und nach vollzieht.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/theme_schreiben/2column_ap.gif" />
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_ap.gif" medium="image">
			<media:title type="html">Absolute Positionierung</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>WP - Tutorial, wir schreiben ein WordPress Theme - Teil 1</title>
		<link>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/</link>
		<comments>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 21:56:27 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/</guid>
		<description><![CDATA[Das Schreiben eines eigenen Themes, womit das komplette Layout einer WordPress-Applikation gemeint ist, ist das Ziel einer ganzen Reihe von WordPress-Nutzern.
Mit meinem Buch „<a href="http://wordpress-buch.bueltge.de/das-buch/">WordPress - Weblogs einrichten und administrieren</a>“ habe ich einen kleinen Einblick in das Erstellen in ein eigenes Theme gegeben. Immer wieder gibt es Fragen und die Tiefe des Kapitels wird kritisiert. Leider war es im Umfang des Buches nicht möglich tiefer und detaillierter auf den Entstehungsprozess eines eigenen Themes einzugehen. Außerdem kann ich in diesem Blog schreiben wie mir der Schnabel gewachsen ist und die Strings gehen mir damit leichter von der Hand.

In diesem Zusammenhang wird in den naher Zukunft hier ein komplettes Tutorial entstehen, insofern ich durch halte. Im Vorfeld habe ich schon in einem <a href="http://bueltge.de/wordpress-theme-tutorial-soll-starten/499/">Beitrag</a> angefragt, welches Layout bevorzugt für den Entstehungsprozess gewünscht ist. Schaut man sich die Kommentare an, dann ist schnell erkennbar, dass die Anforderungen sehr unterschiedlich sind und die Grundlagen für das Erstellen eines eigenen Themes sehr verschieden verteilt sind. Oft werden Begriffe im Umfeld von WordPress und Webdesign durcheinander geworfen und erschweren so das Verständnis.

Aus diesem Grund möchte ich im ersten Abschnitt auf Grundlagen und Vereinbarungen eingehen. Ebenso stelle ich Layouts vor, mit denen dann im Anschluss in den folgenden Teilen gearbeitet wird.

Ich wünsche Euch und mir viel Spaß mein Erstellen und Lernen. Die Artikel entstehen parallel zur Arbeit an verschiedenen Projekten, werden nur in der Freizeit oder in Wachphasen erstellt. Ich bitte also um Geduld und Einfühlungsvermögen. Ebenso bitte ich darum, dass Fehler und Verbesserungen in den Kommentaren oder Mail an mich bekannt gegeben werden. Ich erhebe nicht den Anspruch auf fehlerfreie Arbeit und freue mich über positive Kommentare, genauso wie über konstruktive Kritik.

<blockquote>Wenn wir eines durchs Internet lernen können, ist es Folgendes: Alle profitieren davon, wenn die wesentlichen Ressourcen frei verfügbar bleiben und kostenlos zugänglich sind.
Dann können alle etwas für sie Passendes darauf aufbauen.<cite><a href="http://lessig.org">Lawrance Lessig</a></cite></blockquote>]]></description>
			<content:encoded><![CDATA[<div class="contentnavi">
<h3>Inhalt:</h3>
<ul>
<li>Teil 1 - Wir legen los,<br />Voraussetzungen,<br />Grundlagen, Layout</li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-2/513/">Teil 2 - Das statische<br />Design wird<br />WordPress-fähig</a></li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Teil 3 - Noch mehr Daten<br />aus dem Backend</a></li>
<li><a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-4/634/">Teil 4 - Der Loop</a></li>
<li>. . .</li>
</ul>
</div>
<p>Das Schreiben eines eigenen Themes, womit das komplette Layout einer WordPress-Applikation gemeint ist, ist das Ziel einer ganzen Reihe von WordPress-Nutzern.<br />
Mit meinem Buch „<a href="http://wordpress-buch.bueltge.de/das-buch/">WordPress - Weblogs einrichten und administrieren</a>“ habe ich einen kleinen Einblick in das Erstellen in ein eigenes Theme gegeben. Immer wieder gibt es Fragen und die Tiefe des Kapitels wird kritisiert. Leider war es im Umfang des Buches nicht möglich tiefer und detaillierter auf den Entstehungsprozess eines eigenen Themes einzugehen. Außerdem kann ich in diesem Blog schreiben wie mir der Schnabel gewachsen ist und die Strings gehen mir damit leichter von der Hand.</p>
<p>In diesem Zusammenhang wird in den naher Zukunft hier ein komplettes Tutorial entstehen, insofern ich durch halte. Im Vorfeld habe ich schon in einem <a href="http://bueltge.de/wordpress-theme-tutorial-soll-starten/499/">Beitrag</a> angefragt, welches Layout bevorzugt für den Entstehungsprozess gewünscht ist. Schaut man sich die Kommentare an, dann ist schnell erkennbar, dass die Anforderungen sehr unterschiedlich sind und die Grundlagen für das Erstellen eines eigenen Themes sehr verschieden verteilt sind. Oft werden Begriffe im Umfeld von WordPress und Webdesign durcheinander geworfen und erschweren so das Verständnis.</p>
<p>Aus diesem Grund möchte ich im ersten Abschnitt auf Grundlagen und Vereinbarungen eingehen. Ebenso stelle ich Layouts vor, mit denen dann im Anschluss in den folgenden Teilen gearbeitet wird.</p>
<p>Ich wünsche Euch und mir viel Spaß mein Erstellen und Lernen. Die Artikel entstehen parallel zur Arbeit an verschiedenen Projekten, werden nur in der Freizeit oder in Wachphasen erstellt. Ich bitte also um Geduld und Einfühlungsvermögen. Ebenso bitte ich darum, dass Fehler und Verbesserungen in den Kommentaren oder Mail an mich bekannt gegeben werden. Ich erhebe nicht den Anspruch auf fehlerfreie Arbeit und freue mich über positive Kommentare, genauso wie über konstruktive Kritik.</p>
<blockquote><p>Wenn wir eines durchs Internet lernen können, ist es Folgendes: Alle profitieren davon, wenn die wesentlichen Ressourcen frei verfügbar bleiben und kostenlos zugänglich sind.<br />
Dann können alle etwas für sie Passendes darauf aufbauen.<cite><a href="http://lessig.org">Lawrance Lessig</a></cite></p></blockquote>
<p><span id="more-498"></span></p>
<h3 id="wasbrauchenwir">Was brauchen wir?</h3>
<ul>
<li><img class="alignrightob" src="http://bueltge.de/wp-content/images/wp_blue.png" alt="WP Logo" />WordPress, eine laufende Installation sollte stehen. Dabei empfehle ich eine lokale Installation mit XAMPP. Diese Installation sollte jeder Teilnehmer im Vorfeld anfertigen. Die Installation und Einrichtung von WordPress ist ausführlich im <a href="http://wordpress-buch.bueltge.de/das-buch/">Buch</a> beschrieben. Alternativ gibt es eine sehr gute Anleitung auf <a href="http://blogshop.de/wordpress/wordpress-unter-xampp-installieren/">blogshop.de</a></li>
<li>Editor, einen Editor mit PHP-, HTML- und CSS-Unterstützung ist bei der Arbeit sehr hilfreich. Ich für meinen Teil bevorzuge UltraEdit. Eine sehr gute freie Alternative stellt <a href="http://notepad-plus.sourceforge.net/de/site.htm">Notepad++</a> dar.</li>
<li>XHTML Cheat Sheet, Quickreferenz (<a href="http://vdmnrw.de/xml/pdf/infoposter2.pdf">XHTML als PDF</a>)</li>
<li>CSS Cheat Sheet, Quickreferenz; Einige Möglichkeiten habe ich im Artikel „<a href="http://bueltge.de/css-referenzen/267/">CSS Referenzen</a>“ vorgestellt. Für das schnelle Nachschlagen und eine Übersicht neben der Tastatur empfehle ich noch immer die Referenzen vom <a href="http://vdmn.de/xml/se_70.html">Verbad Druck &#038; Medien NRW</a> (<a href="http://vdmnrw.de/xml/pdf/infoposter3.pdf">CSS als PDF</a>)</li>
<li>WordPress Codex, auch dazu gibt es <a href="http://bueltge.de/wp-wordpress-cheat-sheet-fuer-theme-tags-und-plugin-api/205/">Referenzen</a>. Die <a href="http://codex.wordpress.org/">Website des codex</a> sollte aber immer zur Hand liegen um nähere Details zu den einzelnen <a href="http://codex.wordpress.org/Template_Tags">Template</a>- und <a href="http://codex.wordpress.org/Conditional_Tags">Conditional-Tags</a> nachzulesen. In diesem Zusammenhang empfehle ich das Firefox Add-on <a href="http://www.schloebe.de/firefox-extensions/wordpress-helper/">WordPress Helper</a>, mit dem schnell auf den nötigen Seiten ist.</li>
<li><a href="http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;num=0&amp;client=ca-ref-pub-6961884676946222&amp;adurl=http://tools.google.com/firefox/toolbar/bundle/intl/de/%3Fai%3DBI11YiNCTRrf9EaGinQObqKHBDdGe8heFl5OXAsWNtwEAEAEgrJ2EBDgBUMCYt8UCYJWit4LIB5gBlIcBmAG-iAGYAYWTBqABtZXI_QOyAQpidWVsdGdlLmRlyAEC2gESaHR0cDovL2J1ZWx0Z2UuZGUvgAIBqAMD&amp;ai=BQZ2hiNCTRrf9EaGinQObqKHBDdGe8heFl5OXAsWNtwEAEAEgrJ2EBDgBULvKk9L______wFglaK3gsgHmAGUhwGYAb6IAZgBhZMGoAG1lcj9A7IBCmJ1ZWx0Z2UuZGXIAQLaARJodHRwOi8vYnVlbHRnZS5kZS-AAgGoAwM"><img src="http://pagead2.googlesyndication.com/pagead/imgad?id=CNTSgNuL4fuxChB9GH0yCGZaePZ_YPe-" class="alignrightob" alt="Firefox-Button" /></a>Firefox und einige Addons, ohne diesen Browser geht nix. Ich werde das Theme mit Hilfe dieses Browsers entwickeln. Dies liegt zum einen daran, dass er den Standard hervorragend unterstützt und dass es einige hervorragende Add-ons gibt, die die Entwicklung sehr erleichtern bzw. angenehmer machen. Dabei möchte ich auf das Buch verweisen, in dem es eine Auflistung meiner Empfehlung gibt. Wer dieses Buch nicht besitzt hat keinen Nachteil, der alle Add-ons werden auf dem entsprechenden <a href="http://wordpress-buch.bueltge.de/firefox-add-ons-fuer-die-erstellung-eines-wordpress-themes/17/">Artikel im Blog zum Buch</a> genannt.</li>
</ul>
<h3>Grundlagen - Themes und Templates</h3>
<p>Immer wieder werden diese beiden Begriffe verschieden verwendet. Dies führt zu Missverständnissen und schafft eine schlechte Basis zum Arbeiten mit WordPress. Deshalb kurz und knapp - was ist ein Theme und was ist ein Template?</p>
<h4>Template</h4>
<p>Ein Template stellt die kleinste Einheit eines Theme dar. Es ist eine PHP-Datei, die sich innerhalb des Themes befindet. Eine ganze Reihe von Vereinbarungen sorgt dafür, dass WordPress einige Templates (z.B. <code>single.php, index.php, 404.php</code>) im Standard erkennt.<br />
Weitere Templates können trotzdem vereinbart und im Backend von WordPress genutzt werden. Dazu später im Verlaufe des Tutorials mehr.</p>
<h4>Theme</h4>
<p>Das Theme ist eine Sammlung von Dateien - vorrangig PHP und CSS-Dateien, die die Darstellung des Weblog beeinflussen. Ein Theme ist das „Kleid“ deines WordPress und der Zusammenspiel der Dateien in einem Theme sorgt für die Darstellung. Dabei muss nicht jedes Theme die gleiche Anzahl und Namen von Dateien im Theme-Ordner enthalten! Ein WordPress-Theme besteht aus mindestens zwei Dateien, dem Stylesheet (<code>style.css</code>) und einer PHP-Datei (<code>index.php</code>). Im weiteren können Themes Grafiken, JavaScript-, Flash-Dateien und eine Reihe von zusätzlichen Dateien enthalten.<br />
Dabei sollte man bei der Entwicklung eines Themes daran denken, dass möglichst nur das Stylesheet, die CSS-Datei(en), Einfluss auf das Aussehen des Blog haben.</p>
<h3>Das Layout</h3>
<p>Der eine oder andere möchte WordPress nicht nur als Weblog-Software einsetzen. Unter den Einsatzmöglichkeiten von WordPress kommt immer wieder die Anforderung WP als CMS, welches nicht ungewöhnlich und selten ist. Schon eine ganze Reihe von Webseiten basieren auf WordPress. Aber darum soll es nicht gehen.</p>
<p>ich stelle im folgenden Abschnitt einige Möglichkeiten für Layouts dar, wobei ich kurz und knapp auf das jeweilige Layout eingehe. Damit soll es in den nächsten Teilen dieses Tutorials weiter gehen. Sucht euch also bitte ein Layout oder erstellt ein eigenes mit statischem Webdesign. Dabei solltet ihr darauf achten, dass die gleichen Namenskonventionen nutzt. Ansonsten könnte das Nachvollziehen von Schritten und Code erschwert werden. Im weiteren möchte ich darauf hinweisen, dass ich ein Vertreter von möglichst schmalen Markup bin. Es sollte also möglichst keine DIV-Suppe entstehen.</p>
<p>Bevor wir aber in die Layouts einsteigen und ich die Grundlagen zum Verwenden näher erläutere, möchte ich noch einige Punkte von <a href="http://www.stuffandnonsense.co.uk/">Andy Clarke</a> zitieren und mit meinem Verständnis von Webdesign ergänzen. Dieses sollen nochmal den Prozess unterstreichen und meine Standpunkte darlegen.</p>
<ul>
<li>Nicht alle Browser sehen das gleiche Design! Ich gehe davon aus, dass das Design auf allen Browsern angesehen werden kann aber nicht gleich aussieht. Im besonderen Fall spreche ich da vom IE, den ich zwar prüfe und eventuell auch ein wenig anpasse, aber nur so, dass IE-Leser den Inhalt angenehm lesen können.</li>
<li>Vermeide Hacks und Filter. Diese Aussage steht im Zusammenhang mit dem ersten Punkt und ich unterstütze sie weitgehend und spare so viele Zeichen Code.</li>
<li>CSS-Selektoren stehen zur Verwendung bereit. Es gibt eine große Anzahl von Selektoren, darum nutzt sie und unterstützt die Möglichkeiten.</li>
<li>Die Website sollte auch ohne aktives JavaScript leserlich und zugänglich sein.</li>
<li>Nutze semantische Namenskonventionen und Mikroformate. Noch sind die Möglichkeiten dieser Techniken nicht weit verbreitet, aber es wird, do glaube ich fest, eine Zeit kommen, in der Mikroformate und einheitliche Namenskonventionen eine Rolle spielen und dem Leser der Website mehr Möglichkeiten zum Steuern der Site in die Hand gegeben werden. Bleibe als zukunftsträchtig im Design und Markup.</li>
<li>Arbeite nicht im Stillen - gebe Ideen und Lösungen weiter. Nur so können sie genutzt, verbessert und korrigiert werden.</li>
<li>Validiere xHTML und CSS! Dazu stehen eine ganze Reihe guter Validatoren bereit. Am einfachsten ist sicher die Verwendung mit Hilfe des Firefox-Add-on <a href="http://chrispederick.com/work/web-developer/">WebDeveloper</a>.</li>
<li>Achte und implementiere Barrierefreiheit.</li>
</ul>
<p>Die folgenden Layouts lassen sich im Anschluss als Paket downloaden. Das Paket lokal entpacken und den kompletten Ordne in das Theme-Verzeichnis eurer WordPress-Installation kopieren <code>/wp-content/themes/</code>. In diesem Ordner liegen dann eine Reihe von HTML-Dateien. Schaut euch die verschiedenen Layouts im Browser und Code an. Entscheidet euch für eine Lösung, mit der ihr dann weiterhin arbeiten könnt.</p>
<p>Es werden immer folgende Namenskonventionen im Layout verwendet. Ich habe versucht, sparsam im Markup und CSS zu sein und hoffe, dass so das Verständnis für den Code und die Realisierung einfacher ist. Im Laufe des Tutorials wird der Code umfassender. Da jeder bei der Entwicklung eine andere Herangehensweise hat, besteht so die Möglichkeit, dass jeder Teilnehmer seine Ideen im Anschluss an das Tutorial umsetzen kann. </p>
<ul>
<li>ID container für eine Container, der alle Bereiche umschließt</li>
<li>ID header für den Kopfbereich - Begriff: Header</li>
<li>ID sidebar für den linken/ rechten Bereich neben dem Hauptinhalt - Begriff: Sidebar</li>
<li>ID content für Hauptbereich, hier stehen die Artikel und Seiten</li>
<li>ID footer für den Fußbereich unter dem Hauptinhalt und Sidebar - Begriff: Footer</li>
</ul>
<p>Im weiteren Teil dieses Tutorials werden wir dann aus der statischen HTML-Datei ein WordPress-Theme erstellen, Schritt für Schritt. Ich werde versuchen, dass die einzelnen Abschnitte nicht zu lang sind und mit einem sichtbaren Ergebnis enden.</p>
<h4>Absolute Positionierung</h4>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/absolute_pos.html"><img class="alignleft" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_ap.gif" alt="Absolute Positionierung" /></a> Ursprünglich waren Floats nicht für Seitenlayouts gedacht. Nicht immer ist die Wahl eines Float-Design die beste Wahl, den sie sind empfindlich. Mit Floats erstellte Layouts gehen schnell kaputt, ist ein Bild zu groß für einen Container oder nur 1px ist zu viel, dann ist das komplette Layout hin. Deshalb ist hier ein Beispiel für absolute Positionierung.</p>
<p>Gerade im Umfeld eines CMS, bei der nicht die Entwickler des Design die Inhalte erstellen, ist so ein Layout oft hilfreicher. Das zu große Bild ragt dann eventuell aus dem Container raus, aber das eigentliche Design steht weiterhin. Absolute Positionierung ist robust und sollte in keinem Fall im Repertoire des Webdesigners fehlen oder vergessen werden.</p>
<p>Der wohl größte und auffälligste Nachteil, einen Container unterhalb des jeweilig längsten Container zu platzieren. Dazu kann man beispielsweise mit JavaScript eingreifen oder es muss absolut positionieren.</p>
<div style="clear:both;">&emsp;</div>
<h4>Floatende Positionierung</h4>
<p>Die folgenden Beispiele basieren alle auf dem Floating-Prinzip. Es werden verschiedene Möglichkeiten gezeigt. Jede Möglichkeit hat andere Vor- und Nachteile. In diesem Zusammenhang gibt es eine Reihe guter Websiten im Netz und <a href="http://thestyleworks.de/">The StyleWorks</a> soll stellvertretend genannt sein. Auf diesen Seiten kann man sich näher mit den Hintergründen auseinander setzen und für eine Lösung entscheiden.</p>
<p>Grundlegend sind alle Layouts ähnlich aufgebaut. Es gibt einen Sidebar, einen Content-Bereich und einen Footer. Der Footer soll jeweils unter der längsten Spalte sein. Das Floating der beiden Bereiche wird jeweils unterschiedlich realisiert, während das HTML-Markup immer gleich ist. Somit besteht einfach und unkompliziert die Möglichkeit das Design zu ändern.</p>
<p>Die Layouts kann man betrachten, in dem man auf das jeweilige Bild klickt.</p>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/sb_float_left.html"><img class="alignleft" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_sb.gif" alt="nur der Sidebar floatet" /></a> <strong>Sidebar Links: nur der Sidebar floatet</strong><br />
Nur der Sidebar-Container floatet links. Der content-Bereich wird mit Hilfe des margin-Abstandes an die richtige Position gebracht.</p>
<div style="clear:both;">&emsp;</div>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/sb_float_left-c_float_left.html"><img class="alignleft" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_left.gif" alt="Sidebar und Content floatet links</" /></a> <strong>Sidebar Links: Sidebar und Content floatet links</strong><br />
Beide Container floaten links, ohne weitere Formatierung „klebt“ der content-Bereich immer am Sidebar.</p>
<div style="clear:both;">&emsp;</div>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/sb_float_left-c_float_right.html"><img class="alignleft" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_right.gif" alt="Sidebar floatet rechts und Content floatet links" /></a> <strong>Sidebar Links: Sidebar floatet links und Content floatet rechts</strong><br />
Genau das Gegenteil zum übergeordneten Beispiel. Damit besteht immer eine Lücke zwischen Sidebar und Content. Die Ausrichtung des Sidebar und des Content sind mit dieser Lösung immer am äußeren Container ausgerichtet. Damit ist es einfach, dass die beiden Bereiche immer gleich breit mit dem Header und Footer sind.</p>
<div style="clear:both;">&emsp;</div>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/sb_float_right-c_float_left.html"><img class="alignleft" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_sb_right_c_left.gif" alt="Sidebar floatet rechts und Content floatet links" /></a> <strong>Sidebar Rechts: Sidebar floatet rechts und Content floatet links</strong><br />
Für alle, die das klassische Blogdesign mögen - der Sidebar befindet sich im rechten Bereich. Damit ist der Content-Bereich links und floatet auch links.<br />
Auch mit diesem Beispiel sind die beiden Container abhängig von äußeren Container und können recht einfach am Header und Footer ausgerichtet werden.</p>
<div style="clear:both;">&emsp;</div>
<p><a href="http://bueltge.de/wp-content/images/theme_schreiben/sb_float_right-c_float_right.html"><img class="alignleft" src="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_sb_right_c_right.gif" alt="Sidebar floatet rechts und Content floatet rechts" /></a> <strong>Sidebar Rechts: Sidebar floatet rechts und Content floatet rechts</strong><br />
Beide Container floaten rechts. Damit gibt es wieder keine Lücke ohne Formatierung zwischen Sidebar und Content.</p>
<div style="clear:both;">&emsp;</div>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="amount" id="eins" value="" /><br />
<input type="hidden" name="cmd" value="_xclick" /><input type="hidden" name="business" value="frank@bueltge.de" /><input type="hidden" name="item_name" value="Spende bueltge.de" /><input type="hidden" name="no_shipping" value="1" /><input type="hidden" name="return" value="http://bueltge.de/" /><input type="hidden" name="cancel_return" value="http://bueltge.de/" /><input type="hidden" name="currency_code" value="EUR" /><input type="hidden" name="tax" value="0" /><input type="hidden" name="bn" value="PP-DonationsBF" /><input type="image" src="http://bueltge.de/wp-content/images/donate.png" style="border:0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!" /><br />
</form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.<br />
Möchtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<p>Download als php-Datei: <a href="http://bueltge.de/wp-content/download/theme_schreiben/wp_tutorial_teil1.zip">wp_tutorial_teil1.zip</a> - 8 kByte</p>
<div style="clear:both;">&emsp;</div>
<h3>Fazit und Ausblick</h3>
<p>Damit wären wir am Ende des ersten Abschnittes. ich wünsche und hoffe, dass ihr euch mit den Beispielen vertraut machen könnt und die Idee, das Markup und das CSS dahinter verstehen könnt. Ich wünsche viel Spaß beim lernen und erstellen des eigenen Themes.</p>
<p>Schauen wir wie es weiter geht: im folgenden Teil 2 werden wir aus dem gewählten statischen Design ein einfaches Template machen, so dass es WordPress damit etwas anfangen kann und die Daten aus der Datenbank schon zum Teil geladen werden.<br />
Im dritten Teil werden wir dann wohl die einzelnen Dateien zerlegen und zu den klassischen Templates kommen. Dabei werden wir eine Reihe von Konventionen kennen lernen und verstehen.<br />
Soweit zum Ausblick<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-1/498/feed/</wfw:commentRss>
		<slash:comments>75</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp_blue.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp_blue.png" medium="image">
			<media:title type="html">WP Logo</media:title>
		</media:content>
		<media:content url="http://pagead2.googlesyndication.com/pagead/imgad?id=CNTSgNuL4fuxChB9GH0yCGZaePZ_YPe-" medium="image">
			<media:title type="html">Firefox-Button</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_ap.gif" medium="image">
			<media:title type="html">Absolute Positionierung</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_sb.gif" medium="image">
			<media:title type="html">nur der Sidebar floatet</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_left.gif" medium="image">
			<media:title type="html">Sidebar und Content floatet links</</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_right.gif" medium="image">
			<media:title type="html">Sidebar floatet rechts und Content floatet links</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_sb_right_c_left.gif" medium="image">
			<media:title type="html">Sidebar floatet rechts und Content floatet links</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/theme_schreiben/2column_fp_sb_right_c_right.gif" medium="image">
			<media:title type="html">Sidebar floatet rechts und Content floatet rechts</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>Spam mit Hilfe von CSS bekämpfen</title>
		<link>http://bueltge.de/spam-mit-hilfe-von-css-bekaempfen/473/</link>
		<comments>http://bueltge.de/spam-mit-hilfe-von-css-bekaempfen/473/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 11:43:20 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://bueltge.de/spam-mit-hilfe-von-css-bekaempfen/473/</guid>
		<description><![CDATA[Formulare sind ein begehrtes Ziel für Spamer. Es gibt die unterschiedlichsten Methoden um diese Spamer fern zu halten oder zu filtern. Eine Möglichkeit ist die Integration eines zusätzlichen input-Feldes, welches bei aktivem JavaScript ausgeblendet wird. Dieses Feld übergibt einen Schlüssel. Besuchen Leser die Seite ohne JS, dann müssen sie diesen Schlüssel eingeben. Dies ist nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Formulare sind ein begehrtes Ziel für Spamer. Es gibt die unterschiedlichsten Methoden um diese Spamer fern zu halten oder zu filtern. Eine Möglichkeit ist die Integration eines zusätzlichen input-Feldes, welches bei aktivem JavaScript ausgeblendet wird. Dieses Feld übergibt einen Schlüssel. Besuchen Leser die Seite ohne JS, dann müssen sie diesen Schlüssel eingeben. Dies ist nicht so einfach für den Spamer, der auch ohne JS kommt, wenn man diverse Möglichkeiten ausschöpft. Diese Möglichkeit habe ich bereits erfolgreich im Einsatz und nähere Informationen kann man im Artikel „<a href="http://bueltge.de/wp-js-antispam-plugin/418/">JS AntiSpam</a>“ nachlesen.</p>
<p>Eine ähnliche simple Methode ist aber ebenfalls mit CSS möglich. Leider ist diese einfache und effektive Methode nicht von mir, sondern wurde hier lediglich verwirklicht. Die Idee stammt von <a href="http://www.modernbluedesign.com/web-design-blog/">modernblue</a>.<br />
Auch CSS lässt es zu, dass man Bereiche des HTML ausblenden kann - <em>display: none;</em>. Nun ist es so, dass Spamer an sich dumm sind und jedes Feld, welches sie in einem Formular antreffen, ausfüllen. Dies lässt sich ohne Probleme abfragen, in meinem Beispiel mittels PHP. Ist also das Feld gefüllt, so handelt es sich um einen Spamer und es werden keine weiteren Aufgaben abgearbeitet.<br />
Damit nun der Besucher nicht extra eine Anleitung lesen muss, bevor er das Formular nutzen kann, blenden wir dieses input-Feld aus.</p>
<h3>Demo</h3>
<p>Die verwirklichte Idee kann man sich <a href="http://bueltge.de/test/again_spam_with_css.php">ansehen</a> und den Code ebenfalls <a href="http://bueltge.de/test/again_spam_with_css.zip">downloaden</a>.</p>
<h3>HTML, Formular</h3>
<p>Das Formular bekommt also ein weites Feld:</p>
<pre><code><input name="spamcheck" class="spamcheck" type="text" /></pre>
<p>Damit könnte ein einfaches Formular folgendermaßen aussehen.</p>
<pre><code>
<form method="post" action="MACH_WAS">  
<fieldset>
	<label>Name: </label><input name="name" type="text" /><br />
	<label>E-Mail: </label><input name="email" type="text" /><br />
	<label>Mitteilung: </label><input name="message" type="text" />

	<input name="spamcheck" class="spamcheck" type="text" /><br />

	<input type="hidden" name="process" value="gesendet" />
	<input value="Senden" type="submit" />
</fieldset>
</form>
</code></pre>
<h3>CSS-Stylesheet</h3>
<p>Mit Hilfe von CSS wird das Feld ausgeblendet, für menschliche Besucher nicht sichtbar.</p>
<pre><code>
.spamcheck {
display: none !important;
}
</code></pre>
<p>Weitere Informationen zum Code und Demo sind unter <a href="http://bueltge.de/test/again_spam_with_css.php">unter diesem Link</a> zu finden.<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/spam-mit-hilfe-von-css-bekaempfen/473/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/spam-mit-hilfe-von-css-bekaempfen/473/feed/</wfw:commentRss>
		<slash:comments>20</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>Tipps für das Schreiben guter WordPress Tipps</title>
		<link>http://bueltge.de/tipps-fuer-das-schreiben-guter-wordpress-tipps/472/</link>
		<comments>http://bueltge.de/tipps-fuer-das-schreiben-guter-wordpress-tipps/472/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 06:19:35 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Beitrag]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/tipps-fuer-das-schreiben-guter-wordpress-tipps/472/</guid>
		<description><![CDATA[Mit diesem Thema befasst Lorelle auf Blog Herald in einem aktuellen Artikel. Angesichts der Tatsache, dass die Anzahl der Tipps zur Webpublishing Plattform WordPress immer größer wird, ist dieser Artikel recht interessant. Der Artikel weist auf einige grundlegende Regeln hin, die man eingehalten sollte - Begründungen sind hinzugefügt und die Aussagen stehen nicht leer im [...]]]></description>
			<content:encoded><![CDATA[<p>Mit diesem Thema befasst <a href="http://lorelle.wordpress.com/">Lorelle</a> auf <a href="http://www.blogherald.com/2007/07/09/tips-for-writing-good-wordpress-tips/">Blog Herald in einem aktuellen Artikel</a>. Angesichts der Tatsache, dass die Anzahl der Tipps zur Webpublishing Plattform WordPress immer größer wird, ist dieser Artikel recht interessant.</p>
<p>Der Artikel weist auf einige grundlegende Regeln hin, die man eingehalten sollte - Begründungen sind hinzugefügt und die Aussagen stehen nicht leer im Raum.</p>
<p>Kurz und bündig, sehen die Tipps folgendermaßen aus.</p>
<ul>
<li>Schreibe <strong>WordPress</strong>, nicht WordPress!<br />
Der Artikel verliert an Glanz und Glaubwürdigkeit, wenn man nicht das eingetragene Warenzeichen kennt. (Fällt mir auch immer wieder in Zeitschriften und auch Büchern auf)</li>
<li>Tipps zu WordPress sollten auch auf der Plattform WordPress präsentiert werden.</li>
<li>Achte auf die Darstellung von Code. Der Code sollte fehlerfrei und sauber integriert sein, ohne Character Entities</li>
<li>Bringe es auf den Punkt. Tipps sollen helfen und nicht langatmige Geschichten erzählen.</li>
<li>Innerhalb des Beitrags ist sparsam mit Werbung umzugehen.</li>
<li>Leute kommen über Suchmaschinen auf den Artikel, sie kennen die Hintergründe des Problems nicht. Erkläre also mehr als die Lösung, erkläre wozu und warum du sie anwendest.</li>
<li>Kopiere nicht den Inhalt oder den Code anderer Beiträge, wenn es nicht eine Bereicherung gibt. Ebenso gehört es sich, die Quelle zu nennen und darauf hinzuweisen.</li>
</ul>
<p>Der Artikel geht wesentlich tiefer und beleuchtet die verschiedenen Facetten und Hintergründe - Lesebefehl für alle, die Tipps zum Thema WordPress veröffentlichen: „<a href="http://www.blogherald.com/2007/07/09/tips-for-writing-good-wordpress-tips/">Tips For Writing Good WordPress Tips</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/tipps-fuer-das-schreiben-guter-wordpress-tipps/472/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/tipps-fuer-das-schreiben-guter-wordpress-tipps/472/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress WYSIWYG-Editor TinyMCE erweitern</title>
		<link>http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402/</link>
		<comments>http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402/#comments</comments>
		<pubDate>Tue, 06 Mar 2007 07:29:16 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[TinyMCE]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402</guid>
		<description><![CDATA[Der Editor TinyMCE, der seit Version 2.1 von WordPress dabei ist hat eine ganze Reihe von Funktionen, die allerdings nicht standardmäßig ersichtlich sind. Außerdem gibt es die Funktion HTML-Code, die überhaupt nicht berücksichtigt wurde. Ich habe für ein Projekt den Editor verändert, so dass die Autoren leichter an die Zusatzfunktion kommen, einfach den zugehörigen Button [...]]]></description>
			<content:encoded><![CDATA[<p>Der Editor <a href="http://tinymce.moxiecode.com">TinyMCE</a>, der seit Version 2.1 von WordPress dabei ist hat eine ganze Reihe von Funktionen, die allerdings nicht standardmäßig ersichtlich sind. Außerdem gibt es die Funktion HTML-Code, die überhaupt nicht berücksichtigt wurde.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/tinymceerweitert.png" alt="TinyMCE erweitert" /></p>
<p>Ich habe für ein Projekt den Editor verändert, so dass die Autoren leichter an die Zusatzfunktion kommen, einfach den zugehörigen Button klicken, und einen zusätzlichen Button für die Bearbeitung des kompletten HTML-Codes haben, in einem extra Fester.</p>
<p>Dazu muss die Konfigurationsdatei vom Editor bearbeitet werden: <em>/wp-includes/js/tinymce/tiny_mce_config.php</em></p>
<p>Ändert den Code bei <em>$mce_button</em>s in folgenden, oder passt ihn an.</p>
<pre><code>
$mce_buttons = apply_filters( 'mce_buttons', array( 'bold', 'italic', 'strikethrough', 'separator', 'bullist', 'numlist', 'outdent', 'indent', 'separator', 'justifyleft', 'justifycenter', 'justifyright', 'separator', 'link', 'unlink', 'image', 'wp_more', 'separator', 'spellchecker', 'separator', 'wp_help', 'wp_adv', 'wp_adv_start', 'formatselect', 'underline', 'justifyfull', 'forecolor', 'separator', 'pastetext', 'pasteword', 'separator', 'removeformat', 'cleanup', 'separator', 'charmap', 'separator', 'undo', 'redo', 'separator', 'code', 'wp_adv_end' ) );
$mce_buttons = implode( $mce_buttons, ',' );
</code></pre>
<p>Der Button HTML kommt durch die Erweiterung von <em>code</em>. Der Button für das Ein-/Ausschalten der Zusatzfunktionen kommt daher, weil ich den Tag <em>wp_adv</em> vorgezogen habe, vor <em>wp_ad_start</em>.</p>
<h3>Weitere Links:</h3>
<ul>
<li><a href="http://blog.cheshire-online.de/2007/02/tutorial-tiny-mce-in-wordpress-21-zusaetzliche-schaltflaechen">Tutorial - Tiny MCE in WordPress 2.1 - Zusätzliche Schaltflächen</a> - Icons und Schlüsselwörter erklärt</li>
<li><a href="http://www.barbarajany.de/wp1-5/2007/02/12/tinymce-editor-in-wordpress-erweitern/">TinyMCE-Editor in WordPress erweitern</a> - weitere Plugins für TinyMCE integrieren</li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-wysiwyg-editor-tinymce-erweitern/402/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/tinymceerweitert.png" />
		<media:content url="http://bueltge.de/wp-content/images/tinymceerweitert.png" medium="image">
			<media:title type="html">TinyMCE erweitert</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>Umzug des WordPress-Blogs auf einen neuen Hosting-Provider</title>
		<link>http://bueltge.de/umzug-des-wordpress-blogs-auf-einen-neuen-hosting-provider/307/</link>
		<comments>http://bueltge.de/umzug-des-wordpress-blogs-auf-einen-neuen-hosting-provider/307/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 08:43:49 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Domain]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[Umzug]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/umzug-des-wordpress-blogs-auf-einen-neuen-hosting-provider/307</guid>
		<description><![CDATA[Es kommt leider vor, dass man umziehen muss oder möchte - aus welchen Gründen auch immer.

Um dies ohne großen Ärger zu bewerkstelligen wird im folgenden eine kleine Anleitung Schritt für Schritt hinterlegt. Außerdem gehe ich auf bekannte Probleme ein und stelle einige Lösungen bereit.]]></description>
			<content:encoded><![CDATA[<p>Es kommt leider vor, dass man umziehen muss oder möchte - aus welchen Gründen auch immer.</p>
<p>Um dies ohne großen Ärger zu bewerkstelligen wird im folgenden eine kleine Anleitung Schritt für Schritt hinterlegt. Außerdem gehe ich auf bekannte Probleme ein und stelle einige Lösungen bereit.<br />
<span id="more-307"></span><br />
<strong>Achtung:</strong> Bitte erst lesen und dann loslegen, keine Garantie auf zerstörte Daten! Sicherung anlegen!</p>
<ol>
<li>Zu erstes erst einmal einen neues Blog auf dem neuen Webspace <a href="http://wordpress-deutschland.org/installation">installieren</a>. Die folgenden Schritte importieren/ überschreiben dann die Daten in die bestehenden Tabellen.</li>
<li>Als nächstes müssen wir die bestehenden Daten aus der „alten“ Datenbank exportieren. Dazu kann man das Plugin <a href="http://bueltge.de/datenbank-sichern/9">WP DatabaseBackup</a> nutzen, oder den Export mit Hilfe eines mySQL-Tools bewerkstelligen. Im weiteren arbeite ich dabei mit <a href="http://www.phpmyadmin.net/">phpMyAdmin</a>, welches ein Freeware-Tool ist und von vielen Hosting-Providern angeboten wird.</li>
<li>Den Export der Datenbank erläutere ich im Artikel „<a href="http://bueltge.de/wp-datenbank-backup-mit-phpmyadmin/97">Datenbank Backup mit phpMyAdmin</a>“ genauer. Da gibt es auch entsprechende Screenshots und nötige Erklärungen.</li>
<li>Nun haben die Daten als SQL-Datei lokal vorliegen. Nun müssen wir die Daten in die neue Datenbank importieren und dabei gibt es nun eventuelle Probleme.</li>
<li>Wenn nun das neue Blog auf dem neuen Webspace installiert ist, müssen wir die Daten importieren. Dazu ist es wichtig, dass ihr den Präfix kennt, der in der <code>config.php</code> von WP steht. Im Normalfall ist dies wp_ (Bsp.: wp_post2cat oder wordpress_post2cat). Solltet ihr diesen verändert haben bzw. sollte sich der Präfix eures alten Blogs vom neuen unterscheiden, so müssen in der SQL-Datei die Daten verändert ist. Dazu eignet sich jeder bessere Editor - zum Beispiel <a href="http://notepad-plus.sourceforge.net/de/site.htm">Notepad++</a>, mit dem wir nun nach dem alten Präfix suchen und mit dem neuen ersetzen. Damit sollte selbst eine große SQL-Datei schnell verändert sein.<br />
Sucht mit dem Editor nach<br />
<code>`ALTER_PRÄFIX_</code><br />
und ersetzt es mit dem neuen Präfix.
</li>
<li>Im weiteren kann es zu Problemen kommen, wenn die Datei zu groß ist. Das ist vorallem dann so, wenn Statistik-Plugins laufen und alles mögliche in der DB ablegen. Überlegt also im Gegenzug, was ihr für Daten benötigt - muss wirklich alles rein. Das ist von Provider zu Provider unterschiedlich, aber in der Regel kann man nie mehr als 1MByte an Daten importieren. Das führt nun dazu, dass wir die Datei, falls sie größer ist, aufspalten müssen. Dazu laden wir die SQL-Datei wieder in unseren Editor des Vertrauens und splitten an folgenden Punkten, so dass wir am Ende mehrere Dateien haben, die die max. erlaubte Größe nicht überschreiten.
<p><strong>Beispiel für Tabelle post2cat:</strong></p>
<pre><code>
-- 
-- Tabellenstruktur für Tabelle `wp_post2cat`
-- 

DROP TABLE IF EXISTS `wp_post2cat`;
CREATE TABLE `wp_post2cat` (
  `rel_id` bigint(20) NOT NULL auto_increment,
  `post_id` bigint(20) NOT NULL default '0',
  `category_id` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`rel_id`),
  KEY `post_id` (`post_id`,`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=13 ;

-- 
-- Daten für Tabelle `wp_post2cat`
-- 

INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (1, 1, 1);
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (5, 6, 1);
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (3, 4, 1);
...
INSERT INTO `wp_post2cat` (`rel_id`, `post_id`, `category_id`) VALUES (11, 12, 1);

-- --------------------------------------------------------
</code></pre>
<p>Nun heißt es also die Tabellen in eigene Dateien zu legen, wie im obigen Beispiel zu sehen ist, endet jeder Datensatz immer mit<br />
<code>-- --------------------------------------------------------</code><br />
Danach folgt die nächste Tabelle und die zugehörigen Daten.</p>
<p><strong>Wichtig:</strong> legt vorher eine Sicherung der Originaldatei an!
</li>
<li>Nun werden die Daten in die neue Datenbank importiert. Auch dazu nutze ich im folgenden phpMyAdmin. Wer bei seinem Hoster dieses Tool nicht zur Verfügung hat, der kann es auch in seinem Webspace selber einrichten, aber aufpassen - mit einem Passwort schützen!<br />
Wenn der Link „Importieren“ zur Verfügung steht, dann kann man damit direkt die Datei wählen und alles andere macht phpMyAdmin.<br />
<a href="http://bueltge.de/wp-content/images/phpmyadmin/sql-import1.png"><img class="centered" src="http://bueltge.de/wp-content/images/phpmyadmin/thumb-sql-import1.png" alt="Importieren mit phpMyAdmin" /></a><br />
Sollte diese Möglichkeit nicht bestehen, dann gehen wir über „SQL“, ganz oben in den Tabs.<br />
<a href="http://bueltge.de/wp-content/images/phpmyadmin/sql-import2.png"><img class="centered" src="http://bueltge.de/wp-content/images/phpmyadmin/thumb-sql-import2.png" alt="SQLmit phpMyAdmin" /></a>
</li>
<li>Wenn man nun mit SQl arbeiten muss, so müssen die Anweisungen aus dem SQL-File per Copy (Strg+C)/Paste (Strg+V) in das Fenster von phpMyAdmin übertragen werden und OK klicken.</li>
<li>Nachdem man alle Daten in die neue Datenbank importiert hat, gehen wir in das Blog zurück und schauen mal, ob alles vorhanden ist und ohne Probleme läuft.</li>
</ol>
<h3>weitere Probleme:</h3>
<p>Unter anderem kann es zu Problemen mit Sonderzeichen kommen, heist wir sehen in der Ausgabe kein Ü sondern kryptische Zeichen. Die können wir mit einem kleinen Script beheben. Sollen alle Tabellen in der Datenbank durchforstet werden und alle Sonderzeichen sollen UTF-8 codiert sein, so ist das <a href="http://bueltge.de/wp-script-zur-zeichensatzconvertierung/137">Script content encoding</a> zu empfehlen.<br />
Die Mime-Deklarierung eures Blogs findet ihr bei WP unter <em>Einstellungen</em> --> <em>Lesen</em> - UTF-8 ist Standard und auch zu empfehlen.</p>
<p>Will man nur einzelne Tabellen durchforsten und gegebenfalls die Zeichen ändern, so kann der folgende Code genutzt werden - Kopieren, in einer php-Datei speichern und in den Ordner wp-content des Blogs kopieren, oder <a href="http://bueltge.de/wp-content/download/wp/convert_encoding_table.phps">downloaden</a>. </p>
<p>Die Datei dann über den Browser aufrufen. Die Datei für jede Tabelle anpassen.</p>
<pre><code>
&lt;?php
	/**************************************************
		Convert WP Content encoding
	
		BASISSCRIPT: Markus Tacker &lt;m@tacker.org&gt;
		Modified:    Frank Bueltge &lt;bueltge.de&gt;
	***************************************************/

	// New coding
	$new_encoding = 'UTF-8';

	// WordPress config
	require_once '../wp-config.php';

	// Connect DB
	$DBC = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
	mysql_select_db(DB_NAME, $DBC);

	$table = $wpdb-&gt;prefix.'comments';

	echo '&lt;pre&gt;';
		$result_data = mysql_query('SELECT * FROM ' . $table);
		echo $table . ' ';
		while ($data = mysql_fetch_assoc($result_data)) {
			$sql = 'UPDATE ' . $table;
			// Build set
			$set = array();
			foreach ($data as $key =&gt; $val) {
				$set[] = ek($key) . '=' . ev(mb_convert_encoding($data[$key], $new_encoding));
			}
			$sql .= ' SET ' . join(', ', $set);
			// Build where
			$where = array();
			foreach ($data as $key =&gt; $val) {
				if (!preg_match('/[0-9]+/', $val)) continue; // Use only numbers in where
				$where[] = ek($key) . '=' . ev($data[$key]);
			}
			$sql .= ' WHERE ' . join(' AND ', $where);
			$query_result = mysql_query($sql, $DBC);
			if (!$query_result) {
				die('Invalid query: ' . mysql_error());
			}
			echo '.';
			flush();
		}
		echo &quot;\n&quot;;
	echo 'All done.&amp;gt;/pre&gt;';

	// Disconnect DB
	mysql_close($DBC);

	function ek($string)
	{
		global $DBC;
		return &quot;`&quot; . mysql_real_escape_string($string, $DBC) . &quot;`&quot;;
	}

	function ev($string)
	{
		global $DBC;
		return &quot;'&quot; . mysql_real_escape_string($string, $DBC) . &quot;'&quot;;
	}
?&gt;
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/umzug-des-wordpress-blogs-auf-einen-neuen-hosting-provider/307/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/umzug-des-wordpress-blogs-auf-einen-neuen-hosting-provider/307/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/phpmyadmin/thumb-sql-import1.png" />
		<media:content url="http://bueltge.de/wp-content/images/phpmyadmin/thumb-sql-import1.png" medium="image">
			<media:title type="html">Importieren mit phpMyAdmin</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/phpmyadmin/thumb-sql-import2.png" medium="image">
			<media:title type="html">SQLmit phpMyAdmin</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 Track- und Pingbacks seperat listen, ohne Plugin</title>
		<link>http://bueltge.de/wordpress-track-und-pingbacks-seperat-listen-ohne-plugin/299/</link>
		<comments>http://bueltge.de/wordpress-track-und-pingbacks-seperat-listen-ohne-plugin/299/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 13:02: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[Anleitung]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Kommentar]]></category>
		<category><![CDATA[Trackback]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/wordpress-track-und-pingbacks-seperat-listen-ohne-plugin/299</guid>
		<description><![CDATA[Will man die Track- und Pingbacks im Kommentarbereich extra darstellen so kann man mit dem Plugin <a href="http://jackosh.com/wpplugins/trackbacklist/">Trackbacklist</a> arbeiten und dabei hilft einem die <a href="http://www.perun.net/2006/12/07/track-und-pingbacks-separat-auflisten/">Anleitung von Peruns Weblog</a>.
Man kann aber auch das Theme bearbeiten und dabei die Template-Datei comments.php anpassen, in dem man mit <a href="http://bueltge.de/wp-wordpress-cheat-sheet-fuer-theme-tags-und-plugin-api/205">WordPress-Template-Tags</a> arbeitet.]]></description>
			<content:encoded><![CDATA[<p>Will man die Track- und Pingbacks im Kommentarbereich extra darstellen so kann man mit dem Plugin <a href="http://jackosh.com/wpplugins/trackbacklist/">Trackbacklist</a> arbeiten und dabei hilft einem die <a href="http://www.perun.net/2006/12/07/track-und-pingbacks-separat-auflisten/">Anleitung von Peruns Weblog</a>.<br />
Man kann aber auch das Theme bearbeiten und dabei die Template-Datei comments.php anpassen, in dem man mit <a href="http://bueltge.de/wp-wordpress-cheat-sheet-fuer-theme-tags-und-plugin-api/205">WordPress-Template-Tags</a> arbeitet.</p>
<p>Im folgenden ein kleines Beispiel, wie man die Trackbacks und Pingbacks zu einem Beitrag seperat auflisten kann. Da sind der Phantasie und Abfragemechanismen keine Grenzen gesetzt. Ansehen kann man das Ganze auf dieser aktuellen Website zum Beispiel unter <a href="http://bueltge.de/wp-spamviewer-zum-loeschen-und-retten-von-spam/255#postmetadata2">diesem Link</a>. Die Track- und Pingbacks befinden sich innerhalb der Kommentare, sehen aber anders aus und enthalten keinen Text. Aus der Liste wollte ich sie nicht entfernen, da dann die Kommentare mt Bezug auf eine Kommentarnummer nicht mehr stimmen. Um die Ping- und Trackbacks komplett auszulagern, habe ich am Ende ein Code-Beispiel für eine komplette comments.php hinterlegt.<br />
Noch mehr Tipps und vorallem Diskussion gibt es bei Robert's Artikel „<a href="http://www.basicthinking.de/blog/2006/12/08/trackbacks-von-kommentaren-kennen/">Trackbacks von Kommentaren kennen</a>“ in den <a href="http://www.basicthinking.de/blog/2006/12/08/trackbacks-von-kommentaren-kennen/#comment-121403">Kommentaren</a>.</p>
<p>Übrigens, wer noch ein wenig Nachhilfe bei dem Begriff Trackback benötigt, der findet eine tolle Erklärung  bei Michael - <a href="http://sw-guide.de/weblog/2006-11-11/was-sind-trackbacks-erklaerung-im-sendung-mit-der-maus-stil/">Was sind Trackbacks? Erklärung im Sendung-mit-der-Maus-Stil</a></p>
<p>Zuerst fragen wir ab, ob es Kommentare zu Beitrag gibt:</p>
<pre><code>if ($comments)</code></pre>
<p>Nun bauen wir die foreach-Schleife aus, in dem wir eine weitere Abfrage einbauen:</p>
<pre><code>if ((get_comment_type() == "trackback") || (get_comment_type() == "pingback"))</code></pre>
<p>Der Tag <em>get_comment_type</em> übergibt uns, um was für einen Kommentar es sich handelt, und in dem Fall lassen wir alle Kommentare zu, die per Trackback oder Pingback kommen. Im Ganzen sieht der Code dann folgendermaßen aus.</p>
<pre><code>
&lt;?php if ($comments) : ?&gt;
	&lt;ol class="trackbacklist"&gt;
	&lt;?php foreach ($comments as $comment) : if ((get_comment_type() == "trackback") || (get_comment_type() == "pingback")) : ?&gt;

		&lt;li id="comment-&lt;?php comment_ID() ?&gt;" &gt;
			&lt;?php comment_type('Kommentar', 'Trackback', 'Pingback'); ?&gt;&lt;small&gt; von &lt;/small&gt;&lt;cite&gt;&lt;?php comment_author_link() ?&gt;&lt;/cite&gt;
			&lt;br /&gt;
			&lt;small class="commentmetadata"&gt;&lt;?php comment_date('j. F Y') ?&gt; um &lt;?php comment_time('H:i') ?&gt; &lt;?php edit_comment_link('&middot; bearbeiten','',''); ?&gt;&lt;/small&gt;

			&lt;?php comment_text() ?&gt;
		&lt;/li&gt;

	&lt;?php endif; endforeach; /* end for each comment */ ?&gt;
	&lt;/ol&gt;
 &lt;?php endif; ?&gt;
</code></pre>
<p>Damit nun der Kommentarbereich auch wirklich nur Kommentare aus dem Textfeld übernimmt, müssen wir die Abfrage dort noch erweitern, denn noch werden ja alle Kommentare, ob Track- oder Pingback dort dargestellt. Dazu erweitert man die Schleife.<br />
Suche nach:</p>
<pre><code>&lt;?php foreach ($comments as $comment) : ?&gt;</code></pre>
<p>und ersetze mit:</p>
<pre><code>&lt;?php foreach ($comments as $comment) : if (get_comment_type() == "comment") : ?&gt;</code></pre>
<p>Außerdem müssen wir beim Schließen der foreach-Schleife die Abfrage beenden:<br />
Suche nach:</p>
<pre><code>&lt;?php endforeach; ?&gt;</code></pre>
<p>und ersetze mit:</p>
<pre><code>&lt;?php endif; endforeach; ?&gt;</code></pre>
<p>Die Darstellung der Kommentaranzahl wird üblicherweise mit dem Tag <em>comments_number()</em> erstellt, die aber alle Kommentare zählt, egal ob Track-, Pingback oder Kommentar. Dagegen hilft nur eine weiter Abfrage - <a href="http://bueltge.de/wp-trackbacks-und-kommentare-getrennt-zaehlen/314">WP - Trackbacks und Kommentare getrennt zählen</a>. In diesem Artikel erkläre ich dann diese Funktion näher. </p>
<p>We noch mehr Tipps zum Anpassen des Kommentarbereiches möchte, der findet drei weitere Möglichkeiten im Artikel <a href="http://bueltge.de/wp-kommentarbereich-anpassen/272">WP - Kommentarbereich anpassen</a>. Dort erläuter ich kurz, wie man einen Counter einbaut, die Kommentare des Beitragsautors hervorhebt und wie man Gravatare zu den Kommentarautoren darstellt.</p>
<h3>Beispiel einer kompletten comments.php mit Track- und Pingback am Ende</h3>
<pre><code>
&lt;?php
/*********************************************************************
comments-template mit counter, trackback, Hervorhebung des Autors 
und Trennung Kommentare zu Track- und Pingback
**********************************************************************/
?&gt;

&lt;div id=&quot;comments&quot;&gt;
&lt;?php // Do not delete these lines
	if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
		die ('Bitte diese Seite nicht direkt laden. Danke !');

				if (!empty($post-&gt;post_password)) { // if there's a password
						if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post-&gt;post_password) {  // and it doesn't match the cookie
				?&gt;
				
				&lt;p class=&quot;nocomments&quot;&gt;Dieser Beitrag ist passwortgesch&amp;#252;tzt. Bitte gebe das Passwort an um die Kommentare zu sehen.&lt;/p&gt;&lt;p&gt;
				
				&lt;?php
				return;
						}
				}

		/* alternating varibale for comment background */
		$oddcomment = 'alt';
?&gt;

&lt;?php if ($comments) : ?&gt;
	&lt;h2 class=&quot;twost&quot;&gt;&lt;?php comments_number('0 Kommentare', '1 Kommentar', '% Kommentare' );?&gt; zu &amp;#8222;&lt;?php the_title(); ?&gt;&amp;#8220;&lt;/h2&gt;

	&lt;ol class=&quot;commentlist&quot;&gt;

	&lt;?php $gravatar_default = &quot;ADRESSE_ZUM_DEFAULTBILD&quot;; ?&gt;

	&lt;?php $count = 0; foreach ($comments as $comment) : if (get_comment_type() == &quot;comment&quot;) : $count++; ?&gt;

		&lt;li id=&quot;comment-&lt;?php comment_ID() ?&gt;&quot;
			&lt;?php global $comment;
				if ( ($comment-&gt;comment_author_email == get_the_author_email()) &amp;&amp; ($comment-&gt;user_id != 0) ) {
						echo &quot; class=\&quot;autor_kommentar\&quot;&quot;;
				} else {
						echo &quot; class=\&quot;&quot; . $oddcomment . &quot;\&quot;&quot;;
				}
			?&gt;&gt;
			&lt;p class=&quot;comment-number&quot;&gt;&lt;a href=&quot;#comment-&lt;?php comment_ID() ?&gt;&quot;&gt;&lt;?php echo $count; ?&gt;&lt;/a&gt;&lt;/p&gt;

			&lt;?php $gravatar_url = &quot;http://www.gravatar.com/avatar.php?gravatar_id=&quot; . md5(get_comment_author_email()) . &quot;&amp;amp;default=&quot; . urlencode($gravatar_default) . &quot;&amp;amp;size=30&quot;; ?&gt;
			&lt;img class=&quot;gravatar&quot; src=&quot;&lt;?php echo $gravatar_url ?/&gt;&quot; title=&quot;&lt;?php comment_author(); ?&gt;'s Gravatar&quot; alt=&quot;id&quot; /&gt;
	
			&lt;?php comment_type('Kommentar', 'Trackback', 'Pingback'); ?&gt;&lt;small&gt; von &lt;/small&gt;&lt;cite&gt;&lt;?php comment_author_link() ?&gt;&lt;/cite&gt;
			&lt;?php if ($comment-&gt;comment_approved == '0') : ?&gt;
			&lt;em&gt;Dein Kommentar muss noch moderiert werden.&lt;/em&gt;
			&lt;?php endif; ?&gt;
			&lt;br /&gt;
			&lt;small class=&quot;commentmetadata&quot;&gt;&lt;?php comment_date('j. F Y') ?&gt; um &lt;?php comment_time('H:i') ?&gt; &lt;?php edit_comment_link('&amp;middot; bearbeiten','',''); ?&gt;&lt;/small&gt;

			&lt;?php comment_text() ?&gt;
		&lt;/li&gt;

	&lt;?php /* Changes every other comment to a different class */  
		if ('alt' == $oddcomment) $oddcomment = '';
		else $oddcomment = 'alt';
	?&gt;

	&lt;?php endif; endforeach; /* end for each comment */ ?&gt;
	&lt;/ol&gt;

 &lt;?php else : // this is displayed if there are no comments so far ?&gt;

	&lt;?php if ('open' == $post-&gt;comment_status) : ?&gt; 
		&lt;!-- If comments are open, but there are no comments. --&gt;
		
	 &lt;?php else : // comments are closed ?&gt;

		&lt;/p&gt;&lt;p class=&quot;nocomments&quot;&gt;Kommentare sind gechlossen.&lt;/p&gt;
		
	&lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;

&lt;?php if ('open' == $post-&gt;comment_status) : ?&gt;

&lt;h2 class=&quot;threest&quot; id=&quot;writecomment&quot;&gt;Kommentar schreiben&lt;/h2&gt;

&lt;?php if ( get_option('comment_registration') &amp;&amp; !$user_ID ) : ?&gt;
&lt;p&gt;Du musst &lt;a href=&quot;&lt;?php echo get_option('siteurl'); ?&gt;/wp-login.php?redirect_to=&lt;?php the_permalink(); ?&gt;&quot;&gt;angemeldet&lt;/a&gt; sein um einen Kommentar zu schreiben.&lt;/p&gt;
&lt;?php else : ?&gt;

	&lt;form action=&quot;&lt;?php echo get_option('siteurl'); ?&gt;/wp-comments-post.php&quot; method=&quot;post&quot; id=&quot;commentform&quot;&gt;
		
		&lt;?php if ( $user_ID ) : ?&gt;	
			&lt;p&gt;Angemeldet als &lt;a href=&quot;&lt;?php echo get_option('siteurl'); ?&gt;/wp-admin/profile.php&quot;&gt;&lt;?php echo $user_identity; ?&gt;&lt;/a&gt;. &lt;a href=&quot;&lt;?php echo get_option('siteurl'); ?&gt;/wp-login.php?action=logout&quot; title=&quot;Log out of this account&quot;&gt;Abmelden &amp;raquo;&lt;/a&gt;&lt;/p&gt;	
		&lt;?php else : ?&gt;
	
			&lt;p&gt;
				&lt;input type=&quot;text&quot; name=&quot;author&quot; id=&quot;author&quot; value=&quot;&lt;?php echo $comment_author; ?/&gt;&quot; size=&quot;20&quot; tabindex=&quot;1&quot; /&gt;
				&lt;label for=&quot;author&quot;&gt;Name &lt;?php if ($req) echo &quot;&lt;small&gt;Pflichtfeld&quot;; ?&gt;&lt;/label&gt;
			&lt;/p&gt;
			&lt;p&gt;
				&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; value=&quot;&lt;?php echo $comment_author_email; ?/&gt;&quot; size=&quot;20&quot; tabindex=&quot;2&quot; /&gt;
				&lt;label for=&quot;email&quot;&gt;eMail (bleibt versteckt) &lt;?php if ($req) echo &quot;&lt;small&gt;Pflichtfeld&quot;; ?&gt;&lt;/label&gt;
			&lt;/p&gt;	
			&lt;p&gt;
				&lt;input type=&quot;text&quot; name=&quot;url&quot; id=&quot;url&quot; value=&quot;&lt;?php echo $comment_author_url; ?/&gt;&quot; size=&quot;20&quot; tabindex=&quot;3&quot; /&gt;
				&lt;label for=&quot;url&quot;&gt;Website&lt;/label&gt;
			&lt;/p&gt;
			&lt;?php if ( function_exists('math_comment_spam_protection') ) { $mcsp_info = math_comment_spam_protection();?&gt;
			&lt;p&gt;
				&lt;input type=&quot;text&quot; name=&quot;mcspvalue&quot; id=&quot;mcspvalue&quot; value=&quot;&quot; size=&quot;20&quot; tabindex=&quot;4&quot; /&gt;
				&lt;label for=&quot;mcspvalue&quot;&gt;Spamschutz: &lt;?php echo $mcsp_info['operand1'] . ' + ' . $mcsp_info['operand2'] . ' = ?' ?&gt; &lt;small&gt;Pflichtfeld&lt;/small&gt;&lt;/label&gt;
				&lt;input type=&quot;hidden&quot; name=&quot;mcspinfo&quot; value=&quot;&lt;?php echo $mcsp_info['result']; ?/&gt;&quot; /&gt;
			&lt;/p&gt;
			&lt;?php } ?&gt;
				
		&lt;?php endif; ?&gt;
			&lt;p class=&quot;textfeld&quot; &gt;Textfeld &amp;raquo; &lt;a href=&quot;javascript:change_textbox_size(-80);&quot; title=&quot;Textfeld verkleinern&quot; &gt;kleiner&lt;/a&gt; &amp;middot; &lt;a href=&quot;javascript:change_textbox_size(80);&quot; title=&quot;Textfeld vergr&amp;ouml;&amp;szlig;ern&quot; &gt;gr&amp;ouml;&amp;szlig;er&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;
				&lt;textarea name=&quot;comment&quot; id=&quot;comment&quot; cols=&quot;30&quot; rows=&quot;5&quot; tabindex=&quot;4&quot;&gt;&lt;/textarea&gt;
			&lt;/p&gt;
			&lt;p&gt;
				&lt;input name=&quot;submit&quot; type=&quot;submit&quot; id=&quot;submit&quot; tabindex=&quot;6&quot; value=&quot;Kommentar absenden&quot; /&gt;
				&lt;input type=&quot;hidden&quot; name=&quot;comment_post_ID&quot; value=&quot;&lt;?php echo $id; ?/&gt;&quot; /&gt;
			&lt;/p&gt;
		&lt;?php do_action('comment_form', $post-&gt;ID); ?&gt;
	&lt;/form&gt;
	&lt;?php endif; // If registration required and not logged in ?&gt;

&lt;?php endif; // if you delete this the sky will fall on your head ?&gt;

&lt;?php if ($comments) : ?&gt;
	&lt;ol class=&quot;trackbacklist&quot;&gt;

	&lt;?php foreach ($comments as $comment) : if ((get_comment_type() == &quot;trackback&quot;) || (get_comment_type() == &quot;pingback&quot;)) : $count++?&gt;

		&lt;li id=&quot;comment-&lt;?php comment_ID() ?&gt;&quot; class=&quot;&lt;?php echo $oddcomment; ?&gt;&quot;&gt;
			&lt;p class=&quot;comment-number&quot;&gt;&lt;a href=&quot;#comment-&lt;?php comment_ID() ?&gt;&quot;&gt;&lt;?php echo $count; ?&gt;&lt;/a&gt;&lt;/p&gt;
			&lt;?php comment_type('Kommentar', 'Trackback', 'Pingback'); ?&gt;&lt;small&gt; von &lt;/small&gt;&lt;cite&gt;&lt;?php comment_author_link() ?&gt;&lt;/cite&gt;
			&lt;br /&gt;
			&lt;small class=&quot;commentmetadata&quot;&gt;&lt;?php comment_date('j. F Y') ?&gt; um &lt;?php comment_time('H:i') ?&gt; &lt;?php edit_comment_link('&amp;middot; bearbeiten','',''); ?&gt;&lt;/small&gt;

			&lt;?php //comment_text() ?&gt;
		&lt;/li&gt;

	&lt;?php /* Changes every other comment to a different class */  
		if ('alt' == $oddcomment) $oddcomment = '';
		else $oddcomment = 'alt';
	?&gt;

	&lt;?php endif; endforeach; /* end for each comment */ ?&gt;
	&lt;/ol&gt;
 &lt;?php else : // this is displayed if there are no comments so far ?&gt;

	&lt;?php if ('open' == $post-&gt;comment_status) : ?&gt; 
		&lt;!-- If comments are open, but there are no comments. --&gt;
		
	 &lt;?php else : // comments are closed ?&gt;

		&lt;p class=&quot;nocomments&quot;&gt;Trackpacks/Pingbacks sind gechlossen.&lt;/p&gt;
		
	&lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;

&lt;/div&gt;
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-track-und-pingbacks-seperat-listen-ohne-plugin/299/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-track-und-pingbacks-seperat-listen-ohne-plugin/299/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Wie fange ich an zu bloggen ?</title>
		<link>http://bueltge.de/wie-fange-ich-an-zu-bloggen/221/</link>
		<comments>http://bueltge.de/wie-fange-ich-an-zu-bloggen/221/#comments</comments>
		<pubDate>Thu, 17 Aug 2006 10:20:47 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://www.bueltge.de/?p=221</guid>
		<description><![CDATA[Derzeit ist es so, dass ich kaum noch zum Arbeiten an meinen privaten Projekten komme, da ich viel Zeit mit Support in Bereich WordPress verwende. Woran liegt das?  Einerseits liegt es wohl daran, dass WP ein tolles Tool ist, andererseits kommen täglich neue Blogs im WWW zum Vorschein. Es ist einfach sich einen Blog mit Hilfe von WP einzurichten und das WP-hosting tut seinen Beitrag dazu. Nicht das ich es nicht gut finde, ganz im Gegenteil, das Web ist für alle da und für alle die gleichen Rechte.
Aber leider habe ich den Eindruck, dass ständig neue Blogs auf den Markt kommen, ohne  sich Gedanken zum Thema zum machen. Sie haben kein Ziel oder Zweck ihres Blogs definiert. Bloggen ist eine Modewelle und daran wollen scheinbar viele Leute teilhaben.
Wie fange ich an zu bloggen? - Einige Anregungen soll der folgende Artikel geben.]]></description>
			<content:encoded><![CDATA[<p>Derzeit ist es so, dass ich kaum noch zum Arbeiten an meinen privaten Projekten komme, da ich viel Zeit mit Support in Bereich WordPress verwende. Woran liegt das? - Einerseits liegt es wohl daran, dass WP ein tolles Tool ist, andererseits kommen täglich neue Blogs im WWW zum Vorschein. Es ist einfach sich einen Blog mit Hilfe von WP einzurichten und das WP-hosting tut seinen Beitrag dazu. Nicht das ich es nicht gut finde, ganz im Gegenteil, das Web ist für alle da und für alle die gleichen Rechte.<br />
Aber leider habe ich den Eindruck, dass ständig neue Blogs auf den Markt kommen, ohne  sich Gedanken zum Thema zum machen. Sie haben kein Ziel oder Zweck ihres Blogs definiert. Bloggen ist eine Modewelle und daran wollen scheinbar viele Leute teilhaben.<br />
Wie fange ich an zu bloggen? - Einige Anregungen soll der folgende Artikel geben.<br />
<span id="more-221"></span></p>
<h3>Vorher</h3>
<p>Bevor du einen Blog erstellst, solltest du dir Gedanken über deinen zukünftigen Blog machen. Das gilt für persönliche, fachliche und geschäftliche Blogs. Allerdings erhebe ich keinen Anspruch auf Vollständigkeit. Für Ergänzungen oder Kritik stehen die Kommentare zur Verfügung.</p>
<ol>
<li><strong>Weshalb willst du bloggen?</strong><br />
Hinterfrage dies etwas genauer. Nur im Netz präsent zu sein erscheint mir als ein sehr kleiner Beweggrund. Wen willst du mit dem Inhalt deines Blogs erreichen? Ist deine Zielgruppe klein oder verteilt sie sich über den Erdball? Welche Sprache soll den Blog unterstützen? Wieviel Feedback möchtest du über die Site erreichen? Gibt es finanzielle Interessen?</li>
<li><strong>Welches Thema bedient dein Weblog?</strong><br />
Möchtest du zu einem Thema bloggen, willst du dich spezifisch festlegen oder stellst du alles ins Netz, was dich bewegt?<br />
Das tägliche Leben in einem Blog zu spiegeln ist ja der eigentliche Gedanke hinter einem Blog, den Online-Tagebüchern, gewesen. Ist dies der Hintergrund für deinen Blog, dann es ist schwierig mehr Leser als die Familienangehörigen oder Freunde für einen derartigen Blog zu gewinnen. Deshalb ist es so wichtig, dass du es willst und das du nicht nur einer Modewelle hinter läufst.<br />
Sollte es dein Ziel sein, mehr Leser als die Freunde und Verwandten zu erreichen, dann suche dir eine Nische  ein spezifisches Thema, aber auch ein oder auch zwei Themen, in denen du dich auskennst, die du liebst. So wirst du in Zukunft auch Freude am schreiben habe.</li>
<li><strong>Willst du Geld verdienen?</strong><br />
Ist der Hintergrund deines neuen Blogs finanzielles Interesse, dann solltest du noch intensiver über dein Thema nachdenken, denn dann bist du abhängig von einer großen Leserschaft. Möglichkeiten, wie z.B. Google Adsense, suggerieren das leichte Geld verdienen. Dies ist ein Irrtum. Der Inhalt deines Blogs ist der Schlüssel für Google Adsense und somit auch für deinen Geldbeutel. Aber nicht nur das, der Inhalt kommt zu erst, dann kommt Werbung und die ist noch lange nicht Attraktiv für den Leser deines Beitrags. Auch hier ist Geduld gefragt.</li>
<li><strong>Schreibe Inhalt</strong><br />
Bevor du deinen Blog online bekannt gibst, schreibe einige Beiträge. Wenn du genügend gute Beiträge hast, dann gehe online und mache deinen Blog bekannt. Gehst du ohne Inhalt online, so  besteht die Gefahr, dass potenzielle Leser nicht wieder kommen, sie waren enttäuscht.<br />
Halte einige Artikel zurück, veröffentliche sie im Laufe der ersten Monate. Es müssen nicht alle Artikel auf einmal erscheinen. So kannst du regelmäßig neue Artikel veröffentlichen.<br />
Um Leser zu binden, ist es eine gute Möglichkeit, in dem Beiträge über mehrere Tage gehen und in kleinere Beiträge aufgeteilt werden. Somit kommen Leser wieder, insofern der erste Artikel interessant ist oder sie abonnieren deinen Feed.<br />
Erinnere in deinen Beiträgen  setze Links auf ältere Beiträge oder liste deinen meistgelesenen Artikel.</li>
<li><strong>Netzwerk nutzen</strong><br />
Nutze Blogs, die dir bereits bekannt sind.  Baue eine Bloggernetz auf. Suche Leute, die die gleichen Interessen haben. Tausche Interessen aus und tausche ebenso Links. Über dieses Netz bauen sich Links auf, die sorgen dafür, dass dein Blog bekannter wird. Suche dir Blogs, die über deinen Blog schreiben (z.B. <a href="http://sw-guide.de/weblog/tag/blog-der-woche/">sw-guide.de</a>, <a href="http://www.basicthinking.de/blog/">basicthinking.de</a>).<br />
Setze Pings ein und informiere damit eine größere Gemeinde und lass außerdem deine Backlinks anwachsen. Dazu gibt es bestehende Service im Netz (z.B. <a href="http://technorati.com">technorati.com</a>, <a href="http://feedburner.com">feedburner.com</a>).</li>
<li><strong>Suchmaschinenoptimierung (SEO)</strong><br />
Bevor du online gehst, achte darauf und prüfe ob dein Blog Suchmaschinenfreundlich ist? Lese dazu den Artikel: <a href="http://bueltge.de/methoden-der-suchmaschinen-optimierung-seo-unter-wordpress/182/">Methoden der Suchmaschinen-Optimierung (SEO) unter WordPress</a>. Dort habe ich einige relevante Punkte zusammen getragen, damit WordPress noch Suchmaschinenfreundlicher wird.</li>
<li><strong>Design</strong><br />
Wie wird dein Blog aussehen? Liegt der Schwerpunkt deiner Site auf dem Design oder dem Inhalt? Ein Blog ist in der Regel für Inhalt bekannt, das Design sollte nicht im Vordergrund stehen oder sogar das Lesen der Inhalte erschweren. Versuche das Design eventuell an dein Thema anzupassen und  somit der Zielgruppe entgegen  zu kommen.</li>
<li><strong>Statistik</strong><br />
Na klar willst du wissen, wer, wie viel, wie und woher deine Besucher kommen, aber jedes Statistiktool was in deine Seite integriert ist, setzt die Performance mehr oder weniger herab. Überlege dir also, ob es unbedingt notwendig ist und in welchem Umfang.</li>
<li><strong>Pingservice</strong><br />
Im Punkt 5 bin ich schon kurz darauf eingegangen, warum die Verbreitung wichtig ist. Mit Hilfe von Pingservices kannst du ständig neue Besucher bekommen. Nutze verschiedene Service und lege dich nicht auf einen fest. Derzeit nutze ich folgende:</p>
<ul>
<li>http://rpc.weblogs.com/pingSiteForm?name=...</li>
<li>http://api.my.yahoo.com/RPC2</li>
<li>http://ping.feedburner.com</li>
<li>http://www.bloglines.com/ping</li>
<li>http://ping.wordblog.de/</li>
<li>http://xmlrpc.blogg.de/</li>
<li>http://ping.blogg.de/?name=...</li>
<li>http://weblogs.com/</li>
<li>http://ping.blo.gs/?name=bueltge.de&#038;url=http://bueltge.de/</li>
<li>http://pingoat.com/</li>
<li>http://rpc.pingomatic.com/</li>
<li>http://ping.blo.gs/</li>
<li>http://rpc.technorati.com/rpc/ping</li>
<li>http://geourl.org/ping/</li>
</ul>
</li>
</ol>
<h3>Nachher</h3>
<p>Wenn du nun online bist  und dein Blog läuft, dann gilt es erst einmal Geduld zu haben. Die Leser kommen nicht von heute auf morgen. Schreibe weiterhin an Beiträgen und habe Spaß daran, denn sollte der Hintergrund sein, warum du einen Blog haben wolltest. Bleibe freundlich und offen, versuche motiviert zu bleiben. Die Kommentarfunktion in einem Blog ist wichtig und sorgt für die Kommunikation  beachte alle Meinungen, dazu zählt auch Kritik. Achte dabei auf die Etikette und verletzte deine Leser nicht. Die Diskussionen sind wichtig für das Leben und Überleben deines Blogs.</p>
<h3>Weiterführende Links:</h3>
<ul>
<li><a href="http://www.einfach-persoenlich.de/2005-01-14/blogging-tipps-16-erkenntnisse-kreativer-blogger.html">Weblog-Impuls #1: 16 Erkenntnisse eines kreativen Bloggers</a></li>
<li><a href="http://www.basicthinking.de/blog/2005/10/23/wie-wird-das-eigene-blog-bekannt-update/">Wie wird das eigene Blog bekannt?</a></li>
<li><a href="http://www.trendmile.com/Blog/weblog-blogging/bloggen-aber-richtig/">Bloggen aber richtig</a></li>
<li><a href="http://labuschin.com/?d=7&#038;id=226">Entstehungs-Prozess eines Weblog-Artikels</a></li>
<li><a href="http://webdesignblog.de/seo/101-wege-seine-linkpopularitat-aufzubauen/">101 Wege seine Linkpopularität aufzubauen</a></li>
<li><a href="http://labuschin.com/?d=7&#038;id=241">7 Dinge die den Besucher zum Weiterlesen einladen</a></li>
<li><a href="http://www.wams.de/data/2003/03/23/56356.html">10 Tipps für erfolgreiches Blogge</a>n</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/wie-fange-ich-an-zu-bloggen/221/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wie-fange-ich-an-zu-bloggen/221/feed/</wfw:commentRss>
		<slash:comments>12</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>WP - Hinweise für das Schreiben eines WordPress-Plugins</title>
		<link>http://bueltge.de/wp-hinweise-fuer-das-schreiben-eines-wordpress-plugins/150/</link>
		<comments>http://bueltge.de/wp-hinweise-fuer-das-schreiben-eines-wordpress-plugins/150/#comments</comments>
		<pubDate>Tue, 06 Jun 2006 13:27:35 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://www.bueltge.de/?p=150</guid>
		<description><![CDATA[WordPress gibt dem Anwender eine einfache Schnittstelle, um zusätzliche Funktionen zu implementieren, die so genannte Plugin-Funktion. Durch diese Funktion kann jede zusätzliche Funktionalität außerhalb der eigentlichen Systems, der Core-Daten, gehalten werden. Somit ist auch das durchführen eines Updates relativ leicht durchführbar. Sinnvoll ist es grundlegend wenig Plugins zu verwenden, da durch zusätzliche Funktionen auch die [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress gibt dem Anwender eine einfache Schnittstelle, um zusätzliche Funktionen zu implementieren, die so genannte Plugin-Funktion. Durch diese Funktion kann jede zusätzliche Funktionalität außerhalb der eigentlichen Systems, der Core-Daten, gehalten werden. Somit ist auch das durchführen eines Updates relativ leicht durchführbar.<br />
Sinnvoll ist es grundlegend wenig Plugins zu verwenden, da durch zusätzliche Funktionen auch die Performance leidet. Allerdings ist es oft besser, für eine Anwendung ein Plugin zu hinterlegen, als beispielsweise die Originaldateien zu verändern. Dokumentiert man dies nicht immer, so ist beim nächsten Update schnell etwas zerstört. Außerdem leidet die Performance auch, wenn die Funktion direkt eingebunden ist.<br />
Grundlegend gilt deshalb, das Plugin sollte nach bestem Wissen und Gewissen geschrieben sein. Leider ist das nicht immer leicht. Gerade weil WP so offen ist, kann jeder Anwender ein Plugin schreiben, sobald er ein wenig php-Kenntnis mitbringt. Das kann, muss aber nicht, ein Nachteil sein.<br />
Um das Schreiben eines Plugins ein wenig zu erleichtern und mir einige Gedächtnisstützen zu hinterlegen, ist dieser Artikel entstanden.</p>
<p>Für jedes Plugin gelten einige Regeln, die im folgenden nur kurz aufgezählt sind, da sie auf den jeweiligen Links ausführlich beschrieben werden.</p>
<ol>
<li>Grundlegend sollen die <a href="http://codex.wordpress.org/WordPress_Coding_Standards">WordPress-Coding-Standards</a> eingehalten werden.</li>
<li>Ein Plugin kann als einzelnes File vorliegen und eventuelle abhängige Dateien nutzen oder in einem Ordner liegen. Werden mehrere Files benötigt, oder werden bei kommenden Versionen einige Dateien nicht verändert, so bietet sich die Verwendung eines Ordners in jedem Fall an. Außerdem fördert es die Übersicht in Ordner "plugins" aller WP-User.<br />
<strong>Beispiel:</strong><br />
wp-content/plugins/DEIN_PLUGIN.php<br />
wp-content/plugins/ABHÄNGIGE_DATEI_ZU_DEINEM_PLUGIN.php<br />
wp-content/plugins/DEIN_PLUGIN-ORDNER/
</li>
<li>Die <a href="#3">grundlegende Struktur</a> sollte immer eingehalten werden. Nur so wird die Erkennung des Plugins durch WP sicher gestellt.</li>
<li>Das Plugin sollte vom User über die Admin-Oberfläche von WP aktiviert bzw. deaktiviert werden können.<br />
Optimal ist ein Plugin, wenn die Anwender keine Änderungen am Code vornehmen müssen.</li>
<li>Ebenfalls sollten mögliche Einstellungen nicht hart im Quellcode geändert werden. Hierbei ist allerdings im Vorfeld zu überlegen, wie oft muss eine derartige Konfiguration geändert werden und ist es sinnvoll die Admin-Oberfläche mit einmaligen Abfragen zu überfüllen.</li>
<li>Eine der wichtigsten Regeln, der Namensraum sollte einmalig sein. Das ist nicht immer einfach, besonders bei der großen Anzahl an zusätzlichen Funktionen für WP.<br />
Vergebe am besten einen Namen, das gilt auch für die Namen aller verwendeten Funktionen, nicht nur den Pluginnamen, aus dem Namen des Plugins und der erzielten Funktion oder aus dem Autorennamen und der erzielten Funktion.<br />
<strong>Beispiel:</strong><br />
Funktion reader(), besser ist es den Plugin-Namen mit aufzunehmen: Plugin: RSSImport --> rssi_reader(), noch eindeutiger kann es werden, wenn der Name des Autors mit eingebunden wird: Autor: Frank Bueltge --> fb_rssi_reader()<br />
Allerdings ist darauf zu achten, dass der Code wenigstens für den Autor noch leserlich bleibt <img src='http://bueltge.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</p>
<p>Den Namen des Plugins kann man recht gut auf den Seiten prüfen, die die WP-Plugins listen.</li>
<li>Insofern das Plugin fertig ist und vielleicht auch von verschiedenen Usern und WP-Versionen getestet wurde, kann es veröffentlicht werden. Dazu empflehle ich folgende Seite: <a href="http://www.wp-plugins.net/">wp-plugins.net</a></li>
</ol>
<p><a name="3"></a></p>
<h3>Die grundlegende Struktur</h3>
<p>Diese wenigen Zeilen sollten sich immer gleich in jedem Plugin am Anfang der Datei wieder finden. Daraus werden die Inhalte gelesen, damit WP das Plugin erkennt und über die Admin-Oberfläche verwalten kann.<br />
Die letzten drei Zeilen sind nur relevant, wenn die User das Plugin Installer verenden, mehr Infos zum Plugin auf <a href="http://bueltge.de/wp-installer-plugin-fuer-plugins/154/">WP Installer Plugin für Plugins</a>. </p>
<pre><code>
&lt;?php
/*
Plugin Name: Sowieso (Plugin-Name)
Plugin URI: http://... (Link zur Pluginseite)
Description: Beschreibung (Kurzbeschreibung, xhtml möglich)
Author: Frank Bueltge (Autor[n]name[n])
Version: 1.1 (Versionsnummer)
License: GPL
Author URI: http://bueltge.de (Link zur Website des Autors)
Update Server: http://bueltge.de/.. (Link zum Update-Server, wo das Plugin liegt.)
Min WP Version: 1.5
Max WP Version: 2.0.2
*/ 
</code></pre>
<h3>Plugin API</h3>
<p>WordPress definiert eine eigene Schnittstelle - <a href="http://codex.wordpress.org/Plugin_API">Plugin API</a>. Mit Hilfe dieser API wird das Übergeben von Daten enorm erleichtert.<br />
Grundlegend unterscheidet die WP-API nach zwei Arten von "Hooks" - Filter-Hooks und Tätigkeits-Hooks.</p>
<ul>
<li><strong>Filter-Hooks</strong> ermöglichen das Hinzufügen und das Entfernen der Filter-Funktionen, die nach spezifizierten Daten fungieren (normalerweise Text). Diese ermöglicht Plugins, Inhalt oder Text schnell zu ändern.</li>
<li><strong>Tätigkeits-Hooks</strong> ermöglichen das Hinzufügen und das Entfernen von Funktionen, deren Durchführung durch eine Core-Datei von WordPress ausgelöst wird. Dieses ermöglich es Plugins, Funktionen jeder Zeit durchzuführen.</li>
</ul>
<p>Alle Filter- (Filters) und Tätigkeits-Hooks (Actions) sind auf der <a href="http://codex.wordpress.org/Plugin_API">Plugin-API-Seite</a> zu finden oder auf dem Blog <a href="http://wphooks.flatearth.org/">WordPress Hooks</a> ausführlich erklärt.</p>
<h3>Daten in der WP-Datenbank ablegen</h3>
<p>WordPress ermöglicht die Speicherung von Daten, ohne eine eigene Tabelle in der Datenbank anzulegen. Besonders für die Konfigurationseinstellungen eines Plugins ist dies sinnvoll. WP erlaubt dabei das schreiben, aktualisieren und Lesen der Einträge in seiner Datenbank.<br />
Allerdings muss man nicht alle Daten in den Tabellen von WP speichern. Besonders bei großen Datenmengen leidet der "normale" Gebrauch von WP. Es ist also im Vorfeld zu überlegen, was für Daten in welchen Mengen gespeichert werden sollen. Überlegungen dazu findet man im Artikel "<a href="http://codex.wordpress.org/Creating_Tables_with_Plugins">Creating Tables With Plugins</a>".</p>
<p>Werden die Daten in den WP-Tabellen hinterlegt, so bietet WP folgende Möglichkeiten.</p>
<ul>
<li>Daten hinzufügen --> add_option(NAME[Pflichtwert], WERT, BESCHREIBUNG, AUTOLOAD[default: yes]);</li>
<li>Daten lesen --> get_option(NAME[Pflichtwert]);</li>
<li>Daten aktualisieren --> update_option(NAME[Pflichtwert], NEUER_WERT);</li>
</ul>
<h3>Funktionen prüfen</h3>
<p>Um Komplikationen mit nicht aktivierten Plugins oder defekten Funktionen zu vermeiden, ist es sinnvoll die verwendeten Funktionen abzufragen.<br />
Die notwendige Abfrage habe ich im Artikel "<a href="http://bueltge.de/abfrage-einer-php-funktion-bzw-wp-plugins/160/">Abfrage einer PHP-Funktion, bzw. WP-Plugins</a>" näher erläutert.<br />
Diese Überlegung kann natürlich auch im Plugin angewandt werden.</p>
<h4>Verdeutlichung an einem Beispiel</h4>
<p>Im Artikel "<a href="http://bueltge.de/wp-plugin-tipp-dashboard-erweitern/179/">WP - Plugin Tipp - Dashboard erweitern</a>" erläutere ich ein wenig mehr an Hand eines Beispiels bzw. direkt am Code.</p>
<h4>Weiterführende Links:</h4>
<ul>
<li>Plugin API - <a href="http://codex.wordpress.org/Plugin_API">codex.wordpress.org/Plugin_API</a></li>
<li>Writing a Plugin - <a href="http://codex.wordpress.org/Writing_a_Plugin">codex.wordpress.org/Writing_a_Plugin</a></li>
<li>WP Coding Standards - <a href="http://codex.wordpress.org/WordPress_Coding_Standards">codex.wordpress.org/WordPress_Coding_Standards</a></li>
<li><a href="http://wphooks.flatearth.org/">wphooks.flatearth.org</a> - Blog zu WordPress Hooks, ausführlich gelistet und erklärt</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/wp-hinweise-fuer-das-schreiben-eines-wordpress-plugins/150/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-hinweise-fuer-das-schreiben-eines-wordpress-plugins/150/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>
	</channel>
</rss>

