Seu tema WordPress precisa de um shortcode de mídia social

Cada site vem com links de perfis de mídia social. Dependendo do layout, eles aparecem em locais diferentes, como cabeçalho, rodapé e barras laterais. Neste tutorial, aprenderemos como criar um shortcode de mídia social WordPress que você pode reutilizar em seus temas. Para configurar os links sociais, estenderemos o WordPress Customizer.

Estenda o personalizador do WordPress

Vamos começar acessando o WordPress Customizer, então navegamos até Aparência > Personalizar no painel do nosso site. A partir daí, podemos modificar diferentes partes do nosso site, como definir a página inicial padrão ou adicionar alguns estilos.

Criaremos um novo Links Sociais seção que aparecerá apenas quando nosso tema estiver ativo. No meu caso, estou trabalhando com um tema WordPress personalizado (Parque infantil) que também usei em um tutorial recente do WordPress.

A nova seção socialA nova seção socialA nova seção social

Nesta seção, registraremos quatro configurações e seus controles associados.

As novas configuraçõesAs novas configuraçõesAs novas configurações

Para construir essa funcionalidade, usaremos a API Customize. Dentro do functions.php arquivo do nosso tema, adicionaremos este código:

1
function playground_customize_register( $wp_customize ) {
2
    $wp_customize->add_section(
3
        'social_links',
4
        array(
5
            'title' => __( 'Social Links', 'playground' ),
6
        )
7
    );
8
    
9
    $wp_customize->add_setting(
10
        'facebook',
11
        array(
12
            'sanitize_callback' => 'esc_url_raw',
13
        )
14
    );
15
    
16
    $wp_customize->add_control(
17
        'facebook',
18
        array(
19
            'type'    => 'url',
20
            'section' => 'social_links',
21
            'label'   => __( 'Facebook', 'playground' ),
22
        )
23
    );
24
    
25
    $wp_customize->add_setting(
26
        'instagram',
27
        array(
28
            'sanitize_callback' => 'esc_url_raw',
29
        )
30
    );
31
    
32
    $wp_customize->add_control(
33
        'instagram',
34
        array(
35
            'type'    => 'url',
36
            'section' => 'social_links',
37
            'label'   => __( 'Instagram', 'playground' ),
38
        )
39
    );
40
    
41
    $wp_customize->add_setting(
42
        'linkedin',
43
        array(
44
            'sanitize_callback' => 'esc_url_raw',
45
        )
46
    );
47
    
48
    $wp_customize->add_control(
49
        'linkedin',
50
        array(
51
            'type'    => 'url',
52
            'section' => 'social_links',
53
            'label'   => __( 'LinkedIn', 'playground' ),
54
        )
55
    );
56
    
57
    $wp_customize->add_setting(
58
        'youtube',
59
        array(
60
            'sanitize_callback' => 'esc_url_raw',
61
        )
62
    );
63
    
64
    $wp_customize->add_control(
65
        'youtube',
66
        array(
67
            'type'    => 'url',
68
            'section' => 'social_links',
69
            'label'   => __( 'Youtube', 'playground' ),
70
        )
71
    );
72
}
73
add_action( 'customize_register', 'playground_customize_register' );

Torne-o mais legível

Podemos tornar esse código um pouco mais legível armazenando as configurações/controles dentro de um array de objetos, conforme mostrado abaixo:

