<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>onlinecasinodemar.com &#187; widget area</title>
	<atom:link href="http://www.onlinecasinodemar.com/tag/widget-area/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.onlinecasinodemar.com</link>
	<description>WordPress Themes &#38; Webdesign</description>
	<lastBuildDate>Wed, 05 Oct 2011 13:04:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<meta name="generator" content="webdemar 3.0" />
		<item>
		<title>Tutorial: Verschachtelte WordPress Widget-Areas</title>
		<link>http://www.onlinecasinodemar.com/tutorials/tutorial-verschachtelte-wordpress-widget-areas/</link>
		<comments>http://www.onlinecasinodemar.com/tutorials/tutorial-verschachtelte-wordpress-widget-areas/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 10:16:48 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress Funktionen]]></category>
		<category><![CDATA[widget area]]></category>
		<category><![CDATA[widgets]]></category>

		<guid isPermaLink="false">http://www.onlinecasinodemar.com/?p=1298</guid>
		<description><![CDATA[<img width="280" height="210" src="http://www.onlinecasinodemar.com/wp-content/uploads/2009/09/verschachtelte-widgetareas.jpg" class="attachment-post-thumbnail wp-post-image" alt="verschachtelte-widgetareas" title="verschachtelte-widgetareas" />Um mit WordPress einen weiteren Schritt in Richtung CMS zu machen, kann man die Widgets der Sidebar oder jeder anderen Widget-Area in einem WordPress-Theme abh&#228;ngig vom Inhalt anzeigen lassen. Im folgenden Beispiel unterscheide ich zwischen Sidebars f&#252;r Startseite, Seiten, Artikeleinzelansichten und Kategorien. Warum verschachtelte Widget-Areas? Verschachtelte Widget-Areas bieten eine gro&#223;e Flexibilit&#228;t. Man hat damit die [...]]]></description>
			<content:encoded><![CDATA[<img width="280" height="210" src="http://www.onlinecasinodemar.com/wp-content/uploads/2009/09/verschachtelte-widgetareas.jpg" class="attachment-post-thumbnail wp-post-image" alt="verschachtelte-widgetareas" title="verschachtelte-widgetareas" /><p>Um mit WordPress einen weiteren Schritt in Richtung <abbr title="Content Management System">CMS</abbr> zu machen, kann man die Widgets der Sidebar oder jeder anderen Widget-Area in einem WordPress-Theme abh&#228;ngig vom Inhalt anzeigen lassen. Im folgenden Beispiel unterscheide ich zwischen Sidebars f&#252;r Startseite, Seiten, Artikeleinzelansichten und Kategorien.<span id="more-1298"></span></p>
<h3 class="clear">Warum verschachtelte Widget-Areas?</h3>
<p>Verschachtelte Widget-Areas bieten eine gro&#223;e Flexibilit&#228;t. Man hat damit die M&#246;glichkeit bspw. verschiedene Sidebars abh&#228;ngig davon anzuzeigen, wo der Benutzer sich auf der Website befindet.</p>
<p class="space">In meinem Beispiel werde ich abfragen, ob sich der User auf der Startseite, auf einer Seite, in einer Artikeleinzelansicht oder in einer Kategorie befindet. Um nicht obligatorisch f&#252;r alle F&#228;lle eine eigene Sidebar anlegen zu <em>m&#252;ssen</em>, erstelle ich au&#223;erdem eine allgemeine Sidebar, die immer dann angezeigt wird, wenn f&#252;r den jeweiligen Unterbereich keine Widgets definiert wurden.</p>
<h3>Sprungmarken</h3>
<ul style="margin-bottom:40px">
<li><a href="#widgets-1">Erstellen einer Widget-Area</a></li>
<li><a href="#widgets-2">Ausgabe der Widgets im Theme</a></li>
<li><a href="#widgets-3">Erstellen mehrerer Widget-Areas</a></li>
<li><a href="#widgets-4">Verschachteln der Widget-Areas</a></li>
</ul>
<h3 id="widgets-1">Erstellen einer Widget-Area</h3>
<p>Zum Definieren der Widget-Area ben&#246;tige ich die Funktion <code>register_sidebar()</code> (s.a. <a href="http://codex.wordpress.org/Function_Reference/register_sidebar">WordPress Codex</a>). Der Funktionsname ist dabei ein wenig irref&#252;hrend, da man damit nicht nur Widget-Areas in Sidebars, sondern nat&#252;rlich auch im Footer oder sonstwo in den Theme-Dateien erstellen kann.</p>
<p><img class="alignnone size-full wp-image-1331 shadow" title="Allgemeine Widget-Sidebar" src="http://www.onlinecasinodemar.com/wp-content/uploads/2009/09/widgets1.png" alt="Allgemeine Widget-Sidebar" width="300" height="110" /></p>
<p>Folgenden Code trage ich in die <em>functions.php</em> im Theme-Ordner ein, um zun&#228;chst die allgemeine Sidebar namens <em>Sidebar</em> zu erstellen.</p>
<p><strong>Code f&#252;r functions.php</strong></p>
<pre><code>&lt;?php
register_sidebar(array(
'name' =&gt; 'Sidebar',
'before_widget' =&gt; '&lt;div id='%1$s' class='%2$s'&gt;',
'after_widget' =&gt; '&lt;/div&gt;',
'before_title' =&gt; '&lt;h3&gt;',
'after_title' =&gt; '&lt;/h3&gt;'));
?&gt;</code></pre>
<p class="space"><em>Bemerkung:</em><br />
Das Format f&#252;r die Widgets ist somit festgelegt. Die Widget-Sidebar wird nun im WordPress-Admin bereits (wie oben im Bild zu sehen) angezeigt.</p>
<h3 id="widgets-2">Ausgabe der Widgets im Theme</h3>
<p>Jetzt muss dem WordPress-Theme noch gesagt, werden wo diese Widget-Area, wenn sie Widgets enth&#228;lt (aktiv ist), angezeigt werden soll (s.a. <a href="http://automattic.com/code/widgets/themes/">Widgetizing Themes</a> von Automattic).</p>
<p>F&#252;r den Aufruf der Widget-Area im Theme (in meinem Beispiel in der <em>sidebar.php</em>) wird die Funktion <code>dynamic_sidebar()</code> (s.a. <a href="http://codex.wordpress.org/Function_Reference/dynamic_sidebar">WordPress Codex</a>) verwendet.</p>
<p><strong>Code f&#252;r sidebar.php</strong></p>
<pre><code>&lt;div id='sidebar'&gt;

&lt;?php if ( !dynamic_sidebar() ) : ?&gt;

    &lt;!-- hier werden die Widgets angezeigt --&gt;
    &lt;p&gt;Inhalt der Sidebar, wenn keine Widgets aktiv sind.&lt;/p&gt;

&lt;?php endif; // endif dynamic sidebar ?&gt;

&lt;/div&gt;&lt;!-- end sidebar --&gt;</code></pre>
<p class="space"><em>Bemerkung:</em><br />
In diesem Code liegt meine Sidebar in einem <code>div</code> mit der ID <em>sidebar</em>. Wenn mindestens ein Widget aktiv ist, wird dieses innerhalb der if-Abfrage angezeigt.</p>
<h3 id="widgets-3">Erstellen mehrerer Widget-Areas</h3>
<p>In der <em>functions.php</em> lege ich nun auch die &#252;brigen Widget-Areas an, die wir dann sp&#228;ter in der Sidebar verschachteln wollen.</p>
<p><img src="http://www.onlinecasinodemar.com/wp-content/uploads/2009/09/widgets2.png" alt="Allgemeine Sidebar &amp; Unter-Sidebars" title="Allgemeine Sidebar &amp; Unter-Sidebars" width="390" height="260" class="alignnone size-full wp-image-1342 shadow" /></p>
<p>Wie schon angesprochen m&#246;chte ich eine allgemeine Sidebar erstellen, die immer dann angezeigt wird, wenn f&#252;r den jeweiligen Unterbereich kein Widget aktiv ist. Au&#223;erdem definiere ich die extra Widget-Areas f&#252;r Startseite, Seite, Artikeleinzelansicht und Kategorie.</p>
<p><strong>Code f&#252;r functions.php</strong></p>
<pre><code>&lt;?php

// Sidebar Nr. 1 - Allgemein
register_sidebar(array(
'name' =&gt; 'Sidebar',
'before_widget' =&gt; '&lt;div id='%1$s' class='%2$s'&gt;',
'after_widget' =&gt; '&lt;/div&gt;',
'before_title' =&gt; '&lt;h3&gt;',
'after_title' =&gt; '&lt;/h3&gt;'));

// Sidebar Nr. 2 - Startseite
register_sidebar(array(
'name' =&gt; 'Sidebar-Home',
'before_widget' =&gt; '&lt;div id='%1$s' class='%2$s'&gt;',
'after_widget' =&gt; '&lt;/div&gt;',
'before_title' =&gt; '&lt;h3&gt;',
'after_title' =&gt; '&lt;/h3&gt;'));

// Sidebar Nr. 3 - Seite
register_sidebar(array(
'name' =&gt; 'Sidebar-Page',
'before_widget' =&gt; '&lt;div id='%1$s' class='%2$s'&gt;',
'after_widget' =&gt; '&lt;/div&gt;',
'before_title' =&gt; '&lt;h3&gt;',
'after_title' =&gt; '&lt;/h3&gt;'));

// Sidebar Nr. 4 - Artikeleinzelansicht
register_sidebar(array(
'name' =&gt; 'Sidebar-Post',
'before_widget' =&gt; '&lt;div id='%1$s' class='%2$s'&gt;',
'after_widget' =&gt; '&lt;/div&gt;',
'before_title' =&gt; '&lt;h3&gt;',
'after_title' =&gt; '&lt;/h3&gt;'));

// Sidebar Nr. 5 - Kategorie
register_sidebar(array(
'name' =&gt; 'Sidebar-Category',
'before_widget' =&gt; '&lt;div id='%1$s' class='%2$s'&gt;',
'after_widget' =&gt; '&lt;/div&gt;',
'before_title' =&gt; '&lt;h3&gt;',
'after_title' =&gt; '&lt;/h3&gt;'));

?&gt;</code></pre>
<p class="space"><em>Bemerkung:</em><br />
Alle f&#252;r mein Beispiel ben&#246;tigten Widget-Sidebars sind nun angelegt. Um das Ganze &#252;bersichtlich zu halten, habe ich sinnvolle Namen vergeben und die Sidebars zur &#220;bersicht nummeriert (das brauchen wir sp&#228;ter noch).</p>
<h3 id="widgets-4">Verschachteln der Widget-Areas</h3>
<p>Nochmal zur Verdeutlichung: Es soll erreicht werden, dass, wenn wir uns bspw. in einer Artikeleinzelansicht (Post) befinden, abgefragt wird, ob f&#252;r diesen Unterbereich Widgets aktiv sind. Wenn das der Fall ist, werden diese in der Sidebar ausgegeben, wenn nicht, wird die allgemeine Startseite angezeigt. Die gleiche Abfrage soll f&#252;r die Unterbereiche Startseite, Seite und Kategorie gemacht werden.</p>
<p>Wo sich der Benutzer auf der Website befindet, kann ich mit folgenden Conditional Tags (s. a. <a href="http://codex.wordpress.org/Conditional_Tags">WordPress Codex</a>) abfragen:</p>
<ul>
<li><code>is_front_page()</code></li>
<li><code>is_page()</code></li>
<li><code>is_single()</code></li>
<li><code>is_archive()</code></li>
</ul>
<p>Parallel dazu muss ich herausfinden, ob eine bestimmte Widget-Area aktiv ist, d. h. ob ihr Widgets zugewiesen wurden. Das mache ich mit dem Conditional Tag <code>is_active_sidebar()</code>.</p>
<p>Die verschiedenen Sidebars werden durch den Namen, die ID oder der Nummer identifiziert. Ich habe mir f&#252;r die eindeutige Zuordnung durch die Nummer (Reihenfolge) entschieden.</p>
<ul>
<li>Nr. 1 = Sidebar Allgemein</li>
<li>Nr. 2 = Sidebar Startseite</li>
<li>Nr. 3 = Sidebar Seite</li>
<li>Nr. 4 = Sidebar Artikeleinzelansicht</li>
<li>Nr. 5 = Sidebar Kategorie</li>
</ul>
<p><strong>Code f&#252;r sidebar.php</strong></p>
<pre><code>&lt;div id='sidebar'&gt;

&lt;?php
    if(is_front_page() &amp;amp;&amp;amp; is_active_sidebar(2)) : dynamic_sidebar(2);
    elseif(is_page() &amp;amp;&amp;amp; is_active_sidebar(3)) : dynamic_sidebar(3);
    elseif(is_single() &amp;amp;&amp;amp; is_active_sidebar(4)) : dynamic_sidebar(4);
    elseif(is_archive() &amp;amp;&amp;amp; is_active_sidebar(5)) : dynamic_sidebar(5);

    else : 

        if (!dynamic_sidebar(1)) : ?&gt;

    	&lt;!-- hier werden die Widgets angezeigt --&gt;
    	&lt;p&gt;Inhalt der Sidebar, wenn keine Widgets aktiv sind.&lt;/p&gt;

        &lt;?php endif; // endif dynamic sidebar ?&gt;

&lt;?php endif; // endif active sidebars ?&gt;

&lt;/div&gt;&lt;!-- end sidebar --&gt;</code></pre>
<p><em>In Worten bedeutet dieser Code:</em></p>
<p>Wenn der User auf der Startseite ist und die Sidebar Nr. 2 aktiv ist, dann zeige diese an. Wenn sich der User auf einer Seite bewegt und die Sidebar Nr. 3 aktiv ist, dann zeige diese an. Wenn sich der User in einer Artikeleinzelansicht bewegt und die Sidebar Nr. 4 aktiv ist, dann zeige diese an. Wenn eine Kategorie angezeigt wird und die Sidebar Nr. 5 aktiv ist, dann zeige diese an.</p>
<p class="space">Wenn all das nicht der Fall ist, wird abgefragt, ob die allgemeine Sidebar Nr. 1 aktiv ist. Wenn auch das nicht der Fall ist, dann wird der Text <em>Inhalt der Sidebar, wenn keine Widgets aktiv sind.</em> angezeigt.</p>
<h3>Verbesserungsvorschl&#228;ge?</h3>
<p class="space">Da es sich meines Erachtens um ein interessantes Feature f&#252;r WordPress-Themes handelt, w&#252;rde ich mich &#252;ber Verbesserungsvorchl&#228;ge freuen, sollte jemand eine einfachere oder bessere L&#246;sung haben. Da ich kein PHP-Experte bin, kann es sein, dass dieser Code evtl. noch effektiver gestaltet werden kann.</p>
<h3>Fazit</h3>
<p class="space">Mit verschachtelten Widget-Areas kann man schon ein gutes St&#252;ck an Flexibilit&#228;t in einem WordPress-Theme gewinnen und sich somit weiter in Richtung CMS bewegen. Das Beispiel ist nat&#252;rlich beliebig erweiterbar, da man alle m&#246;glichen Abfragen f&#252;r die Anzeige verschiedener Widget-Areas verwenden kann. Hier ist Kreativit&#228;t gefragt.</p>
<h3>Relevante Links</h3>
<ul class="space">
<li>register_sidebar() &#8211; <a href="http://codex.wordpress.org/Function_Reference/register_sidebar">WordPress Codex</a></li>
<li>dynamic_sidebar() &#8211; <a href="http://codex.wordpress.org/Function_Reference/dynamic_sidebar">WordPress Codex</a></li>
<li>Conditional Tags &#8211; <a href="http://codex.wordpress.org/Conditional_Tags">WordPress Codex</a></li>
<li><a href="http://automattic.com/code/widgets/themes/">Widgetizing Themes</a> von Automattic</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.onlinecasinodemar.com/tutorials/tutorial-verschachtelte-wordpress-widget-areas/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

