2 maneiras de criar e exibir widgets de rodapé no WordPress

Aqui está nossa demonstração estática inicial que iremos converter em um tema WordPress (as cores foram alteradas para a versão WordPress):

Faça um plano

Para esta demonstração, criaremos um novo tema WordPress simples e personalizado (Parque infantil). Sua estrutura de arquivos ficará assim:

A estrutura do temaA estrutura do temaA estrutura do tema
A estrutura do tema

Iremos hospedá-lo em um repositório GitHub de onde você poderá baixá-lo e, em seguida, instalá-lo e ativá-lo em um site WordPress.

Como já sabemos pelas demonstrações, nosso rodapé consiste em quatro colunas. As três primeiras colunas incluem um título e uma lista com links, enquanto a quarta inclui um título e alguns ícones sociais com links para os canais associados.

As colunas de rodapéAs colunas de rodapéAs colunas de rodapé

O objetivo é manter os estilos existentes, mas permitir que os administradores do site atualizem o conteúdo das colunas. Por exemplo, eles podem querer remover um link ou alterar o texto de um título. Para conseguir isso, passaremos por dois métodos:

  • Defina novas áreas de widget/rodapé usando o register_sidebar() função integrada.
  • Use a versão gratuita do plugin ACF – um dos plugins WordPress mais populares – para definir um Opções página que tratará o conteúdo do rodapé.

Dependendo do método selecionado, o código associado responsável por exibir as colunas de rodapé no front end ficará no main-footer-widgets.php ou main-footer-acf.php arquivos.

Para testá-lo, após a ativação do tema, navegue até a URL raiz do seu site e certifique-se de ver algo assim. No meu caso, estou usando o WordPress 6.3, que é a versão mais recente no momento em que este livro foi escrito.

O layout do siteO layout do siteO layout do site

Obviamente, as colunas do rodapé estarão vazias. Para preenchê-lo, use um dos métodos descritos nas próximas seções.

No mundo WordPress, widgets são informações adicionadas a diferentes seções do site, como barras laterais, cabeçalhos e rodapés. Eles vivem dentro de uma área de widgets, ou como costuma ser chamado de Barra Lateral. Cada área de widget pode ter um ou mais widgets.

Exemplos comuns de widgets populares incluem aqueles que mostram categorias de postagens, comentários de postagens, menus de navegação, links de páginas, links sociais, formulários de boletins informativos, etc.

O WordPress vem com vários widgets predefinidos, mas você sempre pode adicionar os seus próprios, codificando-os ou instalando um plugin.

Dependendo das configurações do seu tema, você pode encontrar as áreas de widgets registradas e alimentá-las com widgets no Personalizador de tema ou Aparência > Widgets nas telas de administração do WordPress.

Widgets de rodapé sem plug-in

O register_sidebar() função integrada nos permite criar novas áreas de widgets. No nosso caso, precisamos de quatro colunas, então chamaremos essa função quatro vezes. Mas quando vamos ligar? Na verdade, quando todos os widgets padrão do WordPress tiverem sido registrados. Isso é o que widgets_init gancho é responsável por.

Aqui está o código que precisamos inserir no functions.php arquivo:

1
function playground_sidebar_registration() {
2
    $shared_args = array(
3
        'before_title'  => '
',
4
        'after_title'   => '',
5
        'before_widget' => '
',
6
        'after_widget'  => '',
7
    );
8
    
9
    register_sidebar(
10
        array_merge(
11
            $shared_args,
12
            array(
13
                'name'        => __( 'Footer 1', 'playground' ),
14
                'id'          => 'footer-1',
15
                'description' => __( 'Add widgets here.', 'playground' ),
16
            )
17
        )
18
    );
19
    
20
    register_sidebar(
21
        array_merge(
22
            $shared_args,
23
            array(
24
                'name'        => __( 'Footer 2', 'playground' ),
25
                'id'          => 'footer-2',
26
                'description' => __( 'Add widgets here.', 'playground' ),
27
            )
28
        )
29
    );
30
    
31
    register_sidebar(
32
        array_merge(
33
            $shared_args,
34
            array(
35
                'name'        => __( 'Footer 3', 'playground' ),
36
                'id'          => 'footer-3',
37
                'description' => __( 'Add widgets here.', 'playground' ),
38
            )
39
        )
40
    );
41
    
42
    register_sidebar(
43
        array_merge(
44
            $shared_args,
45
            array(
46
                'name'        => __( 'Footer 4', 'playground' ),
47
                'id'          => 'footer-4',
48
                'description' => __( 'Add widgets here.', 'playground' ),
49
            )
50
        )
51
    );
52
}
53
add_action( 'widgets_init', 'playground_sidebar_registration' );

