Widget Logic: defina em quais páginas seus widgets irão aparecer

O sistema de widgets do WordPress é uma grande sacada. Através de um “simples arrastar e soltar” novas funcionalidades super complexas podem ser inseridas aos websites.

Acontece que por padrão todo widget inserido numa área de widgets (anteriormente chamadas de sidebars) aparece em todas as página que tenham aquela área. Por exemplo: Se você está desenvolvendo um site para a empresa do seu cliente e esse site vai ter um blog integrado, qualquer widget que você coloque na área “primária” do Blog aparecerá por padrão em todas as páginas do site.

Widget Logic - Exemplo
Repare na “elegância” da solução

É aí que o Widget Logic entra em cena! Esse discreto plugin permite que você defina com regras complexas em quais páginas quer que seu widget apareça.

Na verdade, existem diversos plugins com essa finalidade, mas o Widget Logic impressiona pela simplicidade e elegância. Após a instalação do plugin um novo campo surge nos widgets. Nesse campo você pode usar as Tags Condicionais que o próprio WordPress fornece para definir em quais página seu widget vai aparecer.

Exemplos práticos

Após a instalação do plugin o WP testa essa lógica condicional antes de exibir os widgets, caso a resposta seja positiva ele exibe o widget. Com o tempo e alguma prática é possível se fazer quase milagres utilizando essas tags. Vamos a alguns exemplos úteis de tags:

is_page('2354')

Nesse caso o widget será exibido apenas na página que tenha o id 2354. Também é possível utilizar o slug da página.

is_front_page()

Use esse código caso queira que seu widget apareça apenas ná página que você definiu como página inicial em Configurações > Leitura

is_home()

Esse código exibirá o widget apenas na página que que você definiu como “Página de Posts” em Configurações > Leitura

in_category( array( 1,2,3 ) )

No caso acima o widget será exibido apenas em posts que estejam nas categorias 1, 2 e 3

!in_category( array( 1,2,3 ) )

Esse pequeno código faz o contrário do anterior, exibindo o widgets em todas as páginas, exceto em posts das categorias 1, 2 e 3.

is_archive() || is_page('2242') || is_front_page()

O “||” do exemplo acima funciona como um “OU”. Nesse caso, o widget seria exibido nas páginas de arquivo (categorias, busca, tags etc), na página 2242 e na página inicial.

Conclusão

O Widget Logic é um plugin indispensável para quem pretende utilizar o WordPress como um CMS completo ou mesmo como um sistema de Blog. Ele resolve um problema complexo de forma simples e deveria ser a primeira opção para desenvolvedores que querem maior controle sobre a exibição de widgets.

