Sidebar Widget-fähig machen

Ein Widget-fähiges Theme ist heutzutage fast schon Standard und aufjedenfall Pflicht, wenn man vorhat das Theme anderen zugänglich zu machen. Ein widget-fähiges Theme erlaubt es dem Admin bestimmte Inhalte im Blog an und abzuschalten, z.b. die Blogroll, das Archiv, die Kategorien etc.

Wem Widgets bislang nichts sagen, sollte sich diesen Artikel durchlesen: Widgets für WordPress

Damit dein Theme auch Widget-fähig wird, musst du eigentlich nicht viel machen. Erstelle als erstes im Hauptverzeichnis deines Themes die Datei functions.php und füge folgenden Code ein:

<?php
if ( function_exists('register_sidebar') )
register_sidebar();
?>

Als nächstes öffnen wir die Datei sidebar.php:

<h2>Suche</h2>
<p>
<form method="get" id="searchform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
	<input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name="s" id="s" />
	<input type="submit" id="search_submit" value="Suchen" />
</form>
</p>

<h2>&Uuml;ber diesen Blog</h2>
<p class="mini_about">
	Hallo, mein Name ist Christian und du siehst hier das Tutorial Template aus dem <a href="http://wordpress.lernenhoch2.de/handbuch/">Wordpress Template Tutorial</a> auf <a href="http://lernenhoch2.de/">Lernen²</a>
</p>

<h2>Kategorien</h2>
<ul>
	<?php wp_list_categories('orderby=name&order=ASC&title_li='); ?>
</ul>

<h2>Archiv</h2>
<ul>
	<?php wp_get_archives('type=monthly'); ?>
</ul>

<h2>Blogroll</h2>
<ul>
	<?php wp_list_bookmarks(); ?>
</ul>

Den derzeitigen Quellcode müssen wir nun etwas anpassen. Wenn der Admin kein Widget auf die Sidebar gezogen hat, soll unsere Standard Sidebar angezeigt werden, ansonsten werden alle Widgets angezeigt, die der Admin hinzugefügt hat:

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>

<h2>Suche</h2>
<p>
<form method="get" id="searchform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
	<input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name="s" id="s" />
	<input type="submit" id="search_submit" value="Suchen" />
</form>
</p>

<h2>&Uuml;ber diesen Blog</h2>
<p class="mini_about">
	Hallo, mein Name ist Christian und du siehst hier das Tutorial Template aus dem <a href="http://wordpress.lernenhoch2.de/handbuch/">Wordpress Template Tutorial</a> auf <a href="http://lernenhoch2.de/">Lernen²</a>
</p>

<h2>Kategorien</h2>
<ul>
	<?php wp_list_categories('orderby=name&order=ASC&title_li='); ?>
</ul>

<h2>Archiv</h2>
<ul>
	<?php wp_get_archives('type=monthly'); ?>
</ul>

<h2>Seiten</h2>
<ul>
	<?php wp_list_pages(); ?>
</ul>

<h2>Blogroll</h2>
<ul>
	<?php wp_list_bookmarks(); ?>
</ul>

<?php endif; ?>

Mit den Widgets können alle unsere Blöcke erstellt werden und auch der Titel für den Blog, z.b. „Über diesen Blog“ kann frei gewählt werden, ohne in den Template-Code eingreifen zu müssen. Lösche jetzt den Inhalt der Datei sidebar.php und ersetzte ihn mit obigen.

Nun sollte die Sidebar unseres WordPress Tutorial Templates widget-fähig sein.

hier geht's weiter...



Kommentare


Kann es sein, dass in der ersten zeile ein Syntaxfehler vorliegt? Sollte dort anstelle eines Doppelpunktes nicht ein Semikolon stehen?


Hallo Marco,
nein, dass ist korrekt so. Man kann PHP nutzen um einen HTML Block anzuzeigen, wenn bestimmte Bedingungen erfüllt sind. Schau dir dazu mal im PHP Tutorial folgenden Teil an: Endif – Alternative Syntax zur geschweiften Klammer


hm.. aber die Schreibweise aus diesem Artikel hat für einen Syntaxfehler bei mir gesorgt, mit Semikolon funktioniert es?!


mh.. da weiß ich leider auch nicht weiter, vielleicht wenn das Leerzeichen vor dem Doppelpunkt weggelassen wird?


Ach: Und der Link "Widgets für WordPress" öffnet sich leider nicht. :(


Ups, nun sollte er gehen :)


Bis hierher hat alles bestens geklappt. Aber nach dem Einfügen der neuen ersten Zeile in sidebar.php kommt auch bei mir diese Fehlermeldung:

Parse error: syntax error, unexpected $end in /home/www/web12/html/www.jbuchert.de/wp-content/themes/basis/sidebar.php on line 35

Was hat zu dem jüngsten Kommentar "Ups, nun sollte er gehen :) " geführt? Wo ist was zu ändern?


Hast du auch die letzte Zeile eingefügt? Die übersieht man schnell.


Danke für die schnelle Reaktion, unsere Lösungen haben sich offensichtlich gekreuzt.


Entwarnung, Fehler gefunden: Das endif als letzter Befehl in sidebar.php hat gefehlt:
<?php endif; ?>


Noch eine Frage: Ich bekomme drei ähnlich lautende Fehlermeldungen:

"Warning: Cannot modify header information – headers already sent by (output started at /home/www/web12/html/www.jbuchert.de/wp-content/themes/basis/functions.php:4) in /home/www/web12/html/www.jbuchert.de/wp-comments-post.php on line 97"

"Warning: Cannot modify header information – headers already sent by (output started at /home/www/web12/html/www.jbuchert.de/wp-content/themes/basis/functions.php:4) in /home/www/web12/html/www.jbuchert.de/wp-includes/pluggable.php on line 934"

"Warning: Cannot modify header information – headers already sent by (output started at /home/www/web12/html/www.jbuchert.de/wp-content/themes/basis/functions.php:6) in /home/www/web12/html/www.jbuchert.de/wp-login.php on line 353""


Du hast in irgendeinem File wahrscheinlich ein Leerzeichen zuviel, es muss sich dabei nicht mal um die angegebenen Dateien handeln, schau dir dazu mal folgenden Artikel an: http://webdesignblog.de/sonstiges/cannot-modify-h


Danke, der Link hat geholfen.
Das wars: In der letzten Zeile von functions.php waren Leerzeichen hinter "?>"
Muss beim Kopieren mit reingerutscht sein.

SUPER Tutorial und SUPER Service! Nochmals danke

Kommentar schreiben

Kommentar

Hilfe:

<strong>fettgedruckt</strong> => fettgedruckt

<em>kursiv</em> => kursiv

<a href="http://wordpress.lernenhoch2.de">Link</a> => Link

[code]<?php echo 'hello world'; ?>[/code]

*

Feedback Formular