O título do widget que adicionamos por meio do código estará disponível apenas nos widgets legados (veja a próxima seção).

Depois de fazer isso, veremos as áreas de widget recém-adicionadas dentro do Widgets página de administração.

A partir daqui, podemos adicionar blocos como faríamos no Post Editor.

Blocos para adicionar aos widgetsBlocos para adicionar aos widgetsBlocos para adicionar aos widgets

Nas três primeiras áreas de widgets, adicionaremos dois blocos de texto: um Cabeçalho e um Lista.

Os blocos adicionados nas três primeiras áreas de widgetsOs blocos adicionados nas três primeiras áreas de widgetsOs blocos adicionados nas três primeiras áreas de widgets

Na quarta área de widget, adicionaremos um HTML personalizado bloco onde inseriremos o código das redes sociais.

Os blocos adicionados na quarta área do widgetOs blocos adicionados na quarta área do widgetOs blocos adicionados na quarta área do widget

Uma implementação alternativa, em vez de usar o bloco HTML personalizado, seria armazenar os links sociais em uma página de opções de tema e gerar a marcação acima usando um shortcode. De qualquer forma, é provável que os links sociais apareçam em outras partes do site, como cabeçalho e páginas de contato.

Então, para mostrar os widgets no front end, usaremos o dynamic_sidebar() e passe como parâmetro o ID da área do widget cadastrada associada. Além disso, antes de imprimir os widgets no front end, usaremos o is_active_sidebar() função para verificar se as áreas do widget contêm algum deles.

Aqui está o código completo adicionado dentro do main-footer-widgets.php arquivo:

1
 class="site-footer">
2
     class="container">
3
         class="logo-wrapper">
4
             width="178" height="38" src="https://assets.codepen.io/162656/forecastr-logo-white.svg" alt="forecastr logo">
5
            
...for creating memories!
6
        
7
        
8
         class="widgets-wrapper">
9
             if ( is_active_sidebar( 'footer-1' ) ) : ?>
10
                 class="widget">
11
                     dynamic_sidebar( 'footer-1' ); ?>
12
                
13
                
14
            endif;
15
            
16
            if ( is_active_sidebar( 'footer-2' ) ) :
17
                ?>
18
                 class="widget">
19
                     dynamic_sidebar( 'footer-2' ); ?>
20
                
21
                
22
            endif;
23
            
24
            if ( is_active_sidebar( 'footer-3' ) ) :
25
                ?>
26
                 class="widget">
27
                     dynamic_sidebar( 'footer-3' ); ?>
28
                
29
                
30
            endif;
31
            
32
            if ( is_active_sidebar( 'footer-4' ) ) :
33
                ?>
34
                 class="widget">
35
                     dynamic_sidebar( 'footer-4' ); ?>
36
                
37
             endif; ?>
38
        
39
    
40

Remova o editor de blocos de widgets

O WordPress 5.8 substituiu os widgets clássicos por aqueles baseados em blocos de Gutenberg. Ainda assim, existem muitas opções caso queiramos desabilitar o Widgets Block Editor e criar os widgets usando o Classic Widgets Editor. Uma abordagem é adicionar o seguinte código ao functions.php arquivo ou instale o plugin Classis Widgets.

1
function playground_setup() {
2
    remove_theme_support( 'widgets-block-editor' );
3
}
4
add_action( 'after_setup_theme', 'playground_setup' );

Ao fazer isso, teremos disponível o clássico Texto widget para preencher as áreas de widgets.

O widget de texto clássicoO widget de texto clássicoO widget de texto clássico

Para obter mais informações sobre a compatibilidade dos widgets clássicos e baseados em blocos, consulte a documentação oficial.

Widgets de rodapé com ACF

Existem muitos plug-ins disponíveis para configurar widgets de rodapé. Um dos meus favoritos são os Advanced Custom Fields (ACF), que fornecem controle total da marcação de saída. O principal uso dele é a criação de campos personalizados, tipos de postagem e taxonomias. Um dos ótimos complementos de sua versão premium (ACF PRO) é o Página de opções. Funciona como a página principal de opções de tema, onde especificamos configurações genéricas que devem estar disponíveis em qualquer página, como links sociais, banners, APIs, etc.

Vale ressaltar que no momento em que escrevo este artigo, estou usando a versão mais recente do plugin (6.2.0).

No nosso caso, não teremos esta página integrada, pois instalaremos a versão gratuita do plugin. No entanto, podemos construí-lo de alguma forma. Dito isto, vamos criar um modelo de página personalizado (Página de opções) dentro de page-templates pasta.

Nosso modelo de página personalizadoNosso modelo de página personalizadoNosso modelo de página personalizado

Em seguida, definiremos um novo Grupo de Campos (Campos da página de opções) que aparecerá apenas na página de opções. Dentro deste grupo, declararemos como widgets:

  • Quatro Wysiwyg campos e
  • um Grupo campo para os sociais. Este campo será composto por quatro URL campos para armazenar os links sociais.
Os campos de rodapéOs campos de rodapéOs campos de rodapé
Os campos de links sociaisOs campos de links sociaisOs campos de links sociais

Agora, se formos para a página de opções, veremos esses novos campos e poderemos adicionar conteúdo a eles.

Os novos campos ACFOs novos campos ACFOs novos campos ACF
Os novos campos ACFOs novos campos ACFOs novos campos ACF

Para exibir o conteúdo da página de opções, primeiro teremos que pegar seu ID. A consulta abaixo fará este trabalho:

1
$options_page_id = get_posts(
2
    array(
3
        'post_type'      => 'page',
4
        'posts_per_page' => 1,
5
        'fields'         => 'ids',
6
        'meta_key'       => '_wp_page_template',
7
        'meta_value'     => 'page-templates/options.php',
8
    )
9
)[0];

É mais sensato evitar codificar o ID da página no código, pois, em algum momento, podemos usar outra página como página de opções ou querer traduzi-la para outros idiomas.

Então, usando ACF get_field() função, pegaremos os campos dos quatro Campos Wysiwyg e produza-os após fazer as verificações essenciais.

Aqui está o código necessário adicionado dentro do main-footer-acf.php arquivo:

1
 
2
$footer1 = get_field( 'footer_1', $options_page_id );
3
$footer2 = get_field( 'footer_2', $options_page_id );
4
$footer3 = get_field( 'footer_3', $options_page_id );
5
$footer4 = get_field( 'footer_4', $options_page_id );
6
?>
7

8
 class="site-footer">
9
     class="container">
10
         class="logo-wrapper">
11
             width="178" height="38" src="https://assets.codepen.io/162656/forecastr-logo-white.svg" alt="forecastr logo">
12
            
...for creating memories!
13
        
14
        
15
         class="widgets-wrapper">
16
             if ( $footer1 ) : ?>
17
                 class="widget">
18
                     echo wp_kses_post( $footer1 ); ?>
19
                
20
                
21
            endif;
22
            
23
            if ( $footer2 ) :
24
                ?>
25
                 class="widget">
26
                     echo wp_kses_post( $footer2 ); ?>
27
                
28
                
29
            endif;
30
            
31
            if ( $footer3 ) :
32
                ?>
33
                 class="widget">
34
                     echo wp_kses_post( $footer3 ); ?>
35
                
36
             endif; ?>
37
            
38
             class="widget">
39
                
40
                if ( $footer4 ) :
41
                    echo wp_kses_post( $footer4 );
42
                endif;
43
                // SOCIALS HERE

44
                ?>
45
            
46
        
47
    
48

Seguindo em frente, dentro da quarta coluna, adicionaremos também o código para exibição das redes sociais. Neste caso, adicionaremos algumas verificações, pois algumas contas sociais podem não estar disponíveis.

Aqui está o código:

1
 
2
$socials         = get_field( 'socials', $options_page_id );
3
$socials_fb      = $socials['facebook'];
4
$socials_in      = $socials['instagram'];
5
$socials_link    = $socials['linkedin'];
6
$socials_yt      = $socials['youtube'];
7

8
<ul class="socials">
9
    php if ( $socials_fb ) : ?>
10
        
  • 11
                 href=" echo esc_url( $socials_fb ); ?>" aria-label="Find us on Facebook" target="_blank">
    
    12
                     xmlns="https://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-hidden="true">
    
    13
                         d="M12 0c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm3 8h-1.35c-.538 0-.65.221-.65.778v1.222h2l-.209 2h-1.791v7h-3v-7h-2v-2h2v-2.308c0-1.769.931-2.692 3.029-2.692h1.971v3z" />
    
    14
                    
    
    15
                
    
    16
            
    
    17
            
    
    18
        endif;
    
    19
        if ( $socials_in ) :
    
    20
            ?>
    
    21
            
  • 22
                 href=" echo esc_url( $socials_in ); ?>" aria-label="Find us on Instagram" target="_blank">
    
    23
                     xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-hidden="true">
    
    24
                         d="M14.829 6.302c-.738-.034-.96-.04-2.829-.04s-2.09.007-2.828.04c-1.899.087-2.783.986-2.87 2.87-.033.738-.041.959-.041 2.828s.008 2.09.041 2.829c.087 1.879.967 2.783 2.87 2.87.737.033.959.041 2.828.041 1.87 0 2.091-.007 2.829-.041 1.899-.086 2.782-.988 2.87-2.87.033-.738.04-.96.04-2.829s-.007-2.09-.04-2.828c-.088-1.883-.973-2.783-2.87-2.87zm-2.829 9.293c-1.985 0-3.595-1.609-3.595-3.595 0-1.985 1.61-3.594 3.595-3.594s3.595 1.609 3.595 3.594c0 1.985-1.61 3.595-3.595 3.595zm3.737-6.491c-.464 0-.84-.376-.84-.84 0-.464.376-.84.84-.84.464 0 .84.376.84.84 0 .463-.376.84-.84.84zm-1.404 2.896c0 1.289-1.045 2.333-2.333 2.333s-2.333-1.044-2.333-2.333c0-1.289 1.045-2.333 2.333-2.333s2.333 1.044 2.333 2.333zm-2.333-12c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm6.958 14.886c-.115 2.545-1.532 3.955-4.071 4.072-.747.034-.986.042-2.887.042s-2.139-.008-2.886-.042c-2.544-.117-3.955-1.529-4.072-4.072-.034-.746-.042-.985-.042-2.886 0-1.901.008-2.139.042-2.886.117-2.544 1.529-3.955 4.072-4.071.747-.035.985-.043 2.886-.043s2.14.008 2.887.043c2.545.117 3.957 1.532 4.071 4.071.034.747.042.985.042 2.886 0 1.901-.008 2.14-.042 2.886z" />
    
    25
                    
    
    26
                
    
    27
            
    
    28
            
    
    29
        endif;
    
    30
        if ( $socials_link ) :
    
    31
            ?>
    
    32
            
  • 33
                 href=" echo esc_url( $socials_link ); ?>" aria-label="Find us on LinkedIn" target="_blank">
    
    34
                     xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-hidden="true">
    
    35
                         d="M12 0c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm-2 16h-2v-6h2v6zm-1-6.891c-.607 0-1.1-.496-1.1-1.109 0-.612.492-1.109 1.1-1.109s1.1.497 1.1 1.109c0 .613-.493 1.109-1.1 1.109zm8 6.891h-1.998v-2.861c0-1.881-2.002-1.722-2.002 0v2.861h-2v-6h2v1.093c.872-1.616 4-1.736 4 1.548v3.359z" />
    
    36
                    
    
    37
                
    
    38
            
    
    39
            
    
    40
        endif;
    
    41
        if ( $socials_yt ) :
    
    42
            ?>
    
    43
            
  • 44
                 href=" echo esc_url( $socials_yt ); ?>" aria-label="Find us on YouTube" target="_blank">
    
    45
                     xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" aria-hidden="true">
    
    46
                         d="M12 0c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm4.441 16.892c-2.102.144-6.784.144-8.883 0-2.276-.156-2.541-1.27-2.558-4.892.017-3.629.285-4.736 2.558-4.892 2.099-.144 6.782-.144 8.883 0 2.277.156 2.541 1.27 2.559 4.892-.018 3.629-.285 4.736-2.559 4.892zm-6.441-7.234l4.917 2.338-4.917 2.346v-4.684z" />
    
    47
                    
    
    48
                
    
    49
            
    
    50
         endif; ?>
    
    51
    
    

    Conforme discutido anteriormente, uma implementação social alternativa é construir um shortcode e passá-lo para o quarto widget.

    Uma abordagem alternativa, em vez de criar um modelo de página personalizado, seria criar uma nova seção no WordPress Customizer para o Opções de temas e inclua lá uma configuração para direcionar a página de opções.
    Adicione uma nova seção no WordPress CustomizerAdicione uma nova seção no WordPress CustomizerAdicione uma nova seção no WordPress Customizer
    Adicione uma nova configuração dentro da nova seçãoAdicione uma nova configuração dentro da nova seçãoAdicione uma nova configuração dentro da nova seção

    Deixe uma resposta