58 comentários em “Widget Logic: defina em quais páginas seus widgets irão aparecer”

  1. Perfeito esse artigo!
    eu rodei a net toda atrás de uma explicação mais detalhada dobre isso e não achava
    ae encontrei seu blog

    como disse o amigo ali de cima, SALVOU

    parabéns

  2. Carlos Sampaio

    Sabem dizer se está funcionando na versão 3.4.1?

    Pergunto porque até consegui adicionar o plugin de boa, mas não funciona.
    Coloco “is_front_page()”, por exemplo, e não aparece o widget na página inicial.

    1. Obrigado pelo comentário Carlos!

      O Widget Logic continua funcionando com o WP 3.4.1 sim.

      O Widget aparece normalmente na página inicial sem que você insira essa condtional tag? Nesse caso, ele tem que estar sendo exibido já e o que plugin fará é determinar que ele apareça APENAS na “font page”.

        1. André Fantin

          na versão 3.7.1 a opção is_home() ou is_front_page() simplesmente parou de funcionar e o widget aparece em todas as páginas.

  3. Eu ainda não consegui, tavez pela página (a unica que quero que apareça o widget) ser template tem algo que devo escrever diferente? Na tag? Grato.

  4. Olá, não sei se é apenas em meu template (http://manualdatecnologia.com/), mas encontrei dificuldades porém consegui achar algumas soluções:

    – Aparecer somente na homepage:
    — is_front_page() ou is_home()

    – Aparecer em todas as páginas, exceto na home page:
    — !is_front_page ()

    As demais de categoria não funcionaram. Creio que pode variar dependendo do template utilizado. Abraços!

  5. Tem um problema com esse Widget.

    Se vc tem a categoria 2 e 3, e a 3 está dento da 2. Não da pra mostrar o Widget só na 2, o wiget tbm aparece na 3 ¬¬

  6. Eu só quero que apareça na minha pagina personalizada a sidebar nova, sem os outros conteudos da home.. Ja customizei uma pagina nova, mas a sidebar continua a mesma, quero criar uma sidebar diferente de todas as outras paginas. Tem como fazer com esse plugin ou existe outro?

  7. Widget Logic é um dos meu plugins favoritos, e também um dos mais úteis para WP. Parabéns pelo Post.

  8. Jorge Davi Navarro

    Ola, estou com um problema, tenho um widget que quero que apareça só em categorias, porem na pagina categoria, eu não quero que apareça os demais widget, só esse que defini como faço para configurar isso??

    1. Jorge Davi Navarro

      Outra coisa no banco de dados na parte wp_term_taxonomy a parte taxonomy das categorias conta a opção ad_cat e nao category, porém se eu mudar o template nao funciona, OBS: estou usando o template ClassiPress

  9. Dá uma ajuda, por favor.
    Estou aplicando “is_page(‘nome’) || in_category(“nome’)” para que o menu fique padronizado, ou seja onde for categoria ou página tal já vai sair com aquele menu assim que criado. Entretanto numa categoria eu não sei por que carga d’água insiste em sair também na home. Inexplicável pois em todas as outras não tive esse comportamento. E já tentei:
    – usar !is_home() e !is_front_page () ( inclusive isto causa efeito errôneo tal que faz com que o menu citado saia em outras páginas que eu também não quero!)

  10. To com um problema um pouco diferente. Baixei um plugin para mostrar os artigos mais populares. Só que esse tópico não aparece na minha página inicial. Como posso resolver isso com o widget logic? Qual parâmetro uso?

  11. George Mesquita

    Olá caro Bruno. Fico muito feliz quando encontro soluções simples e diretas. Testei, por necessidade, o Widget Logic, mas confesso que fiquei um pouco decepcionado. Em algumas páginas simplesmente não funcionou e continuou aparecendo quando deveria estar oculto. Procurei uma alternativa e eis que encontrei o plugin Dynamic Widget. Para quem quer controle total sobre a apresentação dos seus widgets, esta é a minha recomendação. Ele é simplesmente completo. Confiram!!!!

    1. Tenho que te agradecer, George.
      Baixei o Dynamic Widget e consegui fazer tudo que queria no meu site http://vocemaisrico.com/
      Além de muito bom é extremamente fácil de usar, mesmo para mim, que tenho habilidades de informática nível macaco.
      Obrigado George e obrigado Universo WP!

  12. olá otimo tutorial. tenho uma duvida: esses codigos tambem servem para usar tambem os widgets nos posts ou como faço para usar widgtes especificos em posts que eu escolher?

    1. Marcos Freitas

      É só colocar um símbolo de negação lógica (!) antes da tag, assim ele vai mostrar para todas as páginas “que não seja esta”:

      !is_page(“ID_DA_PAGINA”)

        1. Marcos Freitas

          Quando você vai editar a página no painel do wordpress ele mostra na URL:

          […]/wp-admin/post.php?post=586&action=edit

          Neste caso acima o ID da página ou do post é 586.

          1. Muito obrigado, tirou minha dúvida, mas ao mesmo tempo surgiu outra. Agora quero que a lógica funcione na index. Como faço pra fazer essa lógica funcionar na index?

          2. Marcos Freitas

            Bom, essa pergunta já foi respondida nos outros comentários e dando uma breve lida parece que a galera tem achado alguns problemas para algumas versões 3.x do wordpress, mas não posso te confirmar isso.

            Contudo a resposta seria:

            Para aparecer somente na homepage:
            is_front_page() ou is_home()

            Para aparecer em todas as páginas, exceto na home page:
            !is_front_page ()

            Você pode concatenar com outras expressões utilizando os operadores lógicos: http://php.net/manual/pt_BR/language.operators.logical.php

          3. André Luiz

            Quando eu uso !is_page(“ID_DA_PAGINA”) funciona perfeitamente, porém para UMA página só. Pretendo esconder tal widget em 5 ou 6 páginas. Já tentei repetir o código, separar por vírgulas, etc, porém não funciona. Alguém sabe o que posso fazer?

            São landing pages e páginas de entrega de recompensa criadas com optimizepress…

          4. André, você pode tentar o seguinte:

            !is_page( array( 42, ‘about-me’, ‘About Me And Joe’ ) )

            (pode usar id ou slug, mas, tem que ser dentro de um array) Testa e me fala.

          5. André Luiz

            MUITO OBRIGADOOOOOOOO!

            Deu certo! De coração cara, obrigado pela ajuda e parabéns pelo seu trabalho. Esse widget fdp tava me dando dor de cabeça já.

            Sucesso pra você, abras

  13. Boa noite Marcos, eu tenho uma dúvida… Eu não quer que apareca um widget dentro dos posts e numa página… neste momento estou a usar “!is_page(10) || !is_single()” que é onde eu não quero que apareça, mas continua a aparecer e não sei o que fazer…

  14. Estou colocando is_front_page() && in_category( array( 59,26,27,120,25 )) e não sei porque aparece erro! Em contrapartida coloquei !is_front_page() && in_category(array(11)) e não apresentou erro. Onde será que estou errando? Será que não consigo colocar muitas categorias juntas?

  15. Olá, gostaria de saber se dependendo do conteúdo do widget posso oculta-lo.
    Possuo um widget de aniversariantes, se não tenho resultado o widget mostra uma frase, gostaria saber se é possível pegar essa frase como variável.
    Obrigado, todos os demais exemplos apresentados funcionaram perfeitamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *