Wie arbeiten register_sidebar () und get_sidebar () zusammen?


8

Haftungsausschluss: Ich bin brandneu bei WP.

Ich verwende das HTML5-Framework-Thema von Starkers . In dem functions.phpsehe ich diesen Code:

function starkers_widgets_init() {

  // Area 1, located at the top of the sidebar.
  register_sidebar( array(
    'name' => __( 'Primary Widget Area', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'The primary widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Area 3, located in the footer. Empty by default.
  register_sidebar( array(
    'name' => __( 'First Footer Widget Area', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'The first footer widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... more calls to register_sidebar() ... 
}

Und in footer.phpsehe ich diesen Code:

<?php get_sidebar( 'footer' ); ?>

Ich verstehe nicht, wie get_sidebar()man dieses String-Argument nimmt und die entsprechenden Widgets findet, die von definiert wurden register_sidebar(). In der Funktion.php Snippet habe ich oben gepostet. Es gibt keine Erwähnung von "Fußzeile" außer den name, idund descriptionEigenschaften. Aber es scheint mir seltsam get_sidebar(), in diesen Eigenschaften nach "Fußzeile" zu suchen.

Ist das sinnvoll, was ich frage? Fehlt ein Stück?

Die Gründe, die ich frage, sind, dass ich - ich möchte mehr über die WP-Architektur erfahren - einen benutzerdefinierten Widget-Bereich definieren und wissen möchte, wie er auf einer bestimmten Seite gerendert wird.

Danke vielmals.

Antworten:


9

Sie rufen einfach get_sidebar()von an index.phpund es wird die Themendatei geladen sidebar.php.

register_sidebar()sidebar.phpWird andererseits für Widgets verwendet, bei denen Plugins und dergleichen Inhalte dynamisch zu Ihrer Datei hinzufügen möchten, wenn Ihr Thema dies unterstützt.

Gibt es in Ihrem Fall eine Datei sidebar-footer.phpim Verzeichnis Ihres Themas?


9

Ich habe mich nie darum gekümmert get_sidebar(). Stattdessen benutze ich einfach dynamic_sidebar(). Sie würden es so nennen:

dynamic_sidebar('first-footer-widget-area');

Und das kümmert sich um die gesamte Seitenleiste. Keine Dateieinschlüsse mehr, keine überfüllten Themenordner mehr. Wenn ich 5 verschiedene Seitenleisten haben möchte, werden keine Dateien hinzugefügt, sondern nur zusätzliche Funktionen functions.php.


Fordert bei Starkers sidebar-footer.phpbedingt dynamic_sidebar()alle entsprechenden Widget-Bereiche auf.
Annika Backstrom

Das mag wahr sein, aber wenn Sie die Version kennen, die Sie ausführen, müssen Sie sie nicht bedingt aufrufen, und warum ein Include ausführen, wenn Sie die Funktion nur direkt aufrufen können?
John P Bloch

5

get_sidebar('name')Ruft eine Seitenleistenvorlage mit dem Namen ab sidebar-name.php .

In sidebar-name.php gibt es den HTML-Code für die Seitenleiste und einen Aufruf von dynamic_sidebar('some-name-hopefully-the-same'), wohin die Widgets gehen.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) Damit kann dynamic_sidebar funktionieren.

Wie Sie sehen können, get_sidebar(templatename)ist für die Verwendung mit Seitenleisten-Vorlagen. Wenn Sie sie nicht benötigen, können Sie dynamic_sidebar(sidebarname)direkt von Ihrem Thema aus anrufen .


3

get_sidebar('footer')versucht, sidebar-footer.phpaus dem aktiven Thema zu laden . Starkers stellt diese Datei zur Verfügung. Überprüfen Sie starkers/sidebar-footer.phpund die Dinge sollten klar werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.