<?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"
	>

<channel>
	<title>Peruns Weblog &#187; Artikel</title>
	<atom:link href="http://www.perun.net/kategorie/artikel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.perun.net</link>
	<description>Webwork, WordPress und Internet</description>
	<pubDate>Wed, 15 Oct 2008 14:12:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>de</language>
			<item>
		<title>Steuerberater, Sparen und Dispo</title>
		<link>http://www.perun.net/2008/06/19/steuerberater-sparen-und-dispo/</link>
		<comments>http://www.perun.net/2008/06/19/steuerberater-sparen-und-dispo/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 23:59:50 +0000</pubDate>
		<dc:creator>Perun</dc:creator>
		
		<category><![CDATA[Artikel]]></category>

		<category><![CDATA[Webwork]]></category>

		<category><![CDATA[freelancer]]></category>

		<category><![CDATA[selbstaendig]]></category>

		<guid isPermaLink="false">http://www.perun.net/?p=1175</guid>
		<description><![CDATA[Nun komme ich zu einem weiteren Artikel der für die Selbständigen unter uns, oder die vor haben Selbständig zu werden, interessant sein könnte. Drei kleine aber dennoch nützliche Tipps kann ich zum besten geben. Für die alten Hasen ist das alles kalter Kaffee, aber für die Novizen in meinen Augen Ratschläge die einem viel Ärger [...]]]></description>
			<content:encoded><![CDATA[<p>Nun komme ich zu einem weiteren Artikel der für die Selbständigen unter uns, oder die vor haben Selbständig zu werden, interessant sein könnte. Drei kleine aber dennoch nützliche Tipps kann ich zum besten geben. Für die alten Hasen ist das alles kalter Kaffee, aber für die Novizen in meinen Augen Ratschläge die einem viel Ärger ersparen können. </p>
<h3>Der Steuerberater: eine sinnvolle Investition</h3>
<p>In Unterhaltungen mit Kollegen hörte ich des Öfteren Sätze wie &#034;<em>Dafür brauche ich doch keinen Steuerberater</em>&#034; oder &#034;<em>Buchführung und Steuersachen mache ich gerne</em>&#034;. Ok, jedem das Seine, ich persönlich blogge lieber. <img src='http://www.perun.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ein Steuerberater bzw. seine Mitarbeiter mach nicht &#034;nur&#034; die Steuererklärung für dich sondern auch die Buchführung, er macht daraus die Betriebswirtschaftliche Auswertung (BWA) und kann dir Tipps und Ratschläge geben. Ich habe sofort nach dem ich mich selbständig gemacht habe, meinen Steuerberater beauftragt. Das war auch gut so. Vor allem am Anfang hatte ich die eine oder andere Frage &#8230; finde mal im Internet bezüglich Finanzen und Steuer schnell eine wirklich kompetente Antwort. Man ist so grün hinter den Ohren, dass man nicht weiß ob eine Antwort kompetent ist.</p>
<p>Danach hatte ich des Öfteren eine &#034;Verdienstbescheinigung&#034; benötigt. Viele Ämter oder Vermieter (bei Wohnungssuche) akzeptieren die aktuelle BWA als &#034;Verdienstbescheinigung&#034;. Selber kann ich mir so eine zwar auch erstellen <img src='http://www.perun.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> aber mit Stempel und Unterschrift des Steuerberaters wird sie auch akzeptiert.</p>
<p>Dadurch, dass die sich die Bezahlung des Steuerberaters nach dem Einkommen richtet ist es am Anfang eine sehr günstige Investition. Steigen die Ausgaben für den Steuerberater, kann sich immerhin damit trösten, dass man langsam aber sicher erfolgreich geworden ist. <img src='http://www.perun.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Sparen ist immer gut</h3>
<p>Geld bei Seite sollte man immer zurücklegen, das ist klar wie Kloßbrühe. Aber bei Selbständigen geht es auch darum immer einen guten Batzen Geld bei Seite zu haben: Urlaub, Krankheit, dringende Anschaffungen etc. Aber <strong>vor allem</strong> um die Verpflichtungen gegenüber Finanzamt zu begleichen. </p>
<p>Am Anfang hat man halt etwas weniger Umsatz, man hat Startinvestitionen etc. und schon kann es passieren, dass man im folgenden Jahr einen Minibeitrag an Einkommenssteuer an das Finanzamt zahlen muss. Auch die Vorauszahlungen für das laufende Jahr sind niedrig, weil man eben einen vergleichsweise niedrigen Gewinn im Vorjahr hatte.</p>
<p>Im zweiten oder auch erst im dritten Jahr kommt dann der berufliche Erfolg: viele Aufträge, Zahlungen für die Aufträge aus dem Vorjahr trudeln im neuen Jahr ein und am Ende des erfolgreichen Jahres bitten dich diverse Kunden für laufende Aufträge, doch schon im Dezember eine Rechnung zu schreiben.</p>
<p>Also ein super Jahr mit hohem Gewinn, bei niedrigen Vorauszahlungen. Wenn du jetzt keinen guten Steuerberater hast, der dir rechtzeitig sagt wie viel du in etwa bei Seite legen sollst, kann es sein, dass du bei der nächsten Einkommenssteuererklärung ein blaues Wunder erlebst. Von Gesprächen mit Kollegen weiß ich das bei solchen Konstellationen sehr schnell 5.000-9.000 Euro Nachzahlung anstehen können - ich rede hier von Einzelunternehmern. Als Sahnehäubchen kommen dann noch die viel höheren Vorauszahlungen.</p>
<p>Wenn du jetzt nicht flüssig bist, dann hast du ein Problem. Für Schulden beim Finanzamt wird dir keine Bank Kredit geben. Wie erfolgreich man ist, wenn man beim Finanzamt um Aufschub oder Ratenzahlung bittet, kann ich nicht sagen. Man hört unterschiedliches.</p>
<p>Daher ist meine Empfehlung sich ein Tagesgeldkonto zuzulegen und das Geld was man nicht dringend benötigt, aber schnell zur Verfügung haben möchte dort zu parken. Momentan ist zwar die Inflation so hoch, dass ein großer Teil der Zinseinnahmen aufgefressen wird, aber immerhin besser als das Geld auf einem &#034;normalen&#034; Konto zu belassen. Auf solchem Konto würde ich eben das Geld parken, was eigentlich dem Finanzamt gehört: Einkommens- und Umsatzsteuer.</p>
<h3>Dispo (Kreditrahmen) für die Notfälle</h3>
<p>Standardmäßig, so viel ich weiß, hat ein geschäftliches Girokonto kein Dispo, läuft also auf Guthabenbasis. Das ist an sich gut, weil es unter anderem verhindert das man sich schon am Anfang mit einem hohen Zinssatz verschuldet. Und die Bank kann dir schlecht eine Dispogrenze einräumen, wenn die nicht weiß was du einnimmst.</p>
<p>Wenn es dann dazu kommt, dass die Geschäfte gut laufen und du auch gute Zahlen vorzuweisen hast (Jahresabschluss, aktuelle BWA vom Steuerberater), dann würde ich mich an die Bank wenden und um Dispo bitten. Wenn deine Einnahmen sinken, dann hast du schlechtere Argumente.</p>
<p>Hierbei soll noch einmal erwähnt werden, dass man den Dissporahmen nicht als ein festes Einkommen einkalkuliert, sondern das es lediglich als &#034;Puffer&#034; für absolute Notfälle dient. Ist eigentlich klar, ich wollte es trotzdem noch einmal erwähnt haben.</p>
<p>Das war es jetzt meinerseits. Falls mir weitere Tipps und Erfahrungen einfallen sollte, so werde ich hier im Weblog darüber schreiben. Wenn du Tipps und Erfahrungen bezüglich Selbständigkeit hast, dann kommentiere was das Zeug hält. <img src='http://www.perun.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>

	<a href="http://www.perun.net/tag/freelancer/" title="freelancer" rel="tag">freelancer</a>, <a href="http://www.perun.net/tag/selbstaendig/" title="selbstaendig" rel="tag">selbstaendig</a>
]]></content:encoded>
			<wfw:commentRss>http://www.perun.net/2008/06/19/steuerberater-sparen-und-dispo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bilder nummerieren und gut benennen</title>
		<link>http://www.perun.net/2008/06/03/bilder-nummerieren-und-gut-benennen/</link>
		<comments>http://www.perun.net/2008/06/03/bilder-nummerieren-und-gut-benennen/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 14:43:04 +0000</pubDate>
		<dc:creator>Perun</dc:creator>
		
		<category><![CDATA[Artikel]]></category>

		<category><![CDATA[Webwork]]></category>

		<guid isPermaLink="false">http://www.perun.net/?p=1154</guid>
		<description><![CDATA[Da ich mittlerweile vier Bücher geschrieben habe und auch an einem längeren Workshop-Text arbeite, habe ich so einiges an Erfahrungen gesammelt in dem Umgang mit vielen Bildern in längeren Texten. 
Durchgehende Nummerierung
Was ich auf jeden Fall empfehlen kann ist eine durchgehende Nummerierung der Bilder und zwar am besten von Anfang an zweistellig: 01, 02, 03 [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich mittlerweile vier Bücher geschrieben habe und auch an einem längeren Workshop-Text arbeite, habe ich so einiges an Erfahrungen gesammelt in dem Umgang mit vielen Bildern in längeren Texten. </p>
<h3>Durchgehende Nummerierung</h3>
<p>Was ich auf jeden Fall empfehlen kann ist eine durchgehende Nummerierung der Bilder und zwar am besten von Anfang an zweistellig: 01, 02, 03 &#8230;98, 99. Durch die vorangehende Null bei den einstelligen Zahlen erreicht man, dass bei der alphabetischen Auflistung nicht die 11 vor die 2 kommt. Soll es in dem Dokument mehr als 100 Bilder geben, dann macht man das ganze dreistellig.</p>
<h3>Etwas &#034;Luft&#034; lassen</h3>
<p>Dann sollte man auf jeden Fall auch einplanen, dass es passieren kann das man neue Bilder dazwischen einfügen muss. Da gibt es mehrere Möglichkeiten. Entweder man lässt Lücken in dem man in Zweier- oder Dreier-Schritten die Bilder nummeriert (01, 04, 07 etc.). Das ist aber ein sehr starres Konstrukt. Viel besser ist, wenn man die Bilder direkt nach folgendem Muster benennt:</p>
<ul>
<li>04a-wordpress-logo.png</li>
<li>05a-wordpress-installation.png</li>
<li>06a-wordpress-dashboard.png</li>
</ul>
<p>Will man jetzt ein oder mehrere Bilder zwischen den Nummern 5 und 6 einfügen, dann benennt man die Bilder einfach <em>05b-bla.png</em>, <em>05c-blubb.png</em> etc. Somit ist es garantiert, dass auch nachträglich eingefügte Bilder sich alphabetisch richtig auflisten lassen.</p>
<h3>Sprechende Namen</h3>
<p>Das man für die Bilder auch aussagekräftige Namen wählen soll, muss ich jetzt hier nicht vertiefen. Der Sinn einer solchen Maßnahme ist klar. Die Verbindung von guter Nummerierung und einem aussagekräftigen Namen erleichtert nicht nur dir sondern auch dem Verleger die Arbeit.</p>
<p>Ich persönlich habe es mir angewöhnt, alle Bildernamen klein zu schreiben, Umlaute zu entschärfen (oe statt ö) und mit Bindestrich (&#034;Minus&#034;) die Leerezeichen zu ersetzen. Damit bleibe ich konform mit dem webbasierten Bereich. Das ist aber natürlich eine Geschmacks- und Gewöhnungssache.</p>
<p>Die oben erwähnten Tipps sind sicherlich trivialer Natur, können aber viel Zeit und Nerven sparen.</p>
Keine Tags f&uuml;r diesen Beitrag.]]></content:encoded>
			<wfw:commentRss>http://www.perun.net/2008/06/03/bilder-nummerieren-und-gut-benennen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Selbständige, Angestellte und der Stundensatz</title>
		<link>http://www.perun.net/2008/05/23/selbstaendige-angestellte-und-der-stundensatz/</link>
		<comments>http://www.perun.net/2008/05/23/selbstaendige-angestellte-und-der-stundensatz/#comments</comments>
		<pubDate>Fri, 23 May 2008 00:09:29 +0000</pubDate>
		<dc:creator>Perun</dc:creator>
		
		<category><![CDATA[Artikel]]></category>

		<category><![CDATA[Webwork]]></category>

		<category><![CDATA[freelancer]]></category>

		<category><![CDATA[selbstaendig]]></category>

		<guid isPermaLink="false">http://www.perun.net/?p=1152</guid>
		<description><![CDATA[Viele Selbständige kennen es. Man unterhält sich mit Freunden und Bekannten und irgendwann fällt das Thema auf den Verdienst. Wenn man dann als Selbständiger erzählt was man als Stundensatz berechnet, dann fällt manchen Leuten, die als &#034;klassischer&#034; Angestellter arbeiten, die Kinnlade runter und dann hört man schon häufiger &#034;Boah, dass ist aber viel! Warum so [...]]]></description>
			<content:encoded><![CDATA[<p>Viele Selbständige kennen es. Man unterhält sich mit Freunden und Bekannten und irgendwann fällt das Thema auf den Verdienst. Wenn man dann als Selbständiger erzählt was man als Stundensatz berechnet, dann fällt <strong>manchen</strong> Leuten, die als &#034;klassischer&#034; Angestellter arbeiten, die Kinnlade runter und dann hört man schon häufiger &#034;Boah, dass ist aber viel! Warum so viel?&#034; etc. <img src="http://vg03.met.vgwort.de/na/8173f9558cecef132b33318b8e8b08" width="1" height="1" alt="" /></p>
<p>Dabei wird einiges missverstanden, aber wenn man keine Selbständige in der Familie oder Bekanntenkreis hat, dann kann man es nicht wissen. Leider wird man in der Schule auf solche essentielle Sachen nicht vorbereitet. </p>
<p>OK, dann fangen wir an, aber zuerst mal von der Warte eines Angestellten. Ich habe letztens irgendwo eine Zahl aufgeschnappt, kann sein das es bei &#034;Hart aber fair&#034; war. Auf jeden Fall verdient ein durchschnittlicher Angestellter ca. 30-33.000 Euro brutto (also inkl. Lohnsteuer, Soli und Sozialversicherung) im Jahr. Wenn man den Arbeitgeber-Anteil für die Sozialversicherungen und weitere Ausgaben (z.B. Genossenschaft) mit zählt, dann kommt noch einmal ein gutes Drittel hinzu. Also ca. 40-44.000 brutto-brutto. <img src='http://www.perun.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Der angestellte arbeitet im Schnitt, um bei glatten Zahlen zu bleiben, ca. 160 Stunden im Monat. Lassen wir jetzt die Überstunden bei Seite, ich weiß dass viele Angestellte die machen. Also wären das in etwa 1.920 Stunden im Jahr. Nun muss man von dieser Stundenzahl den Urlaub und die Feiertage abziehen. Je nach Bundesland (bis zu 14 Feiertage) und je nach Vertrag kann man schon um die 40 Tage zusammenbekommen. Teilt man das auf die Arbeitswochen auf, fallen schon mal zwei Arbeitsmonate weg. Also bleibt von den 1920 Arbeitsstunden pro Jahr im Schnitt etwa 1.600 über. Nun kommen wir zur einer kleinen Formel:</p>
<p><strong>40-44.000 Euro / 1.600h = 25-27,5 Euro pro Stunde</strong></p>
<p><!-- WSA: rules for context 'im-beitrag' did not apply --></p>
<p>Somit kostet so ein Angestellter den Arbeitgeber 25-27,5 Euro die Stunde, dabei hat der Angestellte keine Fortbildung in Anspruch genommen (fünf Tage im Jahr) und war im ganzen Jahr nicht krank. Dies muss ein Selbständiger auch mit einkalkulieren.</p>
<h3>Die Kalkulation des Selbständigen</h3>
<p>Will also z.B. ein freier Webdesigner ungefähr den Netto-Verdienst haben, den auch ein durchschnittlicher Angestellter hat, dann muss er auf seinen Stundensatz neben den 27,5 Euro noch weitere Kosten einbeziehen wie z.B. Bürokosten, Hard- und Software, Fortbildungskosten, Steuerberater, Werbung etc.</p>
<p>Darüber hinaus muss man auch noch berechnen und wenn möglich in den Stundensatz berücksichtigen, dass die Zeit in der man Angebote und Rechnungen verfasst und die Aquise macht auch zu der Arbeitszeit gehört und das so gut wie kein Selbständiger über das komplette Jahr zu 100% ausgelastet ist. </p>
<p>Und wenn ein Selbständiger in den Urlaub fährt, dann bekommt er kein Urlaubsgeld, er muss sich vielmehr den Urlaub auch finanziell erarbeiten und den Verdienstausfall durch den Urlaub verkraften können.</p>
<p>Wenn man das alles berücksichtigt, dann kommt man sehr schnell auf Preise die in etwa bei ca. 45-50 Euro liegen, wenn ein Selbständiger auch von diesem Geld leben möchte und kein Student ist. Und ich rede hier von Selbständigen wie es viele freischaffende Webworker sind und noch nicht von z.B. Agentur-Preisen wo noch ganz andere Sachen mitgezählt werden müssen.</p>
<h3>Kleiner Hinweis</h3>
<p>Ich möchte hier auch <strong>nicht</strong> missverstanden werden. Ich wollte mit diesem Beitrag <strong>nicht</strong> die Angestellten angreifen oder erzählen wie super-toll die es haben <strong>noch</strong> wollte ich als Selbständiger jammern. Viel mehr ging es mir darum aufzuzeigen, dass auch wenn im ersten Moment sich die Stundensätze mancher Selbständiger sehr hoch anhören, so bedeutet das nicht, dass der ganze Verdienst auch bei ihm bleibt. Ist an sich logisch, aber vielen Menschen nicht wirklich klar und auch eine der Ursachen, warum viele Selbständige, die wenig Erfahrung haben, auch scheitern.</p>

	<a href="http://www.perun.net/tag/freelancer/" title="freelancer" rel="tag">freelancer</a>, <a href="http://www.perun.net/tag/selbstaendig/" title="selbstaendig" rel="tag">selbstaendig</a>
]]></content:encoded>
			<wfw:commentRss>http://www.perun.net/2008/05/23/selbstaendige-angestellte-und-der-stundensatz/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mehrere dynamische Sidebars in WordPress</title>
		<link>http://www.perun.net/2008/02/17/mehrere-dynamische-sidebars-in-wordpress/</link>
		<comments>http://www.perun.net/2008/02/17/mehrere-dynamische-sidebars-in-wordpress/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 16:46:11 +0000</pubDate>
		<dc:creator>Perun</dc:creator>
		
		<category><![CDATA[Artikel]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[wordpress-artikel]]></category>

		<category><![CDATA[wordpress-tipps]]></category>

		<guid isPermaLink="false">http://www.perun.net/2008/02/17/mehrere-dynamische-sidebars-in-wordpress/</guid>
		<description><![CDATA[In WordPress gibt es schon seit sehr langer Zeit die Möglichkeit, die Themes (also die Templates) mit den dynamischen Sidebars aufzuwerten. Vielen sind die dynamischen Sidebars auch unter dem Begriff Widgets bekannt. Seit der Version 2.0 von WordPress gab es eine Möglichkeit dies mit Plugins zu realisieren und seit WordPress 2.2 gehört das fest zum [...]]]></description>
			<content:encoded><![CDATA[<p>In WordPress gibt es schon seit sehr langer Zeit die Möglichkeit, die Themes (also die Templates) mit den dynamischen Sidebars aufzuwerten. Vielen sind die dynamischen Sidebars auch unter dem Begriff Widgets bekannt. Seit der Version 2.0 von WordPress gab es eine Möglichkeit dies mit Plugins zu realisieren und seit WordPress 2.2 gehört das fest zum Funktionsumfang von WordPress. Im <a href="http://www.perun.net/2007/10/31/wordpress-themes-verstehen-3/">dritten Teil</a> der Artikelserie (&#034;WordPress-Themes verstehen&#034;), bin ich kurz darauf eingegangen. </p>
<h3>Dynamische Sidebar einbinden</h3>
<p>Um die Widget-Funktion im eigenen Theme zu gewährleisten muss man als aller erstes, die Datei functions.php erstellen. In dieser Datei muss man als Minimum folgendes eintragen:</p>
<ol class="code-block">
<li><code>&lt;?php</code></li>
<li><code>if ( function_exists('register_sidebar') )</code></li>
<li><code>register_sidebar(array(</code></li>
<li><code>'before_widget' =&gt; '',</code></li>
<li><code>'after_widget' =&gt; '',</code></li>
<li><code>'before_title' =&gt; '&lt;h2&gt;',</code></li>
<li><code>'after_title' =&gt; '&lt;/h2&gt;',</code></li>
<li><code>));</code></li>
<li><code>?&gt;</code></li>
</ol>
<p>Wobei man hier frei ist, welchen HTML-Code man vor und hinter dem einzelnen Widget und seiner Überschrift unterbringt. Man kann es auch leer lassen. Die Datei functions.php lädt man in den jeweiligen Themes-Ordner hoch. Nun muss man in dem Theme eine Stelle finden wo man die Ausgabe der Widget-Inhalte haben will. Hier gibt es mehrere Vorgehensweisen: entweder wird die Seitenleiste komplett durch die Widgets gesteuert oder nur Teile der Sidebar:</p>
<ol class="code-block">
<li><code>&lt;?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?&gt;</code></li>
<li><code>...</code></li>
<li><code>&lt;?php endif; ?&gt;</code></li>
</ol>
<p>Da wo jetzt die Auslassungszeichen notiert sind, kann man entweder nur ein HTML-Kommentar oder sogar die ganze Standard-Sidebar einfügen, die erscheint, wenn die dynamisch Sidebar deaktiviert ist. Wie gesagt, das ist davon abhängig welche Vorgehensweise man bevorzugt. Wenn man die Datei hochgeladen hat und im Theme die dynamische Sidebar eingebunden hat kann man im Admin-Bereich unter &#034;Themes&#034; &raquo; &#034;Widgets&#034; die Widgets aktivieren und mit Inhalt füllen. Zur Auswahl stehen mehrere Widgets: Kategorien, Archiv, Kalender, Links, RSS, Textboxen etc. Und je nach dem welche Plugins sich im Einsatz befinden auch diverse Plugin-Widgets.</p>
<p>Das interessante an den Text-Widgets ist, dass man sie mit HTML und Javascript aufwerten kann. Ist das exec-php-Plugin aktiv auch mit PHP-Code. Das RSS-Widget ist deswegen interessant, weil man damit externe aber auch interne Newsfeeds einbinden und ausgeben kann: z.B. del.icio.us-Links oder die Kommentare aus dem eigenen Weblog.</p>
<h3>Mehrere dynamiche Sidebars</h3>
<p>So weit so gut, was aber wenn ich die Funktionalität der dynamischen Sidebar auf mehreren Stellen haben will und das nicht nur in der Seitenleiste sondern z.B. im Kopf- oder Fußbereich der Seite? Die Vorgehensweise hierbei ist sehr einfach, mann muss in der functions.php einen weitere dynamische Sidebar definieren:</p>
<ol class="code-block">
<li><code>&lt;?php if ( function_exists('register_sidebar') )</code></li>
<li><code>register_sidebar(array(<strong>&#039;name&#039;=&gt;&#039;widget1&#039;,</strong></code></li>
<li><code>'before_widget' =&gt; '',</code></li>
<li><code>'after_widget' =&gt; '',</code></li>
<li><code>'before_title' =&gt; '&lt;h2&gt;',</code></li>
<li><code>'after_title' =&gt; '&lt;/h2&gt;',</code></li>
<li><code>));</code></li>
<li><code>register_sidebar(array(<strong>&#039;name&#039;=&gt;&#039;widget2&#039;,</strong></code></li>
<li><code>'before_widget' =&gt; '&lt;div id=&quot;im-fokus&quot;&gt;',</code></li>
<li><code>'after_widget' =&gt; '&lt;/div&gt;',</code></li>
<li><code>'before_title' =&gt; '&lt;h2&gt;',</code></li>
<li><code>'after_title' =&gt; '&lt;/h2&gt;',</code></li>
<li><code>)); ?&gt;</code></li>
</ol>
<p>Jetzt kann man an der gewünschten Stelle im Theme, die zweite dynamische Sidebar einfügen:</p>
<ol class="code-block">
<li><code>&lt;?php</code></li>
<li><code>if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('widgetfeld2') ) : ?&gt;</code></li>
<li><code>&lt;!-- Keine Widgets! --&gt;</code></li>
<li><code>&lt;?php endif; ?&gt;</code></li>
</ol>
<p>Diesen Code-Block habe ich in der index.php dieses Weblogs eingefügt um den Text-Block mit der Überschrift &#034;Im Fokus&#034; anzuzeigen. Man sollte dabei auch nicht vergessen, den Code für die Einbindung der ersten dynamischen Sidebar entsprechend anzupassen.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2008/02/mehrere-widgets.png' alt='Mehrere Widgets bzw. dynamische Sidebars' /><br />
<em>Die Verwaltung mehrerer dynamischer Sidebars</em></p>
<p>In der oberen Abbildung sieht man dann, wie man mehrere dynamische Sidebars verwaltet. Ich denke mal, dass die Vorgehnsweise selbsterklärend ist, so dass ich jetzt nicht näher darauf eingehen muss &#8230; oder?</p>
<h3>Vor- und Nachteile von mehreren dynamischen Sidebars</h3>
<p>Die Vorteile der dynamischen Sidebar liegen klar an der Hand: man kann komfortabel aus dem Admin-Bereich entweder die ganze oder Teile der Sidebar verwalten. Bei mehreren dynamischen Sidebars könnte man somit mehr oder weniger komplette Seiten-Bereiche -Menü, Fußbereich etc. - verwalten.</p>
<p>Aber es gibt auch potentielle Nachteile, zum einen können vor allem bei Gemeinschaftsblogs oder bei Blogs, die man für Kunden aufgesetzt hat Inhalte in Bereiche reinkommen, die dafür nicht vorgesehen waren oder man könnte aus versehen, den Inhalt eines Widgets löschen ohne einen Backup zu machen. Allerdings kann man dies recht einfach in den griff bekommen.</p>
<p>Es gibt einen imho gravierenderen Nachteil, von dem von der offiziellen Seite gewarnt wird (finde jetzt leider den Link nicht), dass beim Einsatz von vielen dynamischen Sidebars, die Geschwindigkeit der Website in die Knie gehen kann. Deswegen ist es geplant, dass in der Version 2.5 auch die Leistung der Widgets verbessert wird. Ab welcher Anzahl der dynamischen Sidebars, der Aufbau der Website verlangsamt wird, wurde in der Quelle nicht erwähnt.</p>

	<a href="http://www.perun.net/tag/wordpress-artikel/" title="wordpress-artikel" rel="tag">wordpress-artikel</a>, <a href="http://www.perun.net/tag/wordpress-tipps/" title="wordpress-tipps" rel="tag">wordpress-tipps</a>
]]></content:encoded>
			<wfw:commentRss>http://www.perun.net/2008/02/17/mehrere-dynamische-sidebars-in-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WordPress-Themes verstehen 3</title>
		<link>http://www.perun.net/2007/10/31/wordpress-themes-verstehen-3/</link>
		<comments>http://www.perun.net/2007/10/31/wordpress-themes-verstehen-3/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 04:04:56 +0000</pubDate>
		<dc:creator>Perun</dc:creator>
		
		<category><![CDATA[Artikel]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[wordpress-artikel]]></category>

		<guid isPermaLink="false">http://www.perun.net/2007/10/31/wordpress-themes-verstehen-3/</guid>
		<description><![CDATA[Es ist schon einige Zeit her, seit dem ich den ersten und zweiten Teil der Artikelserie &#034;WordPress-Themes verstehen&#034; verfasst habe. Nun möchte ich hier auch den dritten Teil der Trilogie veröffentlichen. 
Doch bevor ich es vergesse wollte ich Markus Petschenig ein herzliches Dankeschön sagen für den Hinweis auf einige der Fehler, die sich im zweiten [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist schon einige Zeit her, seit dem ich <a href="http://www.perun.net/2007/07/30/wordpress-themes-verstehen-1/">den ersten</a> und <a href="http://www.perun.net/2007/08/08/wordpress-themes-verstehen-2/">zweiten Teil</a> der Artikelserie &#034;WordPress-Themes verstehen&#034; verfasst habe. Nun möchte ich hier auch den dritten Teil der Trilogie veröffentlichen. <img src="http://vg03.met.vgwort.de/na/754f1632bf7c1cfc884652efc7a03b" width="1" height="1" alt="" /><img src="http://vg07.met.vgwort.de/na/0dc9c559beb3e0eb6024b2692cdca3" width="1" height="1" alt="" /></p>
<p>Doch bevor ich es vergesse wollte ich Markus Petschenig ein herzliches Dankeschön sagen für den Hinweis auf einige der Fehler, die sich im zweiten Teil eingeschlichen haben. Die die einzelnen Artikel aufeinander aufbauen ist es natürlich sinnvoll alle drei Artikel in aufsteigender Folge zu lesen. </p>
<p>In diesem Kapitel werde ich den Aufbau des Themes dieses Weblogs erklären. Dabei werde ich, in gewohnter Weise, die einzelnen Dateien vorstellen und etwas detaillierter auf den Code eingehen und natürlich werde ich meine Vorgehensweise und die Gedankengänge, die dazu geführt haben, erklären.</p>
<div class="beitrag-hinweis"><strong>Achtung:</strong> ich hätte eine kleine Bitte an die Leser. Es handelt sich hierbei um eine Anleitung zum Nachbauen und Nachkochen. Ich habe nichts dagegen wenn sich jemand von dem Aufbau und dem ganzen drumherum inspirieren lässt. Deswegen mache ich es auch. Es ist aber <strong>keine</strong> Anleitung zum Selbstbedienen und das gilt speziell für das Logo und das Design. Ich weiß, den allermeisten ist dies glasklar. Dennoch sind einige Leute unterwegs, die dann behaupten es nicht gewusst zu haben und für diese Leute ist dieser Hinweis gedacht. Vielen Dank.</div>
<p><!-- WSA: rules for context 'im-beitrag' did not apply --></p>
<h3>3.1	Planung und Überlegung</h3>
<p>Bezüglich der Planung und der Umsetzung des Designs habe ich schon im Beitrag mit dem Namen <a href="http://www.perun.net/2007/07/14/hinweise-zum-neuen-design/">Hinweise zum neuen Design</a> berichtet. Daher werde ich mir hier diese Einleitung sparen und es geht direkt an das Eingemachte.</p>
<h3>3.2	Der Kopfbereich (header.php)</h3>
<ol class="code-block">
<li><code>&#60;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&#62;</code></li>
<li><code>&#60;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"&#62;</code></li>
<li><code>&#60;head profile="http://gmpg.org/xfn/11"&#62;</code></li>
<li><code>&#60;?php if (is_home()) { ?&#62;</code></li>
<li><code>&#60;title&#62;&#60;?php bloginfo('name'); ?&#62; - &#60;?php bloginfo('description'); ?&#62;&#60;/title&#62;</code></li>
<li><code>&#60;?php }</code></li>
<li><code>elseif(is_category() or is_archive() or is_page() or is_single()) { ?&#62;</code></li>
<li><code>&#60;title&#62;&#60;?php wp_title(''); ?&#62; &raquo; &#60;?php bloginfo('name'); ?&#62;&#60;/title&#62;</code></li>
<li><code>&#60;?php } else { ?&#62;</code></li>
<li><code>&#60;title&#62;&#60;?php bloginfo('name'); ?&#62;&#60;?php wp_title(); ?&#62; - &#60;?php bloginfo('description'); ?&#62;&#60;/title&#62;</code></li>
<li><code>&#60;?php } ?&#62;</code></li>
<li><code>&#60;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&#62;</code></li>
<li><code>&#60;meta name="generator" content="WordPress &#60;?php bloginfo('version'); ?&#62; und WeBuilder 2007" /&#62; &#60;!-- leave this for stats please --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;link rel="stylesheet" type="text/css" media="screen" href="&#60;?php bloginfo('stylesheet_url'); ?&#62;" /&#62;</code></li>
<li><code>&#60;link rel="stylesheet" type="text/css" media="print" href="&#60;?php bloginfo('template_directory'); ?&#62;/print.css" /&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;meta name="ICBM" content="50.938,6.974" /&#62;</code></li>
<li><code>&#60;meta name="DC.title" content="Peruns Weblog - Webwork und Internet" /&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;meta name="author" content="Vladimir Simovic aka Perun" /&#62;</code></li>
<li><code>&#60;?php if (is_home()) { ?&#62;&#60;meta name="description" content="Das Weblog zum Thema Webwork und Internet: Weblogs, WordPress, CSS und (X)HTML, Mozilla u.v.m." /&#62;&#60;?php } ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;meta http-equiv="imagetoolbar" content="no" /&#62;</code></li>
<li><code>&#60;link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="&#60;?php bloginfo('rss2_url'); ?&#62;" /&#62;</code></li>
<li><code>&#60;link rel="pingback" href="&#60;?php bloginfo('pingback_url'); ?&#62;" /&#62;</code></li>
<li><code>&#60;link rel="archives" href="/archiv/" title="Archiv: nach Monaten und Tags (Schlagw&#246;rter) sortiert." /&#62;</code></li>
<li><code>&#60;link rel="meta" type="application/rdf+xml" title="FOAF" href="http://www.perun.net/perun-foaf.rdf" /&#62;</code></li>
<li><code>&#60;link rel="shortcut icon" href="http://www.perun.net/favicon.ico" /&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (is_search()) {echo "&#60;meta name=\"robots\" content=\"noindex, follow\" /&#62;\n";} ?&#62;</code></li>
<li><code>&#60;?php wp_head(); ?&#62;</code></li>
<li><code>&#60;/head&#62;</code></li>
</ol>
<p class="code-titel">Die header.php (1/2)</p>
<p>Die ersten drei Zeilen der header.php sind hinreichend bekannt. Du wirst allerdings bemerkt haben, dass ich die Angaben zur Sprache im HTML-Wurzelelement direkt eingegeben und auf die Angabe des zuständigen Template-Tags (<code>language_attributes();</code>) verzichtet habe. Ich werde auch weiterhin in diesem Weblog nur in deutscher Sprache schreiben und ich bin mir ziemlich sicher, dass in der nächsten Zukunft auch weiterhin in der deutschen Sprache von links nach rechts gelesen und geschrieben wird &#8230; obwohl, den Kultusministerkonferenzen traue ich einiges zu.</p>
<p>Spaß beiseite. Fakt ist, dass ich nur in Deutsch schreibe und man bekannter weise in dieser Sprache von links nach rechts liest und schreibt. Daher notiere ich das deutsche Sprachkürzel <strong>direkt</strong> und verzichte auf die Angabe zur Schreib- und Leserichtung, da die Einstellung &#034;von links nach rechts&#034; (<code>dir="ltr"</code>) voreingestellt ist. Somit spare ich mir die Notierung eines, in meinem Fall, unnötigen Template-Tags und eine extra Anfrage an den Server. Eine ganz andere Geschichte wäre es, wenn ich ein Template für ein verschiedensprachiges Publikum erarbeite.</p>
<p>Jetzt schauen wir uns mal die Zeilen 4-11 der header.php an. Diese sind zuständig für die Ausgabe des Seitentitels im Kopfbereich:</p>
<ol class="code-block" start="4">
<li><code>&#60;?php if (is_home()) { ?&#62;</code></li>
<li><code>&#60;title&#62;&#60;?php bloginfo('name'); ?&#62; - &#60;?php bloginfo('description'); ?&#62;&#60;/title&#62;</code></li>
<li><code>&#60;?php }</code></li>
<li><code>elseif(is_category() or is_archive() or is_page() or is_single()) { ?&#62;</code></li>
<li><code>&#60;title&#62;&#60;?php wp_title(''); ?&#62; &raquo; &#60;?php bloginfo('name'); ?&#62;&#60;/title&#62;</code></li>
<li><code>&#60;?php } else { ?&#62;</code></li>
<li><code>&#60;title&#62;&#60;?php bloginfo('name'); ?&#62;&#60;?php wp_title(); ?&#62; - &#60;?php bloginfo('description'); ?&#62;&#60;/title&#62;</code></li>
<li><code>&#60;?php } ?&#62;</code></li>
</ol>
<p class="code-titel">Der Seitentitel</p>
<p>Im Gegensatz zu den beiden Standard-Themes habe ich die Abfragen bei der <strong>Ausgabe des Seitentitels</strong> erweitert. Auf der Startseite und auf allen Seiten, die auf die Hauptdatei (index.php) zurückgreifen - <code>if(is_home())</code> -, bekommt man Folgendes in der Titelleiste des Browsers zu sehen:</p>
<blockquote><p>Peruns Weblog - Webwork und Internet</p></blockquote>
<p>Der Seitentitel besteht hier ganz einfach aus dem Namen (<code>bloginfo('name');</code>) und der Beschreibung (<code>bloginfo('description');</code>) des Blogs. In der Kategorieübersicht, im Archiv, den Unterseiten und beim einzelnen Beitrag besteht der Seitentitel aus der ausgelesenen Überschrift (<code>wp_title();</code>), gefolgt von dem Namen des Weblogs. Hier exemplarisch der Seitentitel für einen einzelnen Beitrag:</p>
<blockquote><p>Karten für WordCamp08 &raquo; Peruns Weblog</p></blockquote>
<p>Mit Hilfe von <code>wp_title('');</code> kann man die Überschrift bzw. den Titel des Beitrages, des Archivs oder der Seite auslesen. Ich habe extra die zwei Hochkommata ohne einen Parameterwert eingefügt. Üblicherweise bekommt <code>wp_title</code> bei der Ausgabe ein Trennzeichen (<code>&raquo;</code>), an sich praktisch und sinnvoll. Allerdings taucht dieses Zeichen auf der linken Seite auf, weil es ursprünglich vorgesehen war, dass man <code>wp_title</code> am Ende des Seitentitels unterbringt. Da es aber sinnvoller ist, den Titel des Beitrages am Anfang zu notieren, muss man dem Template-Tag <code>wp_title</code> einen leeren Parameterwert geben, um die Ausgabe des Trennzeichens zu unterdrücken.</p>
<div class="beitrag-hinweis">Warum ist es sinnvoll den Titel des Beitrages voranzustellen? Dies steht u.a. im Beitrag <a href="http://www.perun.net/2007/02/28/optimaler-seitentitel-in-wordpress/">Optimaler Seitentitel in Wordpress</a></div>
<p>Wie du in der Zeile 12 sehen kannst, habe ich ebenfalls die Angaben zum <strong>MIME-Typ</strong> und zum <strong>Zeichensatz</strong> direkt notiert und auch hier auf die Angabe der entsprechenden Template-Tags verzichtet. Ich habe nicht vor, in absehbarer Zeit den MIME-Typ und den eingesetzten Zeichensatz zu ändern, und vor allem ist die Änderung des Zeichensatzes nicht etwas, was man oft macht.</p>
<p>In den Zeilen 15 und 16 habe ich die Verlinkungen zu der CSS-Datei und zu der CSS-Datei für die <strong>Druck-Ausgabe</strong> notiert. Wie du in Zeile 16 sehen kannst, gibt <code>bloginfo('template_directory');</code> den Pfad zum jeweiligen Themes-Ordner aus.</p>
<p>In der Zeile 18 siehst du ein spezielles Meta-Tag, das für viele noch unbekannt sein dürfte: <code>&lt;meta name="ICBM" content="50.938,6.974" /&gt;</code>. Es handelt sich hier um die so genannte <strong>Geokodierung</strong> bzw. das <strong>Geotagging</strong> von Websites und Inhalten. Hierbei werden die Werte der Geo-Koordinaten als Metatags im Kopfbereich der Website platziert. Auf diese Werte greifen spezielle Suchmaschinen zu, die z. B. eine regionale Suche anbieten, oder Websites, die z. B. alle Websites innerhalb eines bestimmten geografischen Bereiches auflisten. Die Website www.mygeoposition.com ist eine von vielen Websites, wo man anhand der eingegebenen Postadresse die benötigten Metatag-Werte bekommt.</p>
<p>Durch den Code in der Zeile 22 der header.php wird die <strong>Seiten-Beschreibung</strong> (<code>meta name="description"</code>) nur auf den Seiten ausgegeben, die bei der Ausgabe auf die index.php zurückgreifen. Dieses Metatag hat viel von seiner ursprünglichen Bedeutung eingebüßt, weil viele Suchmaschinen-Spammer in der Vergangenheit dieses Tag - genau wie das Tag <code>meta name="keyword"</code> - missbraucht haben. Dennoch blenden diverse Suchmaschinen den Inhalt der Meta-Beschreibung bei der Ausgabe der Suchergebnisse ein. Allerdings sollte man schauen, dass der Inhalt dieses Tags zu dem Seitentitel und dem übrigen Inhalt auf der Website passt. Dies ist in meinem Weblog auf den Seiten, die auf die index.php zurückgreifen, gegeben. Bei den einzelnen Beiträgen ist dies nicht der Fall und daher blende ich dieses Metatag dort auch aus.</p>
<p>In der Zeile 24 siehst du ein weiteres nicht so häufig anzutreffendes Metatag: <code>&lt;meta http-equiv="imagetoolbar" content="no" /&gt;</code>. Mit diesem Metatag blendet man die kleine <strong>Toolbar</strong> aus, die der Internet Explorer 6 einblendet, wenn du den Cursor über ein Bild bewegst.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/ie6-toolbar.png' alt='Toolbar von IE6' /><br />
<em>Die Image-Toolbar von dem IE6</em></p>
<p>Mit dem Code in der Zeile 30 wird den Suchmaschinen signalisiert, dass sie die Auflistung der Suchergebnisse nicht in ihren Suchindex aufnehmen sollen. Das erreiche ich, indem ich nur auf den Suchergebnis-Seiten (<code>is_search();</code>) <code>&lt;meta name="robots" content="noindex, follow" /&gt;</code> einblende. Der Wert <code>noindex</code> bedeutet für die Suchmaschinen, dass sie diesen Inhalt nicht in den Suchindex aufnehmen sollen, und <code>follow</code> bedeutet, dass die Suchmaschinen aber den Links auf dieser Seite folgen können. Willst du für die Suchmaschinen sowohl die Indizierung wie das Folgen verbieten, musst du Folgendes eintragen: <code>&lt;meta name="robots" content="noindex, nofollow" /&gt;</code>.</p>
<div class="beitrag-hinweis"><strong>Tipp:</strong> Viele Webmaster blenden auf den Unterseiten, auf denen die Suchmaschinen den Inhalt indizieren und den Links folgen dürfen, <code>&lt;meta name="robots" content="index, follow" /&gt;</code> ein. Dies ist aber unnötig, da die Werte <code>index</code> und <code>follow</code> bei den Suchrobotern quasi die &#034;Standardeinstellung&#034; sind, bzw. die Suchroboter grasen alle Websites ab, außer sie werden durch <code>noindex</code> und/oder <code>nofollow</code> gestoppt.</div>
<ol class="code-block" start="34">
<li><code>&nbsp;</code></li>
<li><code>&#60;body&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="container"&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;h1 id="kopfbereich"&#62;&#60;a href="/"&#62;Peruns Weblog - Webwork und Internet&#60;/a&#62;&#60;/h1&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;p class="vorstellung"&#62;Ist das private Weblog von &#60;a href="http://www.vlad-design.de"&#62;Vladimir Simovic&#60;/a&#62; mit Berichten zum Thema Webwork und Internet. Ich wohne in K&#246;ln und arbeite als freier Webworker, Blogger und Autor.&#60;/p&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;div id="hauptnavi"&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/"&#60;?php if(is_home() and !is_paged()) echo ' class="aktiv"'; ?&#62; title="Zur&#252;ck zur Startseite"&#62;Start&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/kategorie/artikel/"&#60;?php if(is_category('artikel')) echo ' class="aktiv"'; ?&#62; title="Ausf&#252;hrliche Beitr&#228;ge"&#62;Artikel&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/archiv/"&#60;?php if(is_page('archiv')) echo ' class="aktiv"'; ?&#62; title="Archiv nach Monaten und Tags bzw. Schl&#252;sselw&#246;rtern sortiert."&#62;Archiv&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/links/"&#60;?php if(is_page('links')) echo ' class="aktiv"'; ?&#62;&#62;Links&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/downloads/"&#60;?php if(is_page('downloads')) echo ' class="aktiv"'; ?&#62;&#62;Downloads&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/meine-buecher/"&#60;?php if(is_page('meine-buecher')) echo ' class="aktiv"'; ?&#62; title="B&#252;cher, die ich geschrieben habe"&#62;Meine B&#252;cher&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/impressum/"&#60;?php if(is_page('impressum')) echo ' class="aktiv"'; ?&#62; title="Impressum, Kontaktdaten, Datenschutz und rechtliche Hinweise" style="margin-right: 0;"&#62;Impressum&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #hauptnavi --&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;div id="mittelbereich"&#62;</code></li>
<li><code>&#60;div id="inhalt"&#62;</code></li>
<li><code>&#60;!-- Ende Kopfbereich --&#62;</code></li>
</ol>
<p class="code-titel">Die header.php (2/2)</p>
<p>Nun befinden wir uns in dem sichtbaren Bereich der header.php. Die ersten zehn Zeilen sind reines XHTML. Auf die Verlinkung auf die Startseite durch z. B. <code>get_option('home');</code> habe ich verzichtet, da sich in meinem Fall die WordPress-Installation im Hauptordner befindet und wenn man den Schrägstrich als Ziel des Verweises (<code>&lt;a href="/"&gt;</code>) notiert, kommt man beim Aufruf dieses Verweises automatisch auf die höchste Ebene der Website bzw. auf die Startseite zurück. Wie du bereits schon in der Zeile 40 erkennen könntest, benutze auch ich das <code>hr</code>-Element, um die Bereiche voneinander zu trennen. Mit Hilfe von CSS mache ich dann diese horizontalen Balken unsichtbar.</p>
<p>In den Zeilen 44-52 habe ich <strong>die Hauptnavigation</strong> untergebracht. Die einzelnen Navigationspunkte sind die Seiten bzw. Pages und die einzelnen Listenelemente habe ich mit CSS horizontal ausgerichtet. Wie du siehst, habe ich auch hier auf den Einsatz des zuständigen Template-Tags (<code>wp_list_pages('arguments');</code>) verzichtet, um automatisch die Seiten (Pages) auszugeben. Eigentlich hätte ich auch Folgendes schreiben können:</p>
<ol class="code-block" start="44">
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="/"&#60;?php if(is_home() and !is_paged()) echo ' class="aktiv"'; ?&#62; title="Zur&#252;ck zur Startseite"&#62;Start&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;?php wp_list_pages('title_li=&#038;include=11,12,15,17,22,25&#038;sort_column=menu_order'); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
</ol>
<p class="code-titel">Alternative Schreibweise für die horizontale Navigation</p>
<p>Die Startseite muss man auch hier manuell eingeben, aber die restlichen Seiten würde man dann automatisch von WordPress ausgeben lassen. Mit dem Parameter <code>title_li=</code> würde man die automatische Überschrift für diesen Bereich unterdrücken und durch den Parameter <code>include=</code> werden nur Seiten eingeblendet, die explizit durch die Angabe der ID erwähnt werden. Die Angabe <code>sort_column=menu_order</code> sortiert die einzelnen Seiten in der Reihenfolge, unter der du diese bei &#034;Seite schreiben&#034; &raquo; &#034;Reihenfolge&#034; bestimmt hast.</p>
<p>&#034;Und warum machst du es dann nicht so?!&#034; Das ist eine berechtigte Frage, aber ich habe auch einen berechtigten Grund. Die Punkte in der Hauptnavigation sind sehr wichtig und daher haben sie meiner Meinung nach auch einen ordentlichen und aussagekräftigen Titel verdient. Der Navigationspunkt, der zum Impressum führt, hat folgenden Titel: <code>title="Impressum, Kontaktdaten, Datenschutz und rechtliche Hinweise"</code>. Solche individuellen Inhalte des <code>title</code>-Attributs kann man nur erreichen, indem man die einzelnen Punkte manuell einträgt. Zudem kann ich in der Hauptnavigation, bei der manuellen Notierung, auch einzeln Kategorien unterbringen (z. B. wie jetzt die Kategorie &#034;Artikel&#034;).</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/header-bereich.png' alt='Der "Wirkungsbereich" der header.php' /><br />
<em>Der &#034;Wirkungsbereich&#034; der header.php</em></p>
<h3>3.3	Die Sidebar (sidebar.php)</h3>
<p>Nun schauen wir uns die Sidebar meines Weblogs an. Ich habe an einigen Stellen hier in der sidebar.php den nicht so relevanten Code ausgelassen und die entsprechenden Stellen kann man an den Auslassungszeichen ([...]) erkennen. Das erwähne ich deswegen, damit du dich nicht wunderst, wenn es Sprünge in der Zählung der Code-Zeilen gibt.</p>
<ol class="code-block">
<li><code>&nbsp;</code></li>
<li><code>&#60;!-- begin sidebar --&#62;</code></li>
<li><code>&#60;div id="sidebar"&#62;</code></li>
<li><code>&#60;h2&#62;Abonnieren&#60;/h2&#62;</code></li>
<li><code>&#60;ul class="feed-abos"&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="&#60;?php bloginfo('rss2_url'); ?&#62;" rel="alternate" type="application/rss+xml" title="Beitr&#228;ge als Newsfeed"&#62;Beitr&#228;ge&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="&#60;?php bloginfo('comments_rss2_url'); ?&#62;" title="Die letzten Kommentare als RSS-Feed"&#62;Kommentare&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;h2&#62;&#60;label for="s"&#62;Suchen&#60;/label&#62;&#60;/h2&#62;</code></li>
<li><code>&#60;form id="searchform" method="get" action="&#60;?php bloginfo('url'); ?&#62;/"&#62;</code></li>
<li><code>&#60;div&#62;</code></li>
<li><code>&#60;input name="s" id="s" size="17" type="text" /&#62;</code></li>
<li><code>&#60;input name="submit" value="Suchen" type="submit" class="such-button" /&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;/form&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if(!is_page('meine-buecher')) { ?&#62;</code></li>
<li><code>&#60;h2&#62;Meine B&#252;cher&#60;/h2&#62;</code></li>
<li><code>&#60;div style="float: right; width: 115px;"&#62;</code></li>
<li><code>&#60;p&#62;&#60;a href="/meine-buecher/#css-buch-modernes-webdesign" title="CSS-Buch: modernes Webdesign mit CSS"&#62;&#60;img src="/wp-content/uploads/[...]&#034; alt=&#034;CSS-Buch: modernes Webdesign mit CSS&#034; /&#62;&#60;/a&#62;&#60;br /&#62;</code></li>
<li><code>&#60;a href="/meine-buecher/#css-buch-modernes-webdesign"&#62;Weitere Infos&#60;/a&#62;&#60;/p&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;div style="width: 115px;"&#62;</code></li>
<li><code>&#60;p&#62;&#60;a href="/meine-buecher/#wordpress-buch-einsteigerseminar" title="WordPress-Buch - das Einsteigerseminar"&#62;&#60;img src="/wp-content/uploads/[...]&#034; alt=&#034;WordPress-Buch - das Einsteigerseminar&#034; /&#62;&#60;/a&#62;&#60;br /&#62;</code></li>
<li><code>&#60;a href="/meine-buecher/#wordpress-[...]&#034;&#62;Weitere Infos&#60;/a&#62;&#60;/p&#62;</code></li>
<li><code>&#60;/div&#62;&#60;?php } ?&#62;</code></li>
<li><code>&nbsp;</code></li>
</ol>
<p class="code-titel">Die sidebar.php (1/2)</p>
<p>Wie du in den Zeilen 06 und 07 sehen kannst, habe ich die Links zu den zwei Newsfeeds - Beiträge und Kommentare - ganz oben in der Sidebar untergebracht. Aus meiner persönlichen Erfahrung und aus Gesprächen mit Kollegen ist mir aufgefallen, dass der Verweis zum Newsfeed und die Suchfunktion die wichtigsten &#034;Anlaufstellen&#034; für die Besucher sind: die Feeds, um auf dem Laufenden zu bleiben, und die Suchfunktion, um Beiträge zu finden. Daher ist es sinnvoll, die beiden Funktionen auch prominent zu platzieren.</p>
<p>Unter der Suchfunktion habe ich Abbildungen der Bücher untergebracht, die ich geschrieben habe. Die Grafiken sowie die Links darunter führen auf eine Unterseite mit dem Namen &#034;Meine Bücher&#034;. Daher macht es keinen Sinn, die zwei Buch-Grafiken auch auf dieser Page einzublenden, deswegen kommt die Abfrage in der Zeile 18 (<code>if(!is_page('meine-buecher'))</code>) zum Einsatz.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/sidebar-bereich1.png' alt='Der obere Teil der Sidebar' /><br />
<em>Der obere Teil der Sidebar</em></p>
<ol class="code-block" start="29">
<li><code>&#60;h2&#62;Kategorien&#60;/h2&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php wp_list_categories('orderby=name&#038;show_count=1&#038;title_li=&#038;exclude=20'); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;p style="margin-top: -.8em;"&#62;Die &#60;a href="/archiv/#tag-wolke"&#62;Tag-Wolke&#60;/a&#62; (Tag-Cloud).&#60;/p&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;!-- google_ad_section_start(weight=ignore) --&#62;</code></li>
<li><code>&#60;h2&#62;Weitere Projekte&#60;/h2&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.vlad-design.de"&#62;Meine gesch&#228;ftliche Website&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.herr-der-ringe.ws"&#62;Herr der Ringe-Weblog&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;[...]&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.wordpress-buch.de"&#62;WordPress-Buch&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;h2&#62;Werbung&#60;/h2&#62;</code></li>
<li><code>&#60;ul class="werbelinks"&#62;</code></li>
<li><code>&#60;li&#62;[...]&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>[...]</code></li>
<li><code>&#60;h2&#62;Sonstiges&#60;/h2&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;[... Feedburner-Code für Newsletter ...]&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php wp_register(); ?&#62;</code></li>
<li><code>&#60;li&#62;&#60;?php wp_loginout(); ?&#62;&#60;/li&#62;</code></li>
<li><code>&#60;?php wp_meta(); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;!-- google_ad_section_end --&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- /id="sidebar" --&#62;</code></li>
<li><code>&#60;!-- Ende der Sidebar --&#62;</code></li>
<li><code>&nbsp;</code></li>
</ol>
<p class="code-titel">Die sidebar.php (2/2)</p>
<p>In der Zeile 31 der sidebar.php werden die Kategorien eingeblendet. Sie werden alphabetisch sortiert und es wird die jeweilige Anzahl der Beiträge in den Klammern angegeben. Die Kategorie mit der ID 20 (mit dem Namen &#034;Podcast&#034;) wird in der Sidebar nicht angezeigt, da ich seit Langem keinen Podcast mehr produziert habe, allerdings bleiben die Beiträge aus dieser Kategorie erhalten.</p>
<p>In der Zeile 35 siehst du einen Code-Schnipsel der für dich unbekannt sein könnte: <code>&lt;!-- google_ad_section_start(weight=ignore) --&gt;</code>. Ich schalte momentan in meinem Weblog Google-Werbung. Das Skript, das die Werbung schaltet, untersucht den Inhalt der Website und anhand des Inhaltes wird die passende Werbung in Textform geschaltet. Mit dem Code markiere ich den Anfang des Bereiches, der für die Analyse nicht relevant ist. Die Markierung endet in der Zeile 64 mit <code>&lt;!-- google_ad_section_end --&gt;</code>.</p>
<p>In der Zeile 57 sehen Sie einen langen Code-Abschnitt, der sich in eine einzelne Zeile quetscht. Darin befindet sich der Verweis zu dem <strong>Newsletter-Dienst von Feedburner</strong>. Damit ist es möglich, an Besucher, die sich bei <a href="http://www.feedburner.com">Feedburner</a> registrieren, automatisch einen E-Mail-Newsletter zu verschicken, sobald es im Weblog neue Beiträge gibt.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/sidebar-bereich2.png' alt='Der untere Teil der Sidebar' /><br />
<em>Der untere Teil der Sidebar</em></p>
<h3>3.4	Die Hauptdatei (index.php)</h3>
<ol class="code-block">
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="post-&#60;?php the_ID(); ?&#62;"&#62;</code></li>
<li><code>&#60;h2 class="storytitle"&#62; &#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark" title="Der Verweis (Permalink) zu: &#60;?php the_title(); ?&#62;"&#62;&#60;?php the_title(); ?&#62;&#60;/a&#62;&#60;/h2&#62;</code></li>
<li><code>&#60;div class="beitrags-info"&#62;Von &#60;?php the_author() ?&#62; am &#60;?php the_time('d. F Y'); ?&#62; um &#60;?php the_time('H:i'); ?&#62;&#60;?php edit_post_link('****', '&#60;span&#62;&nbsp;', '&nbsp;&#60;/span&#62;'); ?&#62;&#60;/div&#62;</code></li>
<li><code>&#60;div class="der-beitrag"&#62;</code></li>
<li><code>&#60;?php the_content('(weiterlesen...)'); ?&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- Ende des jeweiligen Beitrages --&#62;</code></li>
<li><code>&#60;div class="feedback"&#62;</code></li>
<li><code>&#60;?php wp_link_pages(); ?&#62;</code></li>
<li><code>&#60;?php comments_popup_link('Kommentare (0)', 'Kommentare (1)', 'Kommentare (%)'); ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- Ende des Bereiches um den jeweiligen Beitrag --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php comments_template();  /* Kommentar-Template wird eingebunden */ ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endwhile; else: ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid! Es wurde kein passender Beitrag gefunden.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;?php</code></li>
<li><code>if (function_exists('wp_pagebar')) {</code></li>
<li><code>wp_pagebar(array('before'=&#62;'', 'tooltip_text'=&#62;'Seite', 'next'=&#62;'&raquo;', 'prev'=&#62;'&laquo;'));</code></li>
<li><code>}</code></li>
<li><code>else { ?&#62;</code></li>
<li><code>&#60;p class="pagination"&#62;&#60;?php posts_nav_link('&nbsp;&ndash;&nbsp;', __('&laquo; Zur&#252;ckbl&#228;ttern'), __('Weiterbl&#228;ttern &raquo;')); ?&#62;&#60;/p&#62;</code></li>
<li><code>&#60;?php } ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
</ol>
<p class="code-titel">Die index.php</p>
<p>Im Großen und Ganzen ist in der index.php nichts Neues bzw. Unbekanntes hinzugekommen. Ich habe die Meldungen (z. B. <q>kein passender Beitrag gefunden</q>) alle direkt eingedeutscht, so dass ein Zugriff auf die deutsche Sprachdatei hier nicht notwendig ist. Eine Ausnahme gibt es und zwar in den Zeilen 24 und 25. Anstatt der üblichen &#034;Weiterblättern&#034;-Funktion habe ich ein Plugin installiert und hier eingebunden. Das Plugin heißt Pagebar und es listet am Ende der Seite die Folgeseiten auf.</p>
<p>In der Zeile 24 sieht man, wie man <strong>ein Plugin richtig einbauen</strong> sollte. Man fragt ab, ob das Plugin vorhanden bzw. aktiviert ist (<code>if (function_exist('plugin_name')</code>), und wenn ja, dann soll es seine Wirkung entfalten. Diese Abfrage ist sehr nützlich. Sollte es aus irgendwelchen Gründen passieren, dass das Plugin nicht aktiv ist, wird die Website nicht in Mitleidenschaft gezogen und es kommt zu keinen hässlichen Fehlermeldungen.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/index-bereich.png' alt='Die index.php im Einsatz' /></p>
<p>In der oberen Abbildung siehst du die Auswirkungen der Hauptdatei des Themes (index.php) und speziell im unteren Bereich die Pagebar. Und das war es dann so weit mit der index.php - eigentlich kurz und schmerzlos.</p>
<h3>3.5	Die Kategorieübersicht (category.php)</h3>
<p>Die category.php ist zuständig für die Auflistung aller Beiträge, die einer Kategorie zugewiesen sind.</p>
<ol class="code-block">
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if(is_category()) { ?&#62;&#60;h2&#62;Die Kategorie "&#60;?php single_cat_title(''); ?&#62;"&#60;/h2&#62;</code></li>
<li><code>&#60;div class="kategorie-info"&#62;&#60;p&#62;Hier sind alle Beitr&#228;ge aufgelistet, die in die Kategorie &#60;strong&#62;&#60;?php single_cat_title(''); ?&#62;&#60;/strong&#62; einsortiert wurden. Die Beschreibung dieser Kategorie lautet: "&#60;em&#62;&#60;?php echo category_description($cat); ?&#62;&#60;/em&#62;". Du hast die M&#246;glichkeit, den &#60;a href="&#60;?php echo get_category_link($cat);?&#62;feed/" class="fett"&#62;RSS-Feed&#60;/a&#62; speziell nur f&#252;r diese Kategorie zu abonnieren.&#60;/p&#62;&#60;/div&#62;&#60;?php } ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="post-&#60;?php the_ID(); ?&#62;"&#62;</code></li>
<li><code>&#60;h2 class="storytitle"&#62;&#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark"&#62;&#60;?php the_title(); ?&#62;&#60;/a&#62;&#60;/h2&#62;</code></li>
<li><code>&#60;div class="beitrags-info"&#62;Von &#60;?php the_author() ?&#62; am &#60;?php the_time('d. F Y'); ?&#62; um &#60;?php the_time('H:i'); ?&#62;&#60;?php edit_post_link('****', '&#60;span&#62;&nbsp;', '&nbsp;&#60;/span&#62;'); ?&#62;&#60;/div&#62;</code></li>
<li><code>&#60;div class="der-beitrag"&#62;</code></li>
<li><code>&#60;?php the_content('(weiterlesen...)'); ?&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- Ende des jeweiligen Beitrags --&#62;</code></li>
<li><code>&#60;div class="feedback"&#62;</code></li>
<li><code>&#60;?php wp_link_pages(); ?&#62;</code></li>
<li><code>&#60;?php comments_popup_link('Kommentare (0)', 'Kommentare (1)', 'Kommentare (%)'); ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- Ende des Bereiches um den jeweiligen Beitrag --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php comments_template();  /* Kommentar-Template */ ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endwhile; else: ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid, es wurde kein passender Beitrag gefunden.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;?php</code></li>
<li><code>if (function_exists('wp_pagebar')) {</code></li>
<li><code>wp_pagebar(array('before'=&#62;'', 'tooltip_text'=&#62;'Seite', 'next'=&#62;'&raquo;', 'prev'=&#62;'&laquo;'));</code></li>
<li><code>}</code></li>
<li><code>else { ?&#62;</code></li>
<li><code>&#60;p class="pagination"&#62;&#60;?php posts_nav_link('&nbsp;&ndash;&nbsp;', __('&laquo; Zur&#252;ckbl&#228;ttern'), __('Weiterbl&#228;ttern &raquo;')); ?&#62;&#60;/p&#62;</code></li>
<li><code>&#60;?php } ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
</ol>
<p class="code-titel">Die category.php</p>
<p>Du hast es schon richtig erkannt, die category.php ist eine fast exakte Kopie der index.php. Der Unterschied liegt in den Zeilen 03 und 04. Obwohl wir uns in einer Kategorieübersicht befinden, stelle ich eine Abfrage, um festzustellen, ob wir uns innerhalb einer Kategorie befinden - das klingt nicht sehr logisch. Das kommt deswegen zustande, weil ich den Code in den Zeilen 03 und 04 nur in einer Kategorieübersicht anzeigen möchte. Aber WordPress setzt die category.php auch bei einer Tag-Übersicht ein - also auch bei der Auflistung aller Beiträge, die unter einem bestimmten Tag gelistet sind. Dort wollte ich allerdings die Meldung (siehe nächste Abbildung) nicht angezeigt haben. In der unteren Abbildung siehst du die category.php im Einsatz.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/kategorie-bereich.png' alt='Die Kategorie-Übersicht' /><br />
<em>Ausschnitt: Kategorie-Übersicht</em></p>
<p>Auch wenn in der category.php wenig Neues hinzugekommen ist, hast du dennoch drei neue Sachen gelernt:</p>
<ul>
<li><code>single_cat_title('');</code> gibt den Titel der jeweiligen Kategorie aus.</li>
<li><code>category_description();</code> gibt die Beschreibung einer Kategorie aus.</li>
<li>Die Variable <code>$cat</code> gibt die ID der aktuellen Kategorie aus.</li>
</ul>
<h3>3.6	Die Einzelansicht (single.php)</h3>
<p>Die single.php wird von WordPress immer dann aufgerufen, wenn der einzelne Beitrag angezeigt werden soll. Ist diese Template-Datei nicht vorhanden, greift das System auf die index.php zurück.</p>
<ol class="code-block">
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="post-&#60;?php the_ID(); ?&#62;"&#62;</code></li>
<li><code>&#60;h2 class="storytitle"&#62;&#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark"&#62;&#60;?php the_title(); ?&#62;&#60;/a&#62;&#60;/h2&#62;</code></li>
<li><code>&#60;div class="beitrags-info"&#62;Tags: &#60;?php if (function_exists('STP_PostTags')) {?&#62; &#60;?php STP_PostTags(); ?&#62;&#60;?php } else{echo"Die Funktion ist deaktiviert.";} ?&#62; &#60;?php edit_post_link('****', '&#60;span&#62;&nbsp;&nbsp;', '&#60;/span&#62;'); ?&#62;&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="google-anzeige"&#62;</code></li>
<li><code>[Code f&#252;r Google-Anzeigen]</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="der-beitrag"&#62;</code></li>
<li><code>&#60;?php the_content(__('(more...)')); ?&#62;</code></li>
<li><code>&#60;?php wp_link_pages(); ?&#62;</code></li>
<li><code>&#60;?php if (class_exists('SimpleTagging')) : ?&#62;</code></li>
<li><code>&#60;h3&#62;Verwandte Beitr&#228;ge&#60;/h3&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php STP_RelatedPosts(); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- Ende des jeweiligen Beitrages --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="beitrags-info2"&#62;</code></li>
<li><code>&#60;p&#62;Dieser Beitrag wurde am &#60;?php the_time('l, d. F Y'); ?&#62; um &#60;?php the_time('H:i'); ?&#62; Uhr ver&#246;ffentlicht und wurde unter der Kategorie &#60;?php the_category(', ') ?&#62; abgelegt. Du kannst die Kommentare zu diesem Eintrag durch den &#60;?php comments_rss_link('RSS-Feed'); ?&#62; verfolgen. &#60;?php if (('open' == $post-&#62; comment_status) &#038;&#038; ('open' == $post-&#62;ping_status)) { ?&#62;Du hast die M&#246;glichkeit, einen &#60;a href="#comments"&#62;Kommentar&#60;/a&#62; zu hinterlassen oder einen &#60;a href="./trackback/"&#62;Trackback&#60;/a&#62; von deinem Weblog zu senden.&#60;?php } ?&#62;&#60;?php if (('open' == $post-&#62; comment_status) &#038;&#038; !('open' == $post-&#62;ping_status)) {?&#62;Du hast die M&#246;glichkeit, einen &#60;a href="#respond"&#62;Kommentar&#60;/a&#62; zu hinterlassen.&#60;?php } ?&#62; &#60;/p&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p class="pagination"&#62;&#60;?php previous_post_link('%link','&laquo; Zum vorherigen Beitrag'); ?&#62;&nbsp;&ndash;&nbsp;&#60;?php next_post_link('%link','Zum n&#228;chsten Beitrag &raquo;'); ?&#62;&#60;/p&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php comments_template();  /*Get wp-comments.php template*/ ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endwhile; else: ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid, es wurde kein passender Beitrag gefunden.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
</ol>
<p class="code-titel">Die single.php</p>
<p>Bis einschließlich Zeile 06 ist alles schon bekannter Code. In der Zeile 07 wird abgefragt, ob das Tagging-Plugin (<a href="http://trac.herewithme.fr/project/simpletagging/">Simple Tagging</a>) vorhanden ist, wenn nicht, soll die Meldung &#034;Die Funktion ist deaktiviert&#034; ausgegeben werden. Wenn das Plugin aktiv ist, werden an dieser Stelle die Tags/Schlagwörter ausgegeben. Wer hier z. B. die Tags aus der in WordPress eingebauter Tagging-Funktion einbinden will der greift auf die speziell dafür erstellten Template-Tags: (<code>the_tags();</code>).</p>
<p>In den Zeilen 16-21 wird das Plugin Simple Tagging noch einmal eingebunden und diesmal werden die <strong>verwandten Beiträge</strong> ausgegeben. Das Plugin untersucht, ob der Beitrag getaggt ist und ob es Beiträge gibt, die das gleiche Tag zugewiesen bekommen haben. Wenn ja, werden die jeweiligen Beiträge aufgelistet. In der grafischen Benutzeroberfläche des Plugins kann man bestimmen, wie viele Links aufgelistet werden und in welcher Form die Auflistung stattfinden soll.</p>
<p>In den Zeilen 24-26 der sidebar.php siehst du unter dem jeweiligen Beitrag eine <strong>Informationsbox</strong>. In dieser Box erfährt der Leser, wann der Beitrag veröffentlicht und in welcher Kategorie er abgelegt wurde. Zusätzlich bekommt er den Link zu dem Kommentar-Feed des jeweiligen Beitrages, den Verweis zum Kommentarformular und den Link zu der Trackback-URL zu sehen. Dort siehst du auch, wie man im Code abfragt, ob die Kommentar- und Pingfunktion aktiv ist.</p>
<p>In der Zeile 28 ist die &#034;Weiterblättern&#034;-Funktion untergebracht. Mit dieser springt man zum nächsten bzw. vorherigen Beitrag. Damit unterscheidet sich diese Funktion von der auf den Übersichtsseiten - wo man seitenweise blättert.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/single-bereich.png' alt='Ein einzelner Beitrag aus meinem Weblog' /><br />
<em>Ein einzelner Beitrag aus meinem Weblog</em></p>
<h3>9.7	Das Seiten-Template (page.php)</h3>
<ol class="code-block">
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="post-&#60;?php the_ID(); ?&#62;"&#62;</code></li>
<li><code>&#60;h2&#62;&#60;?php the_title(); ?&#62;&#60;/h2&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="der-beitrag"&#62;</code></li>
<li><code>&#60;?php the_content('(weiterlesen...)'); ?&#62;</code></li>
<li><code>&#60;?php edit_post_link('****', '&#60;div&#62;', '&#60;/div&#62;'); ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endwhile; else: ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid, es wurde kein passender Beitrag gefunden.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
</ol>
<p class="code-titel">Die page.php</p>
<p>Das Haupt-Seiten-Template (page.php) ist sehr übersichtlich geworden und hierzu kann ich nicht viel mehr sagen, außer dass diese Template-Datei zum Einsatz kommt, wenn Seiten (Pages) ausgegeben werden. Ist diese Datei nicht vorhanden, greift das System auf die index.php zurück.</p>
<h3>3.8	Die Archiv-Unterseite (archiv.php)</h3>
<p>Die archiv.php ist eine Template-Datei, die nicht zum offiziellen Theme-Umfang gehört - im Gegensatz zur archives.php. Diese Datei wird auf den Seiten eingesetzt, wo man sie als Seiten-Template auch bestimmt hat: &#034;Seite schreiben&#034; &raquo; &#034;Seiten-Template&#034;. Ich habe diese Datei erstellt, um das ausgelagerte Archiv besser präsentieren zu können.</p>
<ol class="code-block">
<li><code>&#60;?php</code></li>
<li><code>/*</code></li>
<li><code>Template Name: Archiv</code></li>
<li><code>*/</code></li>
<li><code>?&#62;</code></li>
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="post-&#60;?php the_ID(); ?&#62;"&#62;&#60;h2&#62;&#60;?php the_title(); ?&#62;&#60;/h2&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="der-beitrag"&#62;</code></li>
<li><code>&#60;?php the_content('(weiterlesen...)'); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (class_exists('SimpleTagging')) : ?&#62;</code></li>
<li><code>&#60;ul class="tag-wolke"&#62;</code></li>
<li><code>&#60;?php STP_Tagcloud(); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="archiv-liste1"&#62;</code></li>
<li><code>&#60;h3&#62;Das Monatsarchiv&#60;/h3&#62;</code></li>
<li><code>&#60;ol&#62;</code></li>
<li><code>&#60;?php wp_get_archives('type=monthly&#038;show_post_count=1'); ?&#62;</code></li>
<li><code>&#60;/ol&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="archiv-liste2"&#62;</code></li>
<li><code>&#60;h3&#62;Die letzten 25 Beitr&#228;ge&#60;/h3&#62;</code></li>
<li><code>&#60;ol&#62;</code></li>
<li><code>&#60;?php wp_get_archives('type=postbypost&#038;limit=25&#038;format=html'); ?&#62;</code></li>
<li><code>&#60;/ol&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php edit_post_link('****', '&#60;div&#62;', '&#60;/div&#62;'); ?&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- Ende von .der-beitrag --&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- Ende von #post --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endwhile; else: ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid, es wurde kein passender Beitrag gefunden.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
</ol>
<p class="code-titel">Das Archiv (archiv.php)</p>
<p>Anhand der ersten vier Zeilen erkennt WordPress, dass es sich hier um ein Seiten-Template mit dem Namen Archiv handelt. Dieser Name wird auch in der Auswahlliste (&#034;Seiten-Template&#034;) angezeigt.</p>
<p>Mit dem Code in den Zeilen 15-19 wird später die <strong>Tag-Wolke</strong> ausgegeben. Bei einer Tag-Wolke werden die eingesetzten Tags aufgelistet und je öfter ein Tag eingesetzt wurde, umso größer wird es ausgegeben. Hierbei wird wieder auf die Hilfe des Simple-Tagging-Plugins zurückgegriffen.</p>
<p>In den Zeilen 21-26 ist der zuständige Code, der später das <strong>Monatsarchiv</strong> ausgibt. Durch <code>wp_get_archives('type=monthly&#038;show_post_count=1');</code> werden die Links zu den jeweiligen Monatsübersichten aufgelistet und neben jedem Monat wird auch noch die Anzahl der Beiträge im jeweiligen Zeitraum angezeigt.</p>
<p>In den Zeilen 28-33 der archiv.php befindet sich der Code für die zweite Archiv-Liste. Durch <code>wp_get_archives('type=postbypost&#038;limit=25&#038;format=html');</code> werden die verlinkten <strong>Überschriften der 25 letzten Beiträge</strong> aufgelistet. Wie du siehst, wird hier zwei Mal hintereinander das gleiche Template-Tag eingesetzt, allerdings mit verschiedenen Parametern. Durch <code>type=postbypost</code> werden die einzelnen Beiträge aufgelistet, durch <code>limit=25</code> wird die Anzahl der auszugebenden Beiträge bestimmt und durch <code>format=html</code> bestimmt man, dass die einzelnen Einträge als separate Listenpunkte (<code>&lt;li&gt;...&lt;/li&gt;</code>)  ausgegeben werden.</p>
<p>Wenn ich eine neue Seite erstelle und dieser das Seiten-Template archiv.php zuweise, bekommt sie automatisch Inhalte und zwar die Tag-Wolke und die beiden Listen-Archive. Darüber hinaus kann ich, wenn ich mag oder es notwendig sein sollte, auch einen Text unterbringen. Da sich dieser öfter ändern könnte, habe ich mich dafür entschieden, diesen Text aus dem Admin-Menü pflegen zu können, und habe daher das Template-Tag <code>the_content('(weiterlesen...)');</code> in der Zeile 13 untergebracht. Hier die Abbildung eines Teiles des Archivs:</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/archiv-bereich.png' alt='Archiv-Ausschnitt' /><br />
<em>Archiv-Ausschnitt</em></p>
<h3>3.9	Der Kommentarbereich (comments.php)</h3>
<ol class="code-block">
<li><code>&#60;hr /&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))</code></li>
<li><code>die ('Bitte nicht die Seite direkt aufrufen. Vielen Dank!'); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if ( !empty($post-&#62;post_password) &#038;&#038; $_COOKIE['wp-postpass_' . COOKIEHASH] != $post-&#62;post_password) : ?&#62;</code></li>
<li><code>&#60;p&#62;Auch die Kommentare sind durch das Passwort gesch&#252;tzt.&#60;/p&#62;</code></li>
<li><code>&#60;?php return; endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;h2 id="comments"&#62;&#60;?php comments_number('Keine Kommentare', 'Ein Kommentar', '% Kommentare'); ?&#62;</code></li>
<li><code>&#60;?php if ( comments_open() ) : ?&#62;</code></li>
<li><code>&#60;a href="#postcomment" title="Einen Kommentar hinterlassen"&#62;&raquo;&raquo;&#60;/a&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&#60;/h2&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if ( $comments ) : ?&#62;</code></li>
<li><code>&#60;ol id="commentlist"&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php /*foreach ($comments as $comment) :*/ ?&#62;</code></li>
<li><code>&#60;?php $count = 0; foreach ($comments as $comment): $count++; ?&#62;</code></li>
<li><code>&#60;li id="comment-&#60;?php comment_ID() ?&#62;" class="kommentare&#60;?php global $comment; if ( ($comment-&#62;comment_author_email == get_the_author_email()) &#038;&#038; ($comment-&#62;user_id != 0) ) { echo " mein-kommentar"; } ?&#62;"&#62;</code></li>
<li><code>&#60;h3&#62;&#60;a href="#comment-&#60;?php comment_ID() ?&#62;" class="kommentar-zaehler"&#62;&#60;?php echo $count; ?&#62;.&#60;/a&#62; &ndash; &#60;?php comment_author_link() ?&#62;&#60;?php edit_comment_link(__("***"), '&nbsp;'); ?&#62;&#60;/h3&#62;</code></li>
<li><code>&#60;p class="kommentar-info"&#62;&#60;em&#62;&#60;?php comment_type('Kommentar', 'Trackback', 'Pingback'); ?&#62; vom &#60;?php comment_date('d. F Y') ?&#62; um &#60;?php comment_time() ?&#62;&#60;/em&#62;&#60;/p&#62;</code></li>
<li><code>&#60;?php comment_text() ?&#62; /* Der eigentliche Kommentar-Text */</code></li>
<li><code>&#60;?php if ($comment-&#62;comment_approved == '0') { echo "&#60;p&#62;[Dein Kommentar wartet auf Freischaltung.]&#60;/p&#62;&#034;; } ?&#62;</code></li>
<li><code>&#60;/li&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endforeach; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/ol&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php else : // Wenn es noch keine Kommentare gibt ?&#62;</code></li>
<li><code>&#60;p&#62;Bis jetzt gibt es noch keine Kommentare.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
</ol>
<p class="code-titel">Die comments.php (1/2)</p>
<p>Am Anfang der comments.php gibt es wenig Neues. In den Zeilen 03 und 04 wird der direkte Aufruf der comments.php verhindert. In den Zeilen 06-08 wird geprüft, ob der Beitrag geschützt ist und ob der Besucher bereits eingeloggt ist. In der Zeile 16 beginnt, wenn Kommentare vorhanden sind, die Ausgabe der abgegebenen Kommentare.</p>
<p>Allerdings habe ich in diesem Bereich eine kleine Änderung eingefügt. In der Zeile 19 sieht man den ursprünglichen Code, dieser ist auskommentiert und daher nicht wirksam. Ich habe ihn trotzdem in der Datei gelassen, um hier den Unterschied aufzuzeigen und für mich als Gedächtnisstütze. Der Code aus der Zeile 19 wird durch den Code aus der Zeile 20 abgelöst. Und was besagt der folgende Code: <code>$count = 0; foreach ($comments as $comment): $count++;</code>? WordPress setzt den Zähler auf Null und für jeden Kommentar, der abgegeben wird, soll der Zähler um eins erhöht werden und die Zahl wird in der Variablen <code>$count</code> gespeichert, damit man den Wert an einer <strong>anderen</strong> Stelle innerhalb dieser Datei ausgeben kann (siehe den drtittnächsten Absatz). </p>
<p>In der Zeile 21 der comments.php siehst du den Anfang des Listen-Elements, in dem das komplette Kommentarkonstrukt untergebracht ist: Name des Autors, Datum und der eigentliche Kommentarinhalt. Jeder Kommentar bzw. jedes Listen-Element bekommt automatisch das Klassen-Attribut mit dem Wert kommentare zugewiesen. Darüber hinaus wird geprüft, ob die E-Mail-Adresse des Kommentators und die E-Mail-Adresse des Autors gleich sind. Sind sie identisch, dann wird dem Klassen-Attribut zusätzlich noch der Wert <code>mein-beitrag</code> zugewiesen. Somit hat man die Möglichkeit, mit Hilfe von CSS die Kommentare, die von den Autoren des jeweiligen Beitrages stammen, extra zu kennzeichnen. Ich habe diesen Kommentaren ein extra Kommentarbild zugewiesen.</p>
<p>Dadurch, dass die einzelnen Kommentare als Listenpunkte einer nummerierten Liste ausgegeben werden, findet eine Nummerierung automatisch statt. Das Problem an dieser Nummerierung ist allerdings, dass man die Zählung oder besser ausgedrückt die Nummern der Zählung nicht großartig im designtechnischen Sinne beeinflussen kann. Ein Beispiel für so eine Beeinflussung ist, wenn man die Zahlen in eine andere Ecke positionieren möchte.</p>
<p>Daher muss man eine eigene Zählung vornehmen &#8230; und du erinnerst dich in diesem Zusammenhang an unseren in der Zeile 19 bereits initiierten Zähler (<code>$count</code>). In der Zeile 22 siehst du, wie dieser Zähler eingebunden und ausgegeben wird.</p>
<p>In der Zeile 23 der comments.php steht folgender Code: <code>comment_type('Kommentar', 'Trackback', 'Pingback');</code>. Je nachdem, ob es sich bei dem Kommentar um einen wirklichen Kommentar (erster Wert), einen Trackback (zweiter Wert) oder Pingback (dritter Wert) handelt, wird der entsprechende Text ausgegeben. Du kannst die drei Werte selbstverständlich auch individualisieren.</p>
<p>Hier eine Abbildung, bei der exemplarisch drei Kommentare aufgelistet werden. Anhand des Icons (Foto) im dritten Kommentar erkennt man, dass dieser Kommentar von mir, also dem Autor des Beitrages, stammt.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/kommentar-bereich.png' alt='Die Auflistung der Kommentare (Ausschnitt)' /><br />
<em>Ausschnitt: Die Auflistung der Kommentare</em></p>
<p>Nun schauen wir uns den zweiten Teil der comments.php an:</p>
<ol class="code-block" start="36">
<li><code>&#60;?php if ( comments_open() ) : ?&#62;</code></li>
<li><code>&#60;h2 id="postcomment"&#62;Einen Kommentar hinterlassen&#60;/h2&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if ( get_option('comment_registration') &#038;&#038; !$user_ID ) : ?&#62;</code></li>
<li><code>&#60;p&#62;Du musst &#60;a href="&#60;?php echo get_option('siteurl'); ?&#62;/wp-login.php?redirect_to=&#60;?php the_permalink(); ?&#62;"&#62;dich einloggen,&#60;/a&#62; um kommentieren zu k&#246;nnen.&#60;/p&#62;</code></li>
<li><code>&#60;?php else : ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;form action="&#60;?php echo get_option('siteurl'); ?&#62;/wp-comments-post.php" method="post" id="commentform"&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if ( $user_ID ) : ?&#62;</code></li>
<li><code>&#60;p&#62;Eingeloggt als &#60;a href="&#60;?php echo get_option('siteurl'); ?&#62;/wp-admin/profile.php"&#62;&#60;?php echo $user_identity; ?&#62;&#60;/a&#62;. &#60;a href="&#60;?php echo get_option('siteurl'); ?&#62;/wp-login.php?action=logout" title="&#60;?php _e('Log out of this account') ?&#62;"&#62;Logout &raquo;&#60;/a&#62;&#60;/p&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php else : ?&#62;</code></li>
<li><code>&#60;p&#62;&#60;input type="text" name="author" id="author" value="&#60;?php echo $comment_author; ?&#62;" size="25" tabindex="1" /&#62;</code></li>
<li><code>&#60;label for="author"&#62;&#60;small&#62;Name &#60;?php if ($req) _e('(required)'); ?&#62;&#60;/small&#62;&#60;/label&#62;&#60;/p&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p&#62;&#60;input type="text" name="email" id="email" value="&#60;?php echo $comment_author_email; ?&#62;" size="25" tabindex="2" /&#62;</code></li>
<li><code>&#60;label for="email"&#62;&#60;small&#62;Mail (wird nicht ver&#246;ffentlicht) &#60;?php if ($req) _e('(required)'); ?&#62;&#60;/small&#62;&#60;/label&#62;&#60;/p&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p&#62;&#60;input type="text" name="url" id="url" value="&#60;?php echo $comment_author_url; ?&#62;" size="25" tabindex="3" /&#62;</code></li>
<li><code>&#60;label for="url"&#62;&#60;small&#62;Website&#60;/small&#62;&#60;/label&#62;&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p&#62;&#60;small&#62;&#60;strong&#62;XHTML&#60;/strong&#62; (folgende Tags sind erlaubt): &#60;code&#62;&#60;?php echo allowed_tags(); ?&#62;&#60;/code&#62;. Kommentar-Vorschau ist aktiviert (JavaScript wird ben&#246;tigt).&#60;/small&#62;&#60;/p&#62;</code></li>
<li><code>&#60;p&#62;&#60;small&#62;&#60;strong&#62;Code-Beispiele:&#60;/strong&#62; Damit die Code-Beispiele richtig angezeigt werden, m&#252;ssen die Sonderzeichen maskiert werden (z. B. &#60;code&#62;&lt;&#60;/code&#62; zu &#60;code&#62;&amp;lt;&#60;/code&#62;).&#60;/small&#62;&#60;/p&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p&#62;&#60;textarea name="comment" id="comment" cols="50" rows="12" tabindex="4"&#62;&#60;/textarea&#62;&#60;/p&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p&#62;&#60;input name="submit" type="submit" id="submit" tabindex="5" value="Kommentar abschicken" /&#62;</code></li>
<li><code>&#60;input type="hidden" name="comment_post_ID" value="&#60;?php echo $id; ?&#62;" /&#62;&#60;/p&#62;</code></li>
<li><code>&#60;?php do_action('comment_form', $post-&#62;ID); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/form&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endif; // If registration required and not logged in ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php else : // Comments are closed ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid, aber momentan ist die Kommentarfunktion deaktiviert.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
</ol>
<p class="code-titel">Die comments.php (2/2)</p>
<p>Der zweite Teil der comments.php dürfte aus dem zweiten Teil des Artikel-Serie bekannt vorkommen. Ich habe diesen Bereich nur in Details verändert, zum Beispiel, indem ich die Text-Meldungen eingedeutscht und im Bereich des Kommentarformulars zwei Hinweise eingefügt habe (Zeile 59 und 60).</p>
<p>Und hier die Abbildung des Kommentarformulars aus der Sicht eines nicht-eingeloggten Besuchers:</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/kommentarformular-bereich.png' alt='Das Kommentarformular' /></p>
<p>In der oberen Abbildung siehst du vier Elemente, die im Code der comments.php gar nicht vorkommen. Zum einen wäre dies die Quicktag-Leiste, damit die Kommentatoren auch ihren Text formatieren können, darunter die Smiley-Leiste, die Live-Vorschau und ganz unten die Benachrichtigungsfunktion. Diese Elemente werden durch Plugins automatisch eingefügt und hier zeigt sich noch einmal, wie wichtig die (Template-)Hooks sind. Der Hook <code>do_action('comment_form', $post->ID);</code> aus der Zeile 66 dient diesen Plugins zur Orientierung.</p>
<h3>3.10 Die Ausgabe der Suchergebnisse (search.php)</h3>
<p>Die Ausgabe der Suchergebnisse ist im Grunde genommen ein Klon der category.php (Listing 9.8):</p>
<ol class="code-block">
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;h2&#62;Deine Suche nach "&#60;?php the_search_query(); ?&#62;"&#60;/h2&#62;</code></li>
<li><code>&#60;div class="kategorie-info"&#62;&#60;p&#62;Falls deine Suche nach &#60;strong&#62;&#60;?php the_search_query(); ?&#62;&#60;/strong&#62; kein oder kein zufriedenstellendes Ergebnis geliefert hat, dann versuche es im &#60;strong&#62;&#60;a href="/archiv/"&#62;Archiv&#60;/a&#62;&#60;/strong&#62;. Dort findest du eine Tag-Wolke, ein Monatsarchiv und eine Auflistung der 25 letzten Beitr&#228;ge.&#60;/p&#62;&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="post-&#60;?php the_ID(); ?&#62;"&#62;</code></li>
<li><code>&#60;h2 class="storytitle"&#62;&#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark"&#62;&#60;?php the_title(); ?&#62;&#60;/a&#62;&#60;/h2&#62;</code></li>
<li><code>&#60;div class="beitrags-info"&#62;Von &#60;?php the_author() ?&#62; am &#60;?php the_time('d. F Y'); ?&#62; um &#60;?php the_time('H:i'); ?&#62;&#60;?php edit_post_link('****', '&#60;span&#62;&nbsp;', '&nbsp;&#60;/span&#62;'); ?&#62;&#60;/div&#62;</code></li>
<li><code>&#60;div class="der-beitrag"&#62;</code></li>
<li><code>&#60;?php the_excerpt(); ?&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- Ende des jeweiligen Beitrags --&#62;</code></li>
<li><code>&#60;div class="feedback"&#62;</code></li>
<li><code>&#60;?php wp_link_pages(); ?&#62;</code></li>
<li><code>&#60;?php comments_popup_link('Kommentare (0)', 'Kommentare (1)', 'Kommentare (%)'); ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;/div&#62; &#60;!-- Ende des Bereiches um den jeweiligen Beitrag --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php comments_template();  /* Kommentar-Template */ ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php endwhile; else: ?&#62;</code></li>
<li><code>&#60;p&#62;Tut mir leid, es wurde kein passender Beitrag gefunden.&#60;/p&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;?php</code></li>
<li><code>if (function_exists('wp_pagebar')) {</code></li>
<li><code>wp_pagebar(array('before'=&#62;'', 'tooltip_text'=&#62;'Seite', 'next'=&#62;'&raquo;', 'prev'=&#62;'&laquo;'));</code></li>
<li><code>}</code></li>
<li><code>else { ?&#62;</code></li>
<li><code>&#60;p class="pagination"&#62;&#60;?php posts_nav_link('&nbsp;&ndash;&nbsp;', __('&laquo; Zur&#252;ckbl&#228;ttern'), __('Weiterbl&#228;ttern &raquo;')); ?&#62;&#60;/p&#62;</code></li>
<li><code>&#60;?php } ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
</ol>
<p class="code-titel">Die search.php</p>
<p>Die einzigen Änderungen gegenüber der category.php sind die Entfernung der Abfrage (<code>is_category</code>), logischerweise die Anpassung der Meldung innerhalb der farblich hervorgehobenen Box und anstatt der kompletten Beiträge (<code>the_content();</code>) werden die angezeigten Beiträge nur auszugsweise (<code>the_excerpt();</code>) dargestellt. Dieses Template-Tag zeigt entweder die selbst verfasste Kurzfassung des Beitrags (&#034;Beitrag schreiben&#034; &raquo; &#034;Optionale Kurzfassung&#034;) oder es werden die ersten 50 Wörter des Beitrages angezeigt. Dies ist die Standardeinstellung und sie kann nur geändert werden, wenn man tief in dem Code von WordPress wühlt, wobei Bilder und Formatierungen ignoriert werden und somit nur der einfache Text (engl. plain Text) angezeigt wird.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/suche-bereich.png' alt='Die Ausgabe der Suchergebnisse' /><br />
<em>Ausschnitt: Die Ausgabe der Suchergebnisse</em></p>
<h3>3.11 Der Fußbereich (footer.php)</h3>
<p>Ich habe für dieses Weblog die footer.php erweitert und im Fußbereich auch Informationen untergebracht, die klassischerweise nicht unbedingt hierher gehören. Hier der Code:</p>
<ol class="code-block">
<li><code>&#60;!-- Beginn footer.php --&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #mittelbereich --&#62;</code></li>
<li><code>&#60;hr /&#62;</code></li>
<li><code>&#60;div id="footer"&#62;</code></li>
<li><code>&#60;div id="footer-bereich1"&#62;</code></li>
<li><code>&#60;h2&#62;Kommentare&#60;/h2&#62;&#60;?php if (function_exists('get_recent_comments')) { ?&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php get_recent_comments(); ?&#62;</code></li>
<li><code>&#60;/ul&#62;&#60;?php } ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="footer-bereich2"&#62;&#60;?php if(!is_single()) { ?&#62;</code></li>
<li><code>&#60;h2&#62;Ping-/Trackbacks&#60;/h2&#62;&#60;?php if (function_exists('get_recent_trackbacks')) { ?&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php get_recent_trackbacks(); ?&#62;</code></li>
<li><code>&#60;/ul&#62;&#60;?php } ?&#62;&#60;?php } ?&#62;</code></li>
<li><code>&#60;?php if(is_single()) { ?&#62;</code></li>
<li><code>&#60;h2&#62;Neueste Beitr&#228;ge&#60;/h2&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php wp_get_archives('type=postbypost&#038;limit=5&#038;format=html'); ?&#62;</code></li>
<li><code>&#60;li style="margin-top: -5px;"&#62;&#60;a href="/archiv/"&#62;Zum Archiv &raquo;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;&#60;?php } ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div id="footer-bereich3"&#62;</code></li>
<li><code>&#60;h2&#62;Bisschen Statistik&#60;/h2&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;Online seit: 15. 01. 04&#60;/li&#62;</code></li>
<li><code>&#60;?php if (function_exists('GeneralStatsComplete')) { GeneralStatsComplete(); } ?&#62;</code></li>
<li><code>&#60;li class="bild-verweis"&#62;&#60;a href="http://feeds.feedburner.com/peruns-weblog" title="Anzahl der Feed-Leser"&#62;&#60;img src="http://feeds.feedburner.com/[...]&#034; alt=&#034;Anzahl der Feed-Leser&#034; /&#62;&#60;/a&#62; &#60;a href=&#034;http://www.technorati.com/search/www.perun.net&#034; title=&#034;Technorati Link Cosmos: wer verlinkt auf dieses Weblog?&#034;&#62;&#60;img src=&#034;/grafik/link-cosmos.png&#034; alt=&#034;Technorati Link Cosmos&#034; style=&#034;vertical-align: top; margin-left: 10px;&#034; /&#62;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;p class="footer-hinweis"&#62;&#60;!--&#60;?php echo get_num_queries(); ?&#62; Anfragen in &#60;?php timer_stop(1); ?&#62; Sekunden.--&#62; &copy; 2002-&#60;?php echo date('Y'); ?&#62; &#60;a href="http://www.vlad-design.de"&#62;Vladimir Simovic&#60;/a&#62; &#8211; &#60;a href="http://www.wordpress.org" title="Powered by WordPress"&#62;WordPress&#60;/a&#62; &#8211; gehostet von &#60;a href="http://www.all-inkl.com/[...]&#60;/a&#62;&#60;/p&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #footer --&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #container --&#62;</code></li>
<li><code>&#60;?php wp_footer(); ?&#62;</code></li>
<li><code>&#60;/body&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/html&#62;</code></li>
</ol>
<p class="code-titel">Der Fußbereich (footer.php)</p>
<p>In meinem Weblog kommt auch das Plugin Get Recent Comments zum Einsatz. Mit diesem Plugin kann man an einer beliebigen Stelle eine bestimmte Anzahl von letzten Kommentaren und Ping- bzw. Trackbacks anzeigen lassen. In der linken Spalte werden die fünf letzten Kommentare und in der mittleren Spalte die letzten fünf Ping-/Trackbacks angezeigt. Allerdings gibt es hier eine Ausnahme. In der Einzelansicht werden anstatt der fünf letzten Trackbacks in der mittleren Footer-Spalte die fünf letzten Beiträge angezeigt. Die Anzeige der aktuellsten Beiträge benötigt kein Plugin, hier greife ich auf die Bordmittel - Template-Tag <code>wp_get_archives();</code> - zurück.</p>
<p>In der rechten Spalte kommt das Plugin GeneralStats zum Einsatz. Dieses Plugin gibt unter anderem die Anzahl der Beiträge, der Kommentare und Kategorien aus. Darunter befinden sich zwei Icons. Das linke Icon ist von Feedburner und es übermittelt die Anzahl der Leser des Newsfeeds und daneben befindet sich ein Icon von Technorati, das auf die Ergebnisseite von diesem Dienst verweist, auf der angezeigt wird, wie viele und welche Weblogs auf Perun.net verweisen.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/footer-bereich.png' alt='Der Fußbereich' /><br />
<em>Der Fußbereich</em></p>
<h3>3.12 Die 404er-Fehlerseite</h3>
<p>Die Template-Datei 404.php wird dann von WordPress aufgerufen, wenn es eine Seite oder einen Beitrag nicht gibt, also wenn vom Webserver der 404er-HTTP-Statuscode gesendet wird. Hier sehen Sie den Code der 404.php meines Weblogs:</p>
<ol class="code-block">
<li><code>&#60;?php get_header(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;h2&#62;Du hast die Seite verscheucht!&#60;/h2&#62;</code></li>
<li><code>&#60;p&#62;Na toll! Vielen Dank auch! Jetzt hast du die Seite verscheucht und ich muss jetzt hinterherrennen, um sie einzufangen.&#60;/p&#62;</code></li>
<li><code>&#60;p&#62;Das ist nat&#252;rlich alles ein &#60;strong&#62;Scherz&#60;/strong&#62;. Du hast nat&#252;rlich &#60;strong&#62;nicht&#60;/strong&#62; die Seite verscheucht, es ist vielmehr so, dass entweder die von dir angeforderte Seite nie existiert hat oder jetzt an einer anderen Stelle ist oder evtl. gel&#246;scht wurde. Also eine klassische &#60;strong&#62;404er&#60;/strong&#62;-Fehlermeldung.&#60;/p&#62;</code></li>
<li><code>&#60;p&#62;Das &#60;strong&#62;&#60;a href="/archiv/"&#62;Archiv&#60;/a&#62;&#60;/strong&#62; ist ein guter Startpunkt, um die gew&#252;nschte Seite zu finden. Dort gibt es ein Archiv, wo die Beitr&#228;ge monatsweise einsortiert sind. Es werden die 25 letzten Beitr&#228;ge aufgelistet und zudem gibt es eine Themen-Wolke, in der die h&#228;ufig eingesetzten Stichw&#246;rter verlinkt sind. Oder du versucht es einfach mit der Suchfunktion - oben rechts in der Seitenleiste. Viel Erfolg!&#60;/p&#62;</code></li>
<li><code>&#60;/div&#62;&#60;!-- /Ende #inhalt --&#62;</code></li>
<li><code>&#60;?php get_sidebar(); ?&#62;</code></li>
<li><code>&#60;?php get_footer(); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
</ol>
<p class="code-titel">Die 404.php</p>
<p>Zu dem Code gibt es nicht viel zu sagen, das Ganze ist selbsterklärend und daher verzichte ich auch auf eine Abbildung.</p>
<h3>3.13 Weitere Planung </h3>
<p>Wie du es dir gut vorstellen kannst, wird es bei dem jetzigen Zustand dieses Themes nicht bleiben. Das Design und die Struktur einer Website ist ein &#034;lebendes Wesen&#034;. Es wächst und es verändert sich mit der Zeit und mit geänderten Anforderungen - speziell dann, wenn, wie in meinem Fall, der &#034;Haupttäter&#034; (Webmaster), gleichzeitig auch gerne im Code rumschraubt. Es ist so ähnlich wie mit dem Typus des Automechanikers, der gerne an seinem Auto bastelt. Es ist irgendwie nie fertig und der Mechaniker findet immer etwas, was es noch zu schrauben, pimpen oder auszuprobieren gibt. Daher kann es gut sein, dass sich dieses Theme in einigen Wochen an der einen oder anderen Stelle verändern wird.</p>
<h4>Und was ist mit Widgets?</h4>
<p>Widgets bzw. die dynamische Sidebar ist eine richtig feine Sache, wirklich. Aber für jemanden, der gerne im Quelltext wuselt, relativ witzlos. Widgets spielen ihre Stärke erst dann aus, wenn sie in einem Theme eingebaut werden, der für die breite Öffentlichkeit gedacht ist. Denn dann können auch die etwas weniger erfahrenen Nutzer die Sidebar ändern oder Leute, die es gemütlicher finden, nicht einen Texteditor bemühen zu müssen. Ich persönlich bevorzuge eher einen Texteditor mit Syntaxhervorhebung.</p>
<p>Dennoch habe ich - auch in Hinblick auf zukunftige Anpassungen - auf die Widgets zurückgegriffen. Widgets bieten unter anderem die Möglichkeit, einen fremden Newsfeed im eigenen Weblog zu integrieren, ohne dabei auf Plugins von Drittanbietern angewiesen zu sein - sehr fein! Ich denke da speziell z. B. an die Ausgabe der neuesten Lesezeichen, die ich in del.icio.us und/oder Mister Wong abgelegt habe. So schaut die functions.php aus:</p>
<ol class="code-block">
<li><code>&#60;?php</code></li>
<li><code>if ( function_exists('register_sidebar') )</code></li>
<li><code>register_sidebar(array(</code></li>
<li><code>'before_widget' =&#62; '',</code></li>
<li><code>'after_widget' =&#62; '',</code></li>
<li><code>'before_title' =&#62; '&#60;h2&#62;',</code></li>
<li><code>'after_title' =&#62; '&#60;/h2&#62;',</code></li>
<li><code>));</code></li>
<li><code>?&#62;</code></li>
</ol>
<p class="code-titel">Die mögliche functions.php</p>
<p>Die functions.php ist sehr spartanisch gehalten, aber für mein Weblog völlig ausreichend. Anschließend müsste ich die sidebar.php anpassen und zwar müsste ich zwischen den Zeilen 63 und 64 folgenden Code eingefügen:</p>
<ol class="code-block" start="64">
<li><code>&nbsp;</code></li>
<li><code>&#60;?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?&#62;</code></li>
<li><code>&#60;!-- Keine Widgets! --&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
</ol>
<p class="code-titel">Eingefügter Code in der sidebar.php</p>
<p>Anschließend habe ich diese beiden Dateien hochgeladen, die Widget-Funktion aktiviert und <strong>testweise</strong> den RSS-Feed meines del.icio.us-Accounts in die Sidebar eingebunden. Dadurch, dass ich die Widget-Abfrage in der sidebar.php ganz am Ende notiert habe, wird von dem üblichen Sidebar-Inhalt nichts entfernt, sondern es wird der neue dynamische Inhalt am unteren Ende hinzugefügt:</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/10/widget-bereich.png' alt='Neuer Inhalt dank Widgets' /><br />
<em>Neuer Inhalt dank Widgets</em></p>
<p>Anschließend habe ich die Widgets in den Winterschlaf geschickt.</p>
<p>Eventuell wünschst du dir für die Widgets eine Möglichkeit, diese durch CSS ansprechen zu können, ohne den restlichen Inhalt in der Sidebar zu beeinflussen. Die einfachste Möglichkeit würde sich bieten, indem man den Code aus der functions.php in einem extra <code>div</code>-Block einfügt, der entweder ein id- oder ein Klassen-Attribut besitzt. Eine andere Möglichkeit ist es, die functions.php minimal zu erweitern:</p>
<ol class="code-block">
<li><code>&lt;?php</code></li>
<li><code>if ( function_exists('register_sidebar') )</code></li>
<li><code>register_sidebar(array(</code></li>
<li><code>'before_widget' => '&lt;div class="widget %1$s"&gt;',</code></li>
<li><code>'after_widget' => '&lt;/div&gt;',</code></li>
<li><code>'before_title' => '&lt;h2&gt;',</code></li>
<li><code>'after_title' => '&lt;/h2&gt;',</code></li>
<li><code>));</code></li>
<li><code>?&gt;</code></li>
</ol>
<p class="code-titel">Erweiterte functions.php</p>
<p>Mit diesem Code erreicht man das jeder Widget-Block von einem div-Block umschlossen wird und dieser Block bekommt eine Klasse mit zwei Werten zugewiesen: <code>widget</code> und der zweite Wert wird aus dem Namen des Widget-Blocks erstellt.</p>
<h3>3.14 Was am Ende übrig blieb?</h3>
<p>Die Artikel-Serie umfasst insgesamt <strong>54 Din-A4-Seiten</strong>! Ich hoffe dir damit geholfen zu haben und verweise auf die Möglichkeit die Artikel auszudrucken &#8230; wozu habe ich mir denn die Mühe bei der CSS-Datei für die Druckausgabe gemacht. <img src='http://www.perun.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Viel Spaß beim Lesen und Ausprobieren. Sollte es fragen geben, einfach ein Kommentar abgeben.</p>

	<a href="http://www.perun.net/tag/wordpress-artikel/" title="wordpress-artikel" rel="tag">wordpress-artikel</a>
]]></content:encoded>
			<wfw:commentRss>http://www.perun.net/2007/10/31/wordpress-themes-verstehen-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WordPress-Themes verstehen 2</title>
		<link>http://www.perun.net/2007/08/08/wordpress-themes-verstehen-2/</link>
		<comments>http://www.perun.net/2007/08/08/wordpress-themes-verstehen-2/#comments</comments>
		<pubDate>Wed, 08 Aug 2007 01:36:56 +0000</pubDate>
		<dc:creator>Perun</dc:creator>
		
		<category><![CDATA[Artikel]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[wordpress-artikel]]></category>

		<category><![CDATA[wordpress-tipps]]></category>

		<guid isPermaLink="false">http://www.perun.net/2007/08/08/wordpress-themes-verstehen-2/</guid>
		<description><![CDATA[Im ersten Teil der Serie habe ich einiges zur Theorie, Grundlagen und Begrifflichkeiten geschrieben. In diesem Artikel werde ich das Classic-Theme unter die Lupe nehmen und das Zusammenspiel der einzelnen Dateien und der darin enthaltenen Template-Tags erklären. Das Classic-Theme war das Standard-Theme bis zum Erscheinen von WordPress 1.5, dann wurde es von dem jetzigen Default-Theme [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://vg02.met.vgwort.de/na/430d19595355fc9f9881465d3f0cf8" width="1" height="1" alt="" />Im <a href="http://www.perun.net/2007/07/30/wordpress-themes-verstehen-1/">ersten Teil</a> der Serie habe ich einiges zur Theorie, Grundlagen und Begrifflichkeiten geschrieben. In diesem Artikel werde ich das Classic-Theme unter die Lupe nehmen und das Zusammenspiel der einzelnen Dateien und der darin enthaltenen Template-Tags erklären. Das Classic-Theme war das Standard-Theme bis zum Erscheinen von WordPress 1.5, dann wurde es von dem jetzigen Default-Theme (Kubrick) abgelöst.<img src="http://vg03.met.vgwort.de/na/2b8eed54b9444c17e0c9f26a97d80c" width="1" height="1" alt="" /><img src="http://vg07.met.vgwort.de/na/a733a5aca65edf85b1714bbc432b50" width="1" height="1" alt="" /> </p>
<h3>2.1 Warum Classic- und nicht das Default-Theme?</h3>
<p>Es wird sicherlich die Frage aufkommen warum ich nicht das Default-Theme (Kubrick) bespreche. Das hat mehrere Ursachen. Zum einen ist von der Anzahl der der Dateien und von dem Code her das Classic-Theme eher geeignet um einen Einstieg zu vermitteln. Durch die sehr große Anzahl an Dateien und durch sehr viele <code>if</code>-Konstrukte kann man vor allem am Anfang sehr schnell durcheinander kommen und auch den Überblick verlieren. Einige der Dateien, wie z. B. die searchform.php finde ich schlichtweg unnötig, da dort lediglich das kleine Suchformular eingebettet ist. Also für fünf Zeilen Code erstellt man eine extra Datei und fügt dann in die sidebar.php eine extra <code>include</code>-Anweisung hinzu.</p>
<p>Ein weiterer wichtiger Grund ist die Tatsache, dass das Default-Theme doch um einiges umfangreicher ist und daher hier auch meine knappe Zeit als wichtiges Entscheidungskriterium auf der Waagschale liegt.</p>
<p>Dadurch das einige der Dateien sehr lang sind werde ich die in zwei oder mehr Teile verteilen, damit man beim Lesen nicht zu viel scrollen muss.</p>
<p><!-- WSA: rules for context 'im-beitrag' did not apply --></p>
<h3>2.2 Der Kopfbereich (header.php)</h3>
<p>Die Datei header.php ist zuständig für den Kopfbereich des Dokumentes. Hier werden nicht nur die Angaben des klassischen Kopfbereiches eine (X)HTML-Dokumentes (<code>&lt;head&gt;&lt;/head&gt;</code>) untergebracht sondern auch Angaben, die im sichtbaren Bereich des Dokuments (<code>&lt;body&gt;</code>) liegen. Hier der <strong>erste Abschnitt der header.php</strong>:</p>
<ol class="code-block">
<li><code>&#60;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&#62;</code></li>
<li><code>&#60;html xmlns="http://www.w3.org/1999/xhtml" &#60;?php language_attributes(); ?&#62;&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;head profile="http://gmpg.org/xfn/11"&#62;</code></li>
<li><code>&#60;meta http-equiv="Content-Type" content="&#60;?php bloginfo('html_type'); ?&#62;; charset=&#60;?php bloginfo('charset'); ?&#62;" /&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;title&#62;&#60;?php bloginfo('name'); ?&#62;&#60;?php wp_title(); ?&#62;&#60;/title&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;meta name="generator" content="WordPress &#60;?php bloginfo('version'); ?&#62;" /&#62; &#60;!-- leave this for stats please --&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;style type="text/css" media="screen"&#62;</code></li>
<li><code>@import url( &#60;?php bloginfo('stylesheet_url'); ?&#62; );</code></li>
<li><code>&#60;/style&#62;</code></li>
<li>&nbsp;</li>
</ol>
<p class="code-titel">Die header.php (1/2)</p>
<p>Im Classic- wie auch im Default-Theme wird XHTML 1.0 eingesetzt und zwar in der &#034;Geschmacksrichtung&#034; <em>transitional</em>. Ob jetzt <em>strict</em> die bessere Variante ist und zu der Errettung des Menschheit beiträgt, wird hier nicht der Gegenstand der Debatte sein. Wer es mag kann hier gerne die <code>strict</code>-Variante notieren.</p>
<p>In der Zeile zwei sieht man schon das erste Template-Tag: <code>language_attributes();</code>. In Abhängigkeit davon, was man in der Konfigurationsdatei (wp-config.php, Zeile 19) als Standardsprache eingetragen hat, fügt WordPress nachher bei der HTML-Ausgabe an dieser Stelle nicht nur das richtige <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">Sprachkürzel</a> sondern auch die richtige Schreibrichtung. In meiner wp-config.php steht in der Zeile 19 folgendes: <code>define ('WPLANG', 'de');</code>. Würde ich jetzt das Classic-Theme nutzen, dann würde im Quelltext folgendes stehen:</p>
<p><code>&#60;html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de"&#62;</code></p>
<p>Das (X)HTML-Attribut <code>dir</code> ist zuständig für die Schreibrichtung und der Wert <code>ltr</code> bedeutet <span xml:lang="en" lang="en">left to right</span> (von links nach rechts). Würde ich jetzt einen Sprachkürzel einer Sprache (z. B. hebräisch) angeben und die passende Sprachdatei in wp-includes/languages/ hochladen dann würde WordPress automatisch folgendes daraus generieren:</p>
<p><code>&#60;html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" lang="he"&#62;</code></p>
<p>Das ist aber dann wirklich nur wichtig, wenn man Themes zum freien Download anbietet. Sonst kann man hier die Angabe statisch machen und dann auch richtig:</p>
<p><code>&#60;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"&#62;</code></p>
<p>In der Zeile vier im einleitenden head-Tag sieht man das Attribut <code>profile</code> mit dem Wert <code>http://gmpg.org/xfn/11</code>. Der Wert ist eine Adresse und diese führt zu der Seite <a href="http://gmpg.org/xfn/11">XHTML Friends Network</a>. Mit Hilfe von XFN kann man die persönlichen Beziehungen zu derjenigen Person auf deren Website man verweist auszudrücken bzw. auszuzeichnen. Hier ein Beispiel:</p>
<p><code>&#60;a href="http://www.grochtdreis.de/weblog" rel="friend met colleague" title="Das Weblog von Jens Groschtdreis"&#62;F - LOG - GE&#60;/a&#62;</code></p>
<p>Mit Hilfe des <code>rel</code>-Attributs und der passenden Werten habe ich den Verweis so ausgezeichnet, dass <a href="http://xfngraph.sourceforge.net/index.en.utf8.html">eine Software</a>, die XFN unterstützt &#034;erkennen&#034; kann, dass Jens Grochtdreis nicht nur ein Weblog hat, den Spitznamen F-LOG-GE hat sondern ein Freund und ein Kollege von mir ist und wir uns auch persönlich getroffen haben. Das ganze lässt sich dem, was man als das <strong>semantische Web</strong> nennt, zuordnen. Aber dies wird in diesem Artikel nicht das Thema sein. Nur eins noch: in der Blogroll (Linksammlung) welche man innerhalb von WordPress verwalten kann, kann man ganz komfortabel, diese Link-Beziehungen mittels eines XFN-Erzeugers erstellen.</p>
<p><img src='http://www.perun.net/wp-content/uploads/2007/08/wordpress-xfn-erzeuger.png' alt='WordPress: XFN-Erzeuger' /><br />
<em>XFN: geliebte Ehefrau oder die Geliebte?</em>  <img src='http://www.perun.net/wp-includes/images/smilies/icon_razz.gif' alt=':razz:' class='wp-smiley' /> </p>
<p>In der Zeile fünf sieht man das erste Meta-Tag. Hier werden die Angaben zum <strong>Inhalt und zum Zeichensatz</strong> getätigt. Nach einer frischen Installation gibt WordPress folgendes im Quelltext aus:</p>
<p><code>&#60;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&#62;</code></p>
<p>Die Angaben zum Zeichensatz (<code>charset</code>) kannst du innerhalb des Admin-Bereiches steuern und zwar unter &#034;Einstellungen&#034; &raquo; &#034;Lesen&#034;. Die Angaben zum <code>content</code> - wie der Inhalt vom Clienten (z. B. Browser) behandelt werden soll - kann man innerhalb des Admin-Bereichs, zumindest im Moment (bis einschl. WordPress 2.3-alpha), nicht steuern.</p>
<p>In der Zeile sieben der header.php wird der <strong>Titel der Seite</strong> generiert. Dieser besteht aus dem Titel bzw. dem Namen des Weblogs (<code>bloginfo('name');</code>) gefolgt von dem Titel des Beitrages, der Seite oder der Kategorie (<code>wp_title();</code>). Übrigens ist das schon die zweite Stelle wo das Template-Tag <code>bloginfo();</code> zum Einsatz kommt. Durch den Einsatz von verschiedenen Parametern gibt dieses Template-Tag viele Informationen über die jeweilige WordPress-Installation (Zeichensatz, diverse Adressen, Blog-Titel etc.) preis. Auch in der Zeile 09 und 12 wird <code>bloginfo();</code> eingesetzt. Einmal um die eingesetzte WordPress-Version und das andere Mal den Pfad zu der CSS-Datei auszugeben.</p>
<p>Nun schauen wir uns mal den <strong>zweiten Abschnitt der header.php</strong> an:</p>
<ol class="code-block" start="15">
<li><code>&#60;link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="&#60;?php bloginfo('rss2_url'); ?&#62;" /&#62;</code></li>
<li><code>&#60;link rel="alternate" type="text/xml" title="RSS .92" href="&#60;?php bloginfo('rss_url'); ?&#62;" /&#62;</code></li>
<li><code>&#60;link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="&#60;?php bloginfo('atom_url'); ?&#62;" /&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;link rel="pingback" href="&#60;?php bloginfo('pingback_url'); ?&#62;" /&#62;</code></li>
<li><code>&#60;?php wp_get_archives('type=monthly&#038;format=link'); ?&#62;</code></li>
<li><code>&#60;?php //comments_popup_script(); // off by default ?&#62;</code></li>
<li><code>&#60;?php wp_head(); ?&#62;</code></li>
<li><code>&#60;/head&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;body&#62;</code></li>
<li><code>&#60;div id="rap"&#62;</code></li>
<li><code>&#60;h1 id="header"&#62;&#60;a href="&#60;?php bloginfo('url'); ?&#62;/"&#62;&#60;?php bloginfo('name'); ?&#62;&#60;/a&#62;&#60;/h1&#62;</code></li>
<li>&nbsp;</li>
<li><code>&#60;div id="content"&#62;</code></li>
<li><code>&#60;!-- end header --&#62;</code></li>
</ol>
<p class="code-titel">Die header.php (2/2)</p>
<p>In den Zeilen 15-19 kommt &#8230; ja, richtig, vier Mal <code>bloginfo();</code> zum Einsatz. In diesen vier Zeilen werden die <a href="http://www.perun.net/2004/11/08/logische-verweise/">logischen Verweise</a> zu RSS 2.0, RSS 0.92, Atom und der Datei, die Pingbacks entgegen nimmt, im Kopfbereich eingebunden. Mit Hilfe des Template-Tags <code>bloginfo();</code> werden die Pfade zu den jeweiligen Dateien ausgegeben. So schaut das <strong>Ergebnis im Quelltext</strong> dieses Weblogs aus, wenn ich auf das Classic-Theme wechsle:</p>
<ol class="code-block" start="15">
<li><code>&#60;link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://www.perun.net/feed/" /&#62;</code></li>
<li><code>&#60;link rel="alternate" type="text/xml" title="RSS .92" href="http://www.perun.net/feed/rss/" /&#62;</code></li>
<li><code>&#60;link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="http://www.perun.net/feed/atom/" /&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;link rel="pingback" href="http://www.perun.net/xmlrpc.php" /&#62;</code></li>
</ol>
<p class="code-titel">Quelltext-Beispiel: der <code>head</code>-Bereich</p>
<p>In der Zeile 20 der header.php wird mit Hilfe von <code>wp_get_archives();</code> ein <strong>Monats-Archiv</strong> angelegt und für jeden Monat wird ein weiterer logischer Verweis angelegt:</p>
<p><code>&#60;link rel='archives' title='Juli 2007' href='http://www.perun.net/2007/07/' /&#62;</code></p>
<p>So lange ein Weblog recht jung ist, ist die Angabe in der Zeile 20 unproblematisch. Würde ich dies hier machen, dann hätte ich im Kopfbereich alleine für den Monatsarchiv 44 Zeilen geopfert. Das sind knapp 4kb zusätzlich, die bei jedem Seitenaufruf anfallen würden, Siehe dazu auch den Beitrag: <a href="http://www.perun.net/2006/04/15/wordpress-archiv-und-logische-verweise/">Wordpress-Archiv und logische Verweise</a>. Daher habe ich hier folgende Angabe im Kopfbereich gemacht:</p>
<p><code>&#60;link rel="archives" href="/archiv/" title="Archiv: nach Monaten und Tags sortiert." /&#62;</code>.</p>
<p>In der Zeile 21 der header.php würde, wenn er nicht auskommentiert wäre, der <strong>Script für das Kommentar-Popup</strong> eingebunden: der Kommentar-Bereich würde sich in einem neuen, kleinen Fenster öffnen. Da ich diese Lösung nicht mag und auch nicht unterstützen möchte, werde ich sie hier auch nicht näher erläutern. Wer ein eigenes Theme macht und keine Komentar-Popups wünscht, kann diese Zeile entfernen. Der Template-Hook in der Zeile 22 (<code>wp_head();</code>) sollte allerdings dort erhalten bleiben bleiben. Weil sowohl WordPress, wie auch einige Plugins hier einiges an Code unterbringen, z. B. Verweise zu Javascript-Dateien.</p>
<p>Bis jetzt waren die Angaben in der header.php für den Besucher mehr oder weniger unsichtbar. Ab der Zeile 25 ändert sich dies, da auch dort das <code>body</code>-Element eröffnet wird. In der Zeile 27 wird mit Hilfe des alten Bekannten (<code>bloginfo();</code>) eine verlinkte Überschrift erzeugt, der Rest dürfte selbsterklärend sein und das war es dann mit der header.php.</p>
<h3>2.3 Die Seitenleiste/Sidebar (sidebar.php)</h3>
<p>Die nächste Datei auf unserem &#034;Speiseplan&#034; ist die sidebar.php. Diese Datei ist zuständig für die Seitenleiste und dank der in WordPress 2.2 integrierten Widget-Funktion mittlerweile sehr einfach erweiterbar. Die Widget-Funktion ist zwar seit WordPress 2.0 verfügbar, allerdings musste man bis WordPress 2.2 ein Plugin installieren um Widgets einsetzen zu können.</p>
<ol class="code-block" title="sidebar.php">
<li><code>&nbsp;</code></li>
<li><code>&#60;!-- begin sidebar --&#62;</code></li>
<li><code>&#60;div id="menu"&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php 	/* Widgetized sidebar, if you have the plugin installed. */</code></li>
<li><code>if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?&#62;</code></li>
<li><code>&#60;?php wp_list_pages('title_li=' . __('Pages:')); ?&#62;</code></li>
<li><code>&#60;?php wp_list_bookmarks('title_after=&#038;title_before='); ?&#62;</code></li>
<li><code>&#60;?php wp_list_categories('title_li=' . __('Categories:')); ?&#62;</code></li>
<li><code>&#60;li id="search"&#62;</code></li>
<li><code>&#60;label for="s"&#62;&#60;?php _e('Search:'); ?&#62;&#60;/label&#62;</code></li>
<li><code>&#60;form id="searchform" method="get" action="&#60;?php bloginfo('home'); ?&#62;"&#62;</code></li>
<li><code>&#60;div&#62;</code></li>
<li><code>&#60;input type="text" name="s" id="s" size="15" /&#62;&#60;br /&#62;</code></li>
<li><code>&#60;input type="submit" value="&#60;?php _e('Search'); ?&#62;" /&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;/form&#62;</code></li>
<li><code>&#60;/li&#62;</code></li>
</ol>
<p class="code-titel">Die sidebar.php (1/2)</p>
<p>Die ganze Sidebar ist in eine <code>div</code>-Box mit der <code>id</code> <code>menu</code> untergebracht und alle Sidebar-Elemente sind in einer Aufzählungsliste eingeordnet. In der Zeile 07 siehst du schon die erste <code>if</code>-Abfrage:</p>
<p><code>if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) :</code></p>
<p>Dieses <code>if</code>-Konstrukt fragt folgendes ab: &#034;Sollte die Widget-Funktion nicht existieren oder wenn sie nicht aktiv ist dann&hellip;&#034;. Also wird der Code ab der Zeile 08 nur berückscihtigt, wenn die Widgets nicht existent oder inaktiv sind. Am Ende sieht man einen Doppelpunkt (<code>:</code>) es handelt sich hierbei um die <a href="http://de3.php.net/manual/de/control-structures.alternative-syntax.php">alternative Schreibweise für Kontroll-Strukturen</a> - vielen Dank an <a href="http://garv.in/serendipity/">Garvin</a> für den Hinweis.</p>
<p>In der Zeile 08 befindet sich der Code, der für die Ausgabe der Verweise zu den Seiten (Pages) zuständig ist: <code>wp_list_pages('title_li=' . __('Pages:'));</code>. Der Parameter <code>title_li=</code> bezieht sich auf die Überschrift dieses Bereiches. Würde man diesem Parameter keinen oder einen leeren Wert geben - zum Beispiel: <code>wp_list_pages('title_li=');</code> - dann gibt es keine Überschrift. </p>
<p>In unserem Fall ist aber der Wert <code>' . __('Pages:'));</code>. Überall dort wo in WordPress-Code ein doppelter Unterstrich (<code>__()</code>) oder Unterstrich und e (<code>_e()</code>) vorkommen wird eine Lokalisierung ausgezeichnet: der Sprachdatei wird signalisiert, dass es hier etwas gibt was übersetzt werden kann. Falls die deutsche Sprachdatei vorhanden und eingebunden ist wird die überschrift zu &#034;Seiten:&#034; übersetzt. Hier der <strong>Quelltext des relevanten Bereiches</strong> bei der Ausgabe:</p>
<ol class="code-block">
<li><code>&#60;li class="pagenav"&#62;Seiten:&#60;ul&#62;&#60;li class="page_item"&#62;&#60;a href="http://www.perun.net/archiv/" title="Archiv"&#62;Archiv&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li class="page_item"&#62;&#60;a href="http://www.perun.net/meine-buecher/" title="Meine B&#252;cher"&#62;Meine B&#252;cher&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&hellip;</code></li>
<li><code>&#60;li class="page_item"&#62;&#60;a href="http://www.perun.net/impressum/" title="Impressum"&#62;Impressum&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;&#60;/li&#62;</code></li>
</ol>
<p class="code-titel">Quelltext-Beispiel: Ausgabe der Seiten</p>
<p>Ich habe den Quelltext ein bisschen verkürzt, um nicht unnötig Platz in Anspruch zu nehmen und auch anhand des verküzten Beispiels klarzumachen, wie die Ausgabe ausschaut.</p>
<p>In der Zeile 09 sieht man folgenden Template-Tag im Einsatz: <code>wp_list_bookmarks('title_after=&#038;title_before=');</code>. Der Template-Tag <code>wp_list_bookmarks();</code> wurde mit WordPress 2.1 eingeführt und ist zuständig für die Ausgabe der Blogroll. In diesem Beispiel werden auch zwei Parameter eingesetzt: <code>title_before=</code> und <code>title_after=</code>. Der erste Parameter ist zuständig für den Bereich vor der jeweiligen Kategorie-Beschreibung und der zweite Parameter für den Bereich nach der Kategorie-Beschreibung. </p>
<p>Beide Parameter haben keinen Wert und somit wird der Standard-Wert für die beiden Parameter (<code>&lt;h2&gt;</code> und <code>&lt;/h2&gt;</code>) entfernt. Diese beiden Parameter greifen nur wenn die Kategorisierung der Links bzw. die Ausgabe der Links in separaten Kategorien aktiv ist (<code>categorize=True</code>) &#8230; was die Standardeinstellung ist. So schaut dann in diesem Weblog, die Ausgabe der Blogroll (in verkürzter Form) bei aktiviertem Classic-Theme im Quelltext aus: </p>
<ol class="code-block">
<li><code>&#60;li id="linkcat-24" class="linkcat"&#62;Links:&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.grochtdreis.de/weblog" rel="friend met colleague" title="Das Weblog von Jens Groschtdreis"&#62;F - LOG - GE&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.kbbu.de/" rel="acquaintance met" title="Blog &#252;ber Farbe, Design, Patterns, Allt&#228;gliches"&#62;K&#246;lner Blog B&#252;ro&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.sahanya.perun.net" rel="met co-resident spouse" title="Sahanyas Weblog"&#62;Sahanya&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://garv.in/serendipity/" rel="acquaintance met colleague" title="Das Weblog von Garvin Hicking"&#62;Supergarv.de&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;&#60;/li&#62;</code></li>
</ol>
<p class="code-titel">Quelltext-Beispiel: Ausgabe der Blogroll</p>
<p>In der Zeile 10 der sidebar.php sieht man den Template-Tag der für die Ausgabe der Kategorien zuständig ist:</p>
<p><code>wp_list_categories('title_li=' . __('Categories:'));</code></p>
<p>Dieses Beispiel bedarf keiner längeren Erklärung, da der Parameter genau so aufgebaut ist wie die Ausgabe der Seiten (Pages) aus der Zeile 08 der sidebar.php, welche ich weiter oben erklärt habe. Auch hier wird ein Begriff, welcher übersetzt werden kann, durch den doppelten Unterstrich und die Klammer angekündigt. Und hier die obligatorische Ausgabe des Quelltextes:</p>
<ol class="code-block">
<li><code>&#60;li class="categories"&#62;Kategorien:&#60;ul&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.perun.net/kategorie/artikel/" title="L&#228;ngere Berichte aus allen Themenbereichen"&#62;Artikel&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://www.perun.net/kategorie/blog-rss/" title="Berichte rund um Weblogs, Weblogsoftware, RSS etc."&#62;Blog-RSS&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&hellip;&#60;/li&#62;</code></li>
<li><code>&#60;/ul&#62;&#60;/li&#62;</code></li>
</ol>
<p class="code-titel">Quelltext-Beispiel: Ausgabe der Kategorien</p>
<p>In der Zeile 11-19 der sidebar.php befindet sich der Code, der zuständig für die Ausgabe des Suchformulars ist. Im Grunde genommen ist hier nichts Neues. In der Zeile 12 und 16 befindet sich <code>_e('Search:');</code> und das ist wie du schon erfahren hast auch ein Begriff, der von der Sprachdatei übersetzt wird. In der Zeile 13 wird als der Wert des action-Attributs <code>bloginfo('home');</code> angegeben und das ist die Startseite der WordPress-Installation.</p>
<ol class="code-block" start="20" title="sidebar.php (2/2)">
<li><code>&#60;li id="archives"&#62;&#60;?php _e('Archives:'); ?&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php wp_get_archives('type=monthly'); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;/li&#62;</code></li>
<li><code>&#60;li id="meta"&#62;&#60;?php _e('Meta:'); ?&#62;</code></li>
<li><code>&#60;ul&#62;</code></li>
<li><code>&#60;?php wp_register(); ?&#62;</code></li>
<li><code>&#60;li&#62;&#60;?php wp_loginout(); ?&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="&#60;?php bloginfo('rss2_url'); ?&#62;" title="&#60;?php _e('Syndicate this site using RSS'); ?&#62;"&#62;&#60;?php _e('&#60;abbr title="Really Simple Syndication"&#62;RSS&#60;/abbr&#62;'); ?&#62;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="&#60;?php bloginfo('comments_rss2_url'); ?&#62;" title="&#60;?php _e('The latest comments to all posts in RSS'); ?&#62;"&#62;&#60;?php _e('Comments &#60;abbr title="Really Simple Syndication"&#62;RSS&#60;/abbr&#62;'); ?&#62;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://validator.w3.org/check/referer" title="&#60;?php _e('This page validates as XHTML 1.0 Transitional'); ?&#62;"&#62;&#60;?php _e('Valid &#60;abbr title="eXtensible HyperText Markup Language"&#62;XHTML&#60;/abbr&#62;'); ?&#62;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://gmpg.org/xfn/"&#62;&#60;abbr title="XHTML Friends Network"&#62;XFN&#60;/abbr&#62;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;li&#62;&#60;a href="http://wordpress.org/" title="&#60;?php _e('Powered by WordPress, state-of-the-art semantic personal publishing platform.'); ?&#62;"&#62;&#60;abbr title="WordPress"&#62;WP&#60;/abbr&#62;&#60;/a&#62;&#60;/li&#62;</code></li>
<li><code>&#60;?php wp_meta(); ?&#62;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&#60;/li&#62;</code></li>
<li><code>&#60;?php endif; ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/ul&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&#60;!-- end sidebar --&#62;</code></li>
</ol>
<p class="code-titel">Die sidebar.php (2/2)</p>
<p>In der Zeile 20-24 sieht man den Code, der für die Ausgabe des Monatsarchivs zuständig ist. Mit <code>wp_get_archives('type=monthly');</code> werden Links zu der jeweiligen Monats-Übersicht generiert wo alle Beiträge des jeweiligen Monats aufgelistet werden. Dieser Template-Tag, allerdings mit einem anderen Parameter, dürfte dir bekannt vorkommen, da er schon mal in der header.php vorgekommen ist. Doch hier haben wir sehr schnell das gleiche Problem, welches ich bereits oben in der header.php erwähnt habe. Es werden nämlich <strong>alle</strong> Monate seit Bestehen des Weblogs aufgelistet. Mit folgenden Parametern:</p>
<p><code>wp_get_archives('type=monthly&#038;limit=6&#038;show_post_count=1');</code></p>
<p>wird die Auflistung auf die letzten sechs Monate begrenzt und zusätzlich wird neben den Verweisen in Klammern die Anzahl der Beiträge im jeweiligen Zeitraum angegeben.</p>
<p>In der Zeile 27 der sidebar.php steht <code>wp_register();</code>. Dieses Template-Tag generiert selbst die umschließenden Listentags und erzeugt einen Link mit dem Namen &#034;Registrieren&#034; (Wenn die Registrierung erlaubt ist), wen man diesen Verweis aufruft, gelangt man zum Registrierungsformular. Ist man bereits eingeloggt erscheint hier ein Link mit dem Namen &#034;Site Admin&#034;, der einen in den Admin-Bereich führt in dem man entsprechend seiner Benutzer-Rechte agieren kann.</p>
<p>In der Zeile 28 befindet sich das Template-Tag <code>wp_loginout();</code> welches den Login-Verweis bei nicht eingeloggten Nutzern und Ausloggen-Link bei bereits eingeloggten Nutzern einblendet.</p>
<p>In der Zeile 29 und 30 werden mit Hilfe des Template-Tags <code>bloginfo();</code> und verschiedener Parameter (<code>rss2_url</code> und <code>comments_rss2_url</code>), die Verweise zum Newsfeed und zum Kommentar-Feed generiert. Die Zeile 31-33 sind eigentlich selbsterklärend: Verweis zum XHTML-Validator, zur XFN-Seite und zu der offiziellen WordPress-Seite. In der Zeile 34 befindet sich der Template-Hook (<code>wp_meta();</code>) und in der Zeile 37 wird die <code>if</code>-Abfrage mit <code>&lt;?php endif; ?&gt;</code> beendet, die in der Zeile 07 der sidebar.php angefangen hat.</p>
<p>Und somit sind wir auch ans <strong>Ende der sidebar.php</strong> angelangt.</p>
<h3>2.4 Die Hauptdatei (index.php)</h3>
<p>Nun schauen wir uns die Hauptdatei des Classic-Themes an. Ich habe bei der index.php darauf verzichtet sie in zwei Bereiche zu teilen, da hierbei eine Teilung meiner Meinung nach zu verwirrend wäre.</p>
<ol class="code-block">
<li><code>&#60;?php</code></li>
<li><code>get_header();</code></li>
<li><code>?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code><strong>&#60;?php if (have_posts()) : while (have_posts()) : the_post(); ?&#62;</strong></code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php the_date('','&#60;h2&#62;','&#60;/h2&#62;'); ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="post" id="post-&#60;?php the_ID(); ?&#62;"&#62;</code></li>
<li><code>&#60;h3 class="storytitle"&#62;&#60;a href="&#60;?php the_permalink() ?&#62;" rel="bookmark"&#62;&#60;?php the_title(); ?&#62;&#60;/a&#62;&#60;/h3&#62;</code></li>
<li><code>&#60;div class="meta"&#62;&#60;?php _e("Filed under:"); ?&#62; &#60;?php the_category(',') ?&#62; &#8212; &#60;?php the_author() ?&#62; @ &#60;?php the_time() ?&#62; &#60;?php edit_post_link(__('Edit This')); ?&#62;&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="storycontent"&#62;</code></li>
<li><code>&#60;?php the_content(__('(more...)')); ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;div class="feedback"&#62;</code></li>
<li><code>&#60;?php wp_link_pages(); ?&#62;</code></li>
<li><code>&#60;?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?&#62;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;/div&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code>&#60;?php comments_template(); // Get wp-comments.php template ?&#62;</code></li>
<li><code>&nbsp;</code></li>
<li><code><strong>&#60;?php endwhile; else: ?&#62;</strong></code></li>
<li><code>&#60;p&#62;&#60;?php _e('Sorry, no posts matched your criteria.'); ?&#62;&#60;/p&#62;</code></li>
<li><code><strong>&#60;?php endif; ?&#62;</strong></code></li>
<li><code>&nb