Faça uma navegação com guias com páginas secundárias no WordPress

Neste tutorial, aprenderemos como converter páginas secundárias do WordPress em guias de navegação compartilháveis. No entanto, ao contrário das guias comuns, onde os visitantes permanecem na mesma página ao clicar nelas e apenas o painel associado aparece, as nossas se comportarão como links de menu e forçarão o recarregamento da página.

As guias são uma forma popular de organizar e categorizar grupos de conteúdo. Por exemplo, no site do Airbnb, as guias se comportam como filtros que permitem aos visitantes selecionar casas agrupadas sob uma tag específica, como Vistas incríveis, À beira-mar, etc.

Os filtros da guia AirbnbOs filtros da guia AirbnbOs filtros da guia Airbnb

No passado, mostrei como construir um componente de guia responsivo personalizado baseado em JavaScript. Além disso, há alguns anos, passei pelo processo de customização das abas do Bootstrap, dando a cada aba uma URL identificável, tornando seu conteúdo mais navegável e compartilhável.

Hoje vou mostrar como simular essa funcionalidade no WordPress com páginas filhas.

Cada guia representará uma página secundária com um painel do conteúdo da página. Esse comportamento é ideal quando seu design requer uma interface com guias, mas para fins de SEO, você precisa de URLs compartilháveis ​​e limpos. Outro cenário surge quando cada painel da guia contém conteúdo complexo e não apenas algum texto, e você deseja evitar ter todo o conteúdo em uma página – algo que pode tornar a página de administração mais lenta.

Aqui está um vídeo introdutório que mostra o comportamento esperado:


Nossa interface com guias WordPress

Considere a seguinte estrutura hierárquica onde temos uma página pai e quatro páginas filhas:

As páginas filhasAs páginas filhasAs páginas filhas

Cada página secundária terá um layout como este:

O layout da área de trabalhoO layout da área de trabalhoO layout da área de trabalho

Em relação aos elementos da página:

  • Na parte superior, haverá uma localização atual onde apenas o primeiro nível (página inicial) será clicável.
  • Depois, teremos as abas que representarão as páginas filhas. A página atual será a guia ativa.
  • Abaixo das abas, teremos o painel de abas que mostrará o conteúdo da página atual.

Dependendo das abas que temos, precisamos pensar na interface com abas nas telas mobile. Uma solução rápida é mostrar uma barra de rolagem vertical se a largura das guias for maior que a largura do dispositivo.

O layout móvelO layout móvelO layout móvel

Todas as páginas filhas compartilharão o mesmo modelo de página personalizado.

Nosso modelo de guias personalizadasNosso modelo de guias personalizadasNosso modelo de guias personalizadas

Implementação

Para a parte de implementação, trabalharei com meu costume habitual Parque infantil tema. Usarei os arquivos de um tutorial anterior e atualizarei apenas duas coisas — estas são as que lhe interessam se você planeja incorporar esta técnica em seus projetos:

  • Primeiro e mais importante, adicionarei o personalizado tabs.php arquivo — o modelo de página de todas as páginas filhas e
  • em segundo lugar, atualizarei o style.css arquivo com os estilos de guia.
Arquivos de temaArquivos de temaArquivos de tema

Para sua conveniência, como sempre, todos os ativos do tema estarão disponíveis em um repositório GitHub.

Dentro do modelo personalizado, faremos o seguinte:

  1. Crie a farinha de rosca com três níveis de profundidade. O primeiro nível, que será clicável, terá um link para a página inicial. O segundo mostrará o título da página pai (“Empresa” no meu caso). Não será clicável porque não teremos nenhum layout para a página pai. O terceiro mostrará o título da página atual.
  2. Pegue as páginas filhas do pai da página atual. Você sempre pode personalizar a ordem de suas páginas usando o sort_column chave dentro da matriz de argumentos do get_pages() função. A classificação padrão é feita pelo título da postagem em ordem crescente, o que funciona em nosso exemplo.
  3. Percorra-os e gere as guias. Para determinar a aba ativa, ainda dentro do loop, compararemos a URL da página atual com a URL do elemento em loop. Se corresponderem, denotaremos a guia ativa usando o active aula.
  4. Imprima o conteúdo da página atual que se comportará como o painel da guia ativa.

A marcação de saídaA marcação de saídaA marcação de saída

Aqui está o código PHP necessário:

1

2
/* Template Name: Tabs Page */
3
get_header();
4

5
$parent_id    = wp_get_post_parent_id();
6
$parent_title = get_the_title( $parent_id );
7
$child_pages  = get_pages(
8
    array(
9
        'parent' => $parent_id,
10
    )
11
);
12
?>
13

14
 class="site-main">
15
    
16
    if ( have_posts() ) :
17
        while ( have_posts() ) :