1
function playground_customize_register( $wp_customize ) {
2
    $settings = array(
3
        (object) array(
4
            'id'    => 'facebook',
5
            'label' => __( 'Facebook', 'playground' ),
6
        ),
7
        (object) array(
8
            'id'    => 'instagram',
9
            'label' => __( 'Instagram', 'playground' ),
10
        ),
11
        (object) array(
12
            'id'    => 'linkedin',
13
            'label' => __( 'LinkedIn', 'playground' ),
14
        ),
15
        (object) array(
16
            'id'    => 'youtube',
17
            'label' => __( 'YouTube', 'playground' ),
18
        ),
19
    );
20

21
    $wp_customize->add_section(
22
        'social_links',
23
        array(
24
            'title' => __( 'Social Links', 'playground' ),
25
        )
26
    );
27

28
    foreach ( $settings as $setting ) :
29
        $wp_customize->add_setting(
30
            $setting->id,
31
            array(
32
                'sanitize_callback' => 'esc_url_raw',
33
            )
34
        );
35
        
36
        $wp_customize->add_control(
37
            $setting->id,
38
            array(
39
                'type'    => 'url',
40
                'section' => 'social_links',
41
                'label'   => $setting->label,
42
            )
43
        );
44
    endforeach;
45
}
46
add_action( 'customize_register', 'playground_customize_register' );

Você pode adicionar mais links de mídia social (como o X em nossa demonstração estática) adicionando novas entradas no $settings variedade.

Alterar localização do item do menu

Para alterar a localização da nossa seção personalizada, temos que modificar sua prioridade padrão que é 160. Por exemplo, uma prioridade inferior a 20 será colocada acima da Identidade do site seção.

A localização da nossa seção quando sua prioridade é inferior a 20A localização da nossa seção quando sua prioridade é inferior a 20A localização da nossa seção quando sua prioridade é inferior a 20

Veja como deve ser o código para isso:

1
$wp_customize->add_section(
2
    'social_links',
3
    array(
4
        'title'    => __( 'Social Links', 'playground' ),
5
        'priority' => 19,
6
    )
7
);

As modificações do tema são armazenadas no wp_options tabela do banco de dados WordPress. No meu caso, onde tenho o Parque infantil tema ativado, posso ver as configurações do meu tema dentro do theme_mods_playground nome da opção.

Gere o código curto

Nosso [socials] shortcode consistirá nos três atributos opcionais a seguir:

  • O title atributo que será responsável por mostrar um cabeçalho antes dos ícones.
  • O fill atributo que especificará a cor de preenchimento dos ícones SVG. A cor padrão será preta.
  • O fill_hover atributo que especificará a cor de preenchimento dos ícones SVG ao passar o mouse. A cor padrão do foco será vermelha.
O layout geradoO layout geradoO layout gerado

Para chamá-lo em qualquer lugar que quisermos (por exemplo, em uma barra lateral ou widget), podemos então usar esta sintaxe:

O código de acessoO código de acessoO código de acesso

API de código curto do WordPress

Para construí-lo, usaremos a API Shortcode. Dentro de functions.php arquivo do nosso tema, adicionaremos este código:

