Gabis Wordpress-Templates

Themes und nützliche Tipps für WordPress-Weblogs

Widgets: Keine böse Überraschungen in der Sidebar

WordPress liefert für alle hauseigenen Template-Tags in der Sidebar (Suche, Kategorien, Tags, Archiv, Kalender, Links, RSS, Seiten und Meta) eigene Widgets mit. Diese Widgetfunktionen sind in der Datei includes/widgets.php verankert. Wenn man ein widgetfähiges Theme erstellt und das Layout-Gerüst für die Standard-Sidebar soweit steht, sollte man auf jeden Fall eine “Widget-Probe” machen, indem man sie einmal alle in die Sidebar zieht und sich das Ganze dann ansieht.

Die standardmäßige HTML-Struktur eines von WordPress erzeugten Widgets ist folgende:


Überschrift
<ul>
<li>...</li>
<li>...</li>
</ul>

In der funktions.php kann man ein wenig Einfluß auf die Struktur nehmen, man kann HTML-Code vor und hinter dem Widget einfügen, sowie den Titel in HTML-Tags auszeichnen.

Möchte man diese Strukur im Widget ausgeben (Beispiel Archiv):


<div class="box">
<h2>Archiv</h2>
<ul>
<?php wp_get_archives(); ?></ul>
</div><!--Ende box-->

… notiert man in der funtions.php wie folgt:


'before_widget' => '<div class="box">',
'after_widget' => '</div><!--Ende box-->',
'before_title' => '<h2>',
'after_title' => '</h2>',

Soweit, so gut – aber was ist, wenn die HTML-Strukur in der Sidebar sich mit den vorhandenen Möglichkeiten nicht abbilden lässt, wie etwa diese hier:


<div id="archives" class="dbx-box">
<h2 class="dbx-handle">Blog-Archiv</h2>
<div class="dbx-content">
<ul><?php wp_get_archives('type=monthly&limit=12'); ?></ul>
</div>
</div>

Die unglücklichste Lösung ist, die Struktur in der widgets.php anzupassen, es ist nicht zu empfehlen, die Core-Dateien von WordPress zu modifizieren, spätestens beim nächsten Update ist nämlich alles wieder beim Alten und die widgets.php muß erneut editiert werden. Und für Themes als Download-Angebot geht das logischweise schon gar nicht.

Dann bleibt noch die Möglichkeit, eigene Widgets zu erstellen. Das geschieht ebenfalls in der functions.php. Diese Widgets tauchen dann im Widget-Bereich zwischen all den anderen auf und man erkennt am Namen, welche zum Theme gehören. Für das oben genannte Beispiel sieht das so aus:


<?php function widget_meintheme_archives() {
?>
<div id="archives" class="dbx-box">
<h2 class="dbx-handle">Blog-Archiv</h2>
<div class="dbx-content">
<ul><?php wp_get_archives('type=monthly&limit=12'); ?></ul>
</div>
</div>
<?php
}
if ( function_exists('register_sidebar_widget') )
register_sidebar_widget('MeinTheme Archiv', 'widget_meintheme_archives');
?>

Erklärung der Einzelschritte:

Zuerst rufe ich das Widget ins Leben mit dem Aufruf:

function widget_meintheme_archives()

Dann folgt meine HTML-Struktur, die genauso aufgebaut ist wie in der normalen Sidebar:


<div id="archives" class="dbx-box">
<h2 class="dbx-handle">Blog-Archiv</h2>
<div class="dbx-content">
<ul><?php wp_get_archives('type=monthly&limit=12'); ?></ul>
</div>
</div>

…und zum Schluß frage ich ab, ob die Funktion vorhanden ist und wenn ja, rufe ich sie auf:


if ( function_exists('register_sidebar_widget') )
register_sidebar_widget('MeinTheme Archiv', 'widget_meintheme_archives');

Nun ist beim Einsatz des Themes im Widget-Bereich ein Archiv-Widget mit dem Namen MeinTheme Archiv zu finden. Dieses Widget bildet bei Verwendung die Struktur genauso ab wie in der ursprünglichen Sidebar – auch die Anzeige der Monate ist, wie im Original, auf 12 begrenzt.

Ferner hat man noch die Möglichkeit, die WordPress-Widgets mit individuellen css-Klassen zu versehen. Hierfür verwendet man in der functions.php als class und id eine Variable, das Ganze sieht dann so aus:


'before_widget' => '<li id="%1$s" class="widget %2$s">',
'after_widget' => '</li>',
'before_title' => '<h2 class="widgettitle">',
'after_title' => '</h2>',

Die auf diese Art erzeugten Bezeichnungen für ID’s und Klassen erfährt man, wenn man einfach mal sämtliche Widgets ins Theme zieht, speichert und sich dann den Quellcode der Seite anzeigen läßt. Nun kann man diese ID’s und Klassen in die style.css übernehmen und ihnen dort Formateigenschaften zuweisen.

