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

18 ago 2010, 22:07:46
Vistas: 47.4K
Votos: 9

Descargo de responsabilidad: Soy completamente nuevo en WP.

Estoy usando el framework de tema Starkers HTML5. En el functions.php veo este código:

function starkers_widgets_init() {

  // Área 1, ubicada en la parte superior de la barra lateral
  register_sidebar( array(
    'name' => __( 'Área de Widget Principal', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'El área de widget principal', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Área 3, ubicada en el pie de página. Vacía por defecto.
  register_sidebar( array(
    'name' => __( 'Primera Área de Widget del Pie de Página', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'La primera área de widget del pie de página', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... más llamadas a register_sidebar() ... 
}

Y en footer.php veo este código:

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

No entiendo cómo get_sidebar() sabe cómo tomar ese argumento string y encontrar los widgets apropiados que fueron definidos por register_sidebar(). En el fragmento de functions.php que publiqué arriba, no hay ninguna mención de "footer" excepto en las propiedades name, id y description. Pero me parecería extraño que get_sidebar() busque 'footer' dentro de esas propiedades.

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

Las razones por las que pregunto son: - Me gustaría saber más sobre la arquitectura de WP - Me gustaría poder definir un área de widget personalizada y saber cómo renderizarla en una página específica.

Muchas gracias.

0
Todas las respuestas a la pregunta 4
2
11

Nunca me he molestado con get_sidebar(). En su lugar, simplemente 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 desordenadas. Si quiero tener 5 barras laterales diferentes, no agrega ningún archivo, solo funciones adicionales en functions.php.

18 ago 2010 22:25:06
Comentarios

En el caso de Starkers, sidebar-footer.php llama condicionalmente a dynamic_sidebar() para todas las áreas de widgets apropiadas.

User User
18 ago 2010 22:27:41

Eso puede ser cierto, pero si sabes la versión que estás ejecutando, no hay necesidad de llamarlo condicionalmente, ¿y por qué ejecutar un include si puedes simplemente llamar a la función directamente?

John P Bloch John P Bloch
18 ago 2010 22:30:43
0
10

Simplemente llamas a get_sidebar() desde index.php y este carga el archivo del tema sidebar.php.

Por otro lado, register_sidebar() se utiliza para widgets donde los plugins y similares quieren añadir contenido dinámicamente en tu archivo sidebar.php si tu tema lo soporta.

En tu caso, ¿existe un archivo llamado sidebar-footer.php en el directorio de tu tema?

18 ago 2010 22:16:44
0

get_sidebar('nombre') obtiene una plantilla de barra lateral con el nombre sidebar-nombre.php.

Dentro de sidebar-nombre.php, está el HTML para la barra lateral y una llamada a dynamic_sidebar('algún-nombre-ojalá-el-mismo'), que es donde irán los widgets.

register_sidebar(array(name=>'algún-nombre-ojalá-el-mismo', ...)) es lo que permite que dynamic_sidebar funcione.

Como puedes ver, get_sidebar(nombredelaplantilla) es para usar con plantillas de barras laterales. Si no las necesitas, puedes llamar directamente a dynamic_sidebar(nombredelabarra) desde tu tema.

10 sept 2015 21:23:52
0

get_sidebar('footer') intenta cargar sidebar-footer.php del tema activo. Starkers sí proporciona este archivo. Revisa starkers/sidebar-footer.php y las cosas deberían quedar claras.

18 ago 2010 22:20:52