1
function socials_func( $atts ) {
2
    $atts       = shortcode_atts(
3
        array(
4
            'title'      => '',
5
            'fill'       => '#000',
6
            'fill_hover' => '#FF0000',
7
        ),
8
        $atts
9
    );
10
    
11
    $title      = $atts['title'];
12
    $fill       = $atts['fill'];
13
    $fill_hover = $atts['fill_hover'];
14
    $facebook   = get_theme_mod( 'facebook' );
15
    $instagram  = get_theme_mod( 'instagram' );
16
    $linkedin   = get_theme_mod( 'linkedin' );
17
    $youtube    = get_theme_mod( 'youtube' );
18
    ob_start();
19
    ?>
20
     class="socials-wrapper">
21
         if ( $title ) : ?>
22
            

23
                 echo esc_html( $title ); ?>
24
            
25
         endif; ?>
26
         class="socials">
27
             if ( $facebook ) : ?>
28
                
  • 29
                         href=" echo esc_url( $facebook ); ?>" aria-label="Find us on Facebook" title="Find us on Facebook" target="_blank">
    
    30
                             xmlns="https://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" aria-hidden="true" style="--fill:  echo esc_attr( $fill ); ?>; --fill-hover:  echo esc_attr( $fill_hover ); ?>">
    
    31
                                 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" />
    
    32
                            
    
    33
                        
    
    34
                    
    
    35
                    
    
    36
                endif;
    
    37
                if ( $instagram ) :
    
    38
                    ?>
    
    39
                    
  • 40
                         href=" echo esc_url( $instagram ); ?>" aria-label="Find us on Instagram" title="Find us on Instagram" target="_blank">
    
    41
                             xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" aria-hidden="true" style="--fill:  echo esc_attr( $fill ); ?>; --fill-hover:  echo esc_attr( $fill_hover ); ?>">
    
    42
                                 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" />
    
    43
                            
    
    44
                        
    
    45
                    
    
    46
                    
    
    47
                endif;
    
    48
                if ( $linkedin ) :
    
    49
                    ?>
    
    50
                    
  • 51
                         href=" echo esc_url( $linkedin ); ?>" aria-label="Find us on LinkedIn" title="Find us on LinkedIn" target="_blank">
    
    52
                             xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" aria-hidden="true" style="--fill:  echo esc_attr( $fill ); ?>; --fill-hover:  echo esc_attr( $fill_hover ); ?>">
    
    53
                                 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" />
    
    54
                            
    
    55
                        
    
    56
                    
    
    57
                    
    
    58
                endif;
    
    59
                if ( $youtube ) :
    
    60
                    ?>
    
    61
                    
  • 62
                         href=" echo esc_url( $youtube ); ?>" aria-label="Find us on YouTube" title="Find us on YouTube" target="_blank">
    
    63
                             xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" aria-hidden="true" style="--fill:  echo esc_attr( $fill ); ?>; --fill-hover:  echo esc_attr( $fill_hover ); ?>">
    
    64
                                 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" />
    
    65
                            
    
    66
                        
    
    67
                    
    
    68
                 endif; ?>
    
    69
            
    
    70
        
    
    71
        
    
    72
        return ob_get_clean();
    
    73
    }
    
    74
    add_shortcode( 'socials', 'socials_func' );
    

    Considere estas coisas:

    • Nós usamos o get_theme_mod() função para recuperar os valores de links sociais do Personalizador.
    • Fazemos algumas verificações para garantir que apenas os ícones sociais que não possuem valores vazios aparecerão.
    • Usamos o conveniente ob_start() e ob_get_clean() funções para gerar a marcação.
    • Passamos as cores selecionadas nos SVGs como variáveis ​​inline e as tratamos no CSS.
    • Se você precisar deste shortcode para um site multilíngue, faça o aria-label e title atributos traduzíveis.

    Estilos

    Por último, mas não menos importante, precisamos adicionar os seguintes estilos aos nossos estilos:

    1
    .socials-wrapper h4 {
    
    2
      font-size: 20px;
    
    3
      text-align: center;
    
    4
      margin: 0 0 20px;
    
    5
    }
    
    6
    
    
    7
    .socials {
    
    8
      list-style: none;
    
    9
      padding: 0;
    
    10
      margin: 0;
    
    11
      display: flex;
    
    12
      justify-content: center;
    
    13
      gap: 15px;
    
    14
    }
    
    15
    
    
    16
    .socials a {
    
    17
      display: flex;
    
    18
    }
    
    19
    
    
    20
    .socials a svg {
    
    21
      fill: var(--fill);
    
    22
      transition: all 0.25s;
    
    23
    }
    
    24
    
    
    25
    .socials a:hover svg {
    
    26
      fill: var(--fill-hover);
    
    27
      transform: scale(1.2);
    
    28
    }
    

    Conclusão

    Hoje aprendemos como criar um shortcode de mídia social com dados provenientes do WordPress Customizer, que você pode usar em qualquer lugar do seu tema WordPress. Esperançosamente, você expandiu seu conhecimento com uma ou duas coisas novas.

    Exercício: pratique estendendo este shortcode. Por exemplo, você pode querer fornecer uma opção de cor para cada ícone social criando novas configurações/controles no Personalizador.

    Como sempre, muito obrigado pela leitura!

    Deixe uma resposta