Ähnliche Beiträge:

  • Keine ähnlichen Beiträge

Diesen Beitrag bookmarken:

12 Kommentare

  1. Theme-Flo sagt:

    @Thorben
    guckst du in den Kalender? Nicht? Deine User auch nicht. Bestimmt! ^^
    mfg flo

  2. Thorben sagt:

    Hast Du auch ne Lösung wie man am besten dieses Kalender Widget auf nofollow setzt wenn die einzelnen Tage verlinkt sind? Ich bekomme hier noch ne Macke damit!

  3. Wolf sagt:

    Danke für die nützlichen Infos. Arbeite gerade an meinem ersten eigenen Theme und habe derzeit mit der Anpassung der Sidebar zu kämpfen.

  4. astu sagt:

    Nichts für ungut… aber ich werde hierraus nich wirklich schlau… gibt es den nirgends ein Tutorial was einfacher geschrieben ist???

  5. [...] Gabis WordPress Templates – Widgets keine bösen Überraschungen mehr [...]

  6. Flo sagt:

    Hallo!

    Bin zufällig auf diesen Beitrag gestoßen, ich versuche ein eigendesignes Archiv Drop Down Menü als Widget zu erstellen.

    Der Quellcode sieht so aus:
    https://vaitor.com/temp/wpc-archiv.txt

    Habe probiert mit den function und if befehlen das ganze als widget in der function.php einzubinden, allerdings kommen entweder php fehler oder alles klappt, jedoch ist das drop down menü dann einfach nur unten in der sidebar und nicht als widget im admin menü angezeigt.

    weisst du wie ich den code vervorständigen kann damit er funktioniert ?

    grüße

  7. Gabi sagt:

    Nein, es sind drei Abschnitte und die Abfolge ist:

    - PHP-Code
    - HTML-Code
    - PHP-Code

    Man könnte möglicherweise auch alles in PHP-Klammern stecken und das HTML mittels echo ausgeben.

  8. Blui sagt:

    Ja, schon klar. Aber rein logisch hätte ich sie hinter das zweite “/div” gesetzt da sie doch im Grunde die Funktion umschließt, oder? Und dort wo sie jetzt steht ist sie ja irgendwie schon in der Abfrage.
    Oder sehe ich das falsch?

  9. Gabi sagt:

    Nicht unbedingt – machmal steht einfach eine einsame geschweifte “Klammer zu” in PHP. Aber die Klammer hat auch irgendwo weiter oben im Code ihr anders herum gedrehtes Gegenstück, sonst gäbe es ja Fehlermeldung ;-)

  10. Blui sagt:

    Danke. Vorhin hab ich es einmal hinbekommen. Aber wenn ich noch ein weiters Widget hinzu fügen möchte gehts dann plötzlich nicht mehr. Auch nicht wenn ich den Teil für das zweite Widget wieder lösche :???:

    Was mich allerdings bei Deinem Code etwas verwundert ist das dort

    .
    .
    <?php
    }
    .
    .

    steht. Müsste es nicht anders herum sein?

  11. Gabi sagt:

    Hallo Blui,

    die ganzen Notationen für die Widgets erfolgen in der functions.php im Themeverzeichnis.

    Lade dir mal meine Themes “XmasCat und “Chestnut” herunter und schaue dir da die Sidebar und die funktions.php ab, ich denke, dann wirst du auch ohne großartige PHP-Kenntnisse (die habe ich nämlich, by the way, auch nicht) die Strukturen durchschauen.

  12. Blui sagt:

    Das ganze klingt ja nun fast schon verständlich, allerdings entstehen noch so 2-5 Fragen:

    1.: Wo lege ich diese Datei dann ab? Ins Theme-Verzeichnis oder im Includes-Bereich?
    2.: Die datei für obrigens Beispiel heißt dann “widget_meintheme_archives.php”?
    3.: Wo genau rufst Du das Widget dann “ins Leben”?
    und 4.:Wohin mit dem Funktionsaufruf “if ( function_exists(‘register_sidebar….”?

    Sorry für meine vermutlich für Dich sehr blöden Fragen, aber ich glaube PHP wird für mich noch lange ein Rätsel bleiben. :roll:

Kommentar schreiben




XHTML Erlaubte Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Mit Absenden des Kommentars erkläre ich meine Einwilligung zur Verarbeitung der eingegebenen Daten gemäß Datenschutzerklärung



  • ...
  • Statistik

    • 83 Artikel
    • 245 Kommentare
    • 33 Kategorien
    • 41 Verweise. 1,440 Sekunden.
Gabis Wordpress-Templates - WordPress 3.0.4 Anpassung und Design: Gabi. 0 Besucher online