Como register_sidebar () e get_sidebar () funcionam juntos?


8

Isenção de responsabilidade: eu sou novato no WP.

Estou usando o tema da estrutura Starkers HTML5 . No functions.phpeu vejo 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() ... 
}

E footer.phpeu vejo este código:

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

Eu não entendo como get_sidebar()sabe como pegar esse argumento de string e encontrar os widgets apropriados que foram definidos por register_sidebar(). No trecho functions.php eu postei acima. Não há qualquer menção de "rodapé", exceto para os name, ide descriptionpropriedades. Mas me pareceu estranho get_sidebar()procurar por 'rodapé' nessas propriedades.

Isso faz sentido o que estou perguntando? Há alguma peça que falta?

As razões pelas quais estou perguntando é porque - gostaria de saber mais sobre a arquitetura WP - gostaria de poder definir uma área de widget personalizada e saber como renderizá-la em uma página específica.

Muito obrigado.

Respostas:


9

Você acabou de chamar get_sidebar()a partir index.phpe ele carrega o arquivo de tema sidebar.php.

register_sidebar(), por outro lado, é usado para widgets nos quais plug-ins e outros desejam adicionar dinamicamente conteúdo ao seu sidebar.phparquivo, se o seu tema o suportar.

No seu caso, existe um arquivo chamado sidebar-footer.phpno diretório do seu tema?


9

Eu nunca me incomodei get_sidebar(). Em vez disso, eu apenas uso dynamic_sidebar(). Você chamaria assim:

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

E isso cuida de toda a barra lateral. Sem mais inclusões de arquivos, sem mais pastas de temas desordenadas. Se eu quero ter 5 barras laterais diferentes, ele não adiciona nenhum arquivo, apenas funções extras functions.php.


No caso de Starkers, sidebar-footer.phpsolicita condicionalmente dynamic_sidebar()todas as áreas de widget apropriadas.
Annika Backstrom

Isso pode ser verdade, mas se você conhece a versão que está executando, não há necessidade de chamá-la condicionalmente, e por que executar um include se você pode simplesmente chamar a função diretamente?
John P Bloch

5

get_sidebar('name')obtém um modelo da barra lateral do nome sidebar-name.php .

No sidebar-name.php, existe o HTML da barra lateral e uma chamada para dynamic_sidebar('some-name-hopefully-the-same'), para onde os widgets irão.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) é o que permite que a dynamic_sidebar funcione.

Como você pode ver, get_sidebar(templatename)é para uso com modelos da barra lateral. Se você não precisar deles, basta ligar dynamic_sidebar(sidebarname)diretamente do seu tema.


3

get_sidebar('footer')tenta carregar a sidebar-footer.phppartir do tema ativo. Starkers fornece esse arquivo. Verifique starkers/sidebar-footer.phpe as coisas devem ficar claras.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.