¿Cómo funcionan juntas register_sidebar () y get_sidebar ()?

8

Descargo de responsabilidad: soy completamente nuevo en WP.

Estoy usando el tema del marco HTML5 de Starkers . En el functions.phpveo este código:

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() ... 
}

Y en footer.phpveo este código:

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

No entiendo cómo get_sidebar()sabe cómo tomar ese argumento de cadena y encontrar los widgets apropiados que fueron definidos por register_sidebar(). En el fragmento functions.php que publiqué anteriormente. No hay ninguna mención de "pie" a excepción de los name, idy descriptionpropiedades. Pero me parecería extraño que get_sidebar()buscara 'pie de página' dentro de esas propiedades.

¿Tiene sentido lo que estoy preguntando? ¿Hay alguna pieza faltante?

Las razones por las que pregunto es porque, me gustaría saber más sobre la arquitectura WP, me gustaría poder definir un área de widget personalizada y saber cómo representarla en una página específica.

Gracias una tonelada.

jessegavin
fuente

Respuestas:

9

Simplemente llama get_sidebar()desde index.phpy carga el archivo de tema sidebar.php.

register_sidebar(), por otro lado, se usa para widgets en los que los complementos y similares desean agregar contenido dinámicamente a su sidebar.phparchivo si su tema lo admite.

En su caso, ¿hay un archivo llamado sidebar-footer.phpen el directorio de su tema?

john010117
fuente
9

Nunca me he molestado get_sidebar(). En cambio, solo uso dynamic_sidebar(). Lo llamarías así:

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

Y eso se encarga de toda la barra lateral. No más inclusiones de archivos, no más carpetas de temas desordenados. Si quiero tener 5 barras laterales diferentes, no agrega ningún archivo, solo funciones adicionales functions.php.

John P Bloch
fuente
En el caso de Starkers, sidebar-footer.phprequiere condicionalmente dynamic_sidebar()todas las áreas de widgets apropiadas.
Annika Backstrom
Eso puede ser cierto, pero si conoce la versión que está ejecutando, no hay necesidad de llamarla condicionalmente, y ¿por qué ejecutar una inclusión si solo puede llamar a la función directamente?
John P Bloch
5

get_sidebar('name')obtiene una plantilla de barra lateral del nombre sidebar-name.php .

Dentro de sidebar-name.php, está el HTML para la barra lateral y una llamada a dynamic_sidebar('some-name-hopefully-the-same'), que es donde irán los widgets.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) es lo que permite que dynamic_sidebar funcione.

Como puede ver, get_sidebar(templatename)es para usar con plantillas de barra lateral. Si no los necesita, puede llamar dynamic_sidebar(sidebarname)directamente desde su tema.

Gerard ONeill
fuente
3

get_sidebar('footer')intenta cargar sidebar-footer.phpdesde el tema activo. Starkers proporciona este archivo. Verifique starkers/sidebar-footer.phpy las cosas deberían aclararse.

Annika Backstrom
fuente