18
            the_post();
19
            ?>
20
             id="post- the_ID(); ?>"  post_class(); ?>>
21
                 class="section-with-tabs">
22
                     class="container container-sm">
23
                        
24
                        if ( ! empty( $child_pages ) ) :
25
                            /*BREADCRUMBS*/
26
                            ?>
27
                             class="breadcrumbs">
28
                                 class="breadcrumb">
29
                                     href=" echo esc_url( home_url( '/' ) ); ?>">
30
                                         esc_html_e( 'Home', 'playground' ); ?>
31
                                    
32
                                
33
                                 class="breadcrumb">
34
                                     echo esc_html( $parent_title ); ?>
35
                                
36
                                 class="breadcrumb">
37
                                     the_title(); ?>
38
                                
39
                            
40

41
                             /*TABS*/ ?>
42
                             class="tabs-wrapper">
43
                                 class="tabs">
44
                                    
45
                                    foreach ( $child_pages as $key => $child_page ) :
46
                                        $child_page_id   = $child_page->ID;
47
                                        $child_page_link = get_page_link( $child_page_id );
48
                                        $active          = get_permalink() === $child_page_link ? ' active' : '';
49
                                        ?>
50
                                         class="tab echo $active; ?>">
51
                                             class="tab-link" href=" echo esc_url( $child_page_link ); ?>">
52
                                                 echo esc_html( $child_page->post_title ); ?>
53
                                            
54
                                        
55
                                     endforeach; ?>
56
                                
57
                            
58
                         endif; ?>
59
                    
60
                
61

62
                 /*TAB CONTENT*/ ?>
63
                 class="section-with-content">
64
                     class="container container-sm">
65
                         the_content(); ?>
66
                    
67
                
68
            
69
            
70
        endwhile;
71
    endif;
72
    ?>
73

74

75

76
get_footer();

E os estilos associados:

1
/*CUSTOM VARIABLES HERE*/
2

3
.section-with-tabs .breadcrumbs {
4
    padding: 0;
5
    margin: 0 0 20px;
6
    list-style: none;
7
    display: flex;
8
    gap: 20px;
9
    font-size: 14px;
10
    color: var(--darkgray);
11
}
12

13
.section-with-tabs .breadcrumbs .breadcrumb {
14
    position: relative;
15
}
16

17
.section-with-tabs .breadcrumbs .breadcrumb:not(:first-child)::before {
18
    content: "/";
19
    position: absolute;
20
    top: 50%;
21
    left: -13px;
22
    transform: translateY(-50%);
23
}
24

25
.section-with-tabs .tabs-wrapper {
26
    white-space: nowrap;
27
    padding-bottom: 10px;
28
    overflow-x: auto;
29
}
30

31
.section-with-tabs .tabs-wrapper::-webkit-scrollbar {
32
    height: 8px;
33
}
34

35
.section-with-tabs .tabs-wrapper::-webkit-scrollbar-thumb,
36
.section-with-tabs .tabs-wrapper::-webkit-scrollbar-track {
37
    border-radius: 6px;
38
}
39

40
.section-with-tabs .tabs-wrapper::-webkit-scrollbar-thumb {
41
    background: var(--darkpink);
42
}
43

44
.section-with-tabs .tabs-wrapper::-webkit-scrollbar-track {
45
    background: var(--lightgray);
46
}
47

48
.section-with-tabs .tabs {
49
    padding: 0;
50
    margin: 0;
51
    list-style: none;
52
    display: flex;
53
}
54

55
.section-with-tabs .tabs .tab {
56
    flex-grow: 1;
57
}
58

59
.section-with-tabs .tabs .tab-link {
60
    display: block;
61
    text-decoration: none;
62
    font-weight: bold;
63
    font-size: 18px;
64
    padding: 5px;
65
    color: var(--darkgray);
66
    min-width: 120px;
67
    border-bottom: 2px solid var(--lightgray);
68
    transition: all 0.2s;
69
}
70

71
.section-with-tabs .tabs .tab.active .tab-link,
72
.section-with-tabs .tabs .tab .tab-link:hover {
73
    color: var(--darkpink);
74
    border-color: var(--darkpink);
75
}
76

77
.section-with-content {
78
    text-align: left;
79
    margin-top: 60px;
80
}

Conclusão

Aqui está uma captura de tela final do que você construiu!

interface final com guiasinterface final com guiasinterface final com guias

Durante este tutorial, aprendemos como transformar páginas secundárias do WordPress em guias de navegação. Essa técnica funciona muito bem se você planeja ter uma navegação por guias com URLs limpos e compartilháveis.

Em um próximo tutorial, mostrarei como navegar entre páginas filhas com links próximos/anteriores. Fique atento!

Como sempre, muito obrigado pela leitura!

Deixe uma resposta