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.
É 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.
obrigado vc me salvou
Por nada Hernandes!
Não esqueça de voltar ao site e/ou assinar no RSS. Em breve mais textos para desenvolvedores WP!
Parabéns pelo post. Muito útil este widget.
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
Salvou mesmo!! Mto bommm!!! Ja adicionei nos favoritos! 😀
Demais! adorei!
Salvou!
Meu velho, tu não sabe o quanto me ajudou! Parabens, valeu mesmo pela dica!
abrs
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.
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”.
E na versão 3.6.1 ? Eu instalei mas não aparece nada.
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.
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.
Bom dia Marcelo!
Além da tag
is_page('id-da-page')
você pode tentar usaris_page_template( 'nome-do-template.php' )
.Abraços!
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!
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 ¬¬
como faço para colocar uma widget somente em algumas paginas?
Márcio,
Você pode usar uma conjunção de dois dos exemplos dados no post. Ou seja:
is_page( array( 1,2,3 ) )
eu só quero definir o menu na widget e tirar as outras opções como fazer?quando coloco o menu vem o selecionar 1,2,3,4,5……..
Carlos,
Para ser sincero não entendi muito bem sua pergunta. Você pode formular melhor?
Abraços.
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?
Carlos,
Dá para fazer isso com esse plugin sim.
1 – Escolha a condição que você quer (Ex: não aparecer na página que tenha o id 4)
2 – Preencha a condição nos widgets (Vide: http://codex.wordpress.org/Conditional_Tags)
Pronto.
Para mais detalhes, leia o post.
E qual é a condição: “não aparecer na página que tenha o id 4” ??
Muito bom o tuto. Ajudou muito!
Parabéns funfou fácil.
Widget Logic é um dos meu plugins favoritos, e também um dos mais úteis para WP. Parabéns pelo Post.
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??
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
Como fazer para que o Widget NÃO APAREÇA EM DETERMINADA PÁGINA?
Ótimo, era exatamente isso que eu estava procurando. Vamos aos testes…
Isso deveria ser padrão do wordpress.
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!)
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?
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!!!!
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!
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?
VALEEEEEUUUu!!!
ajudou muito, bem especifico, obrigado!!!
Sensacional a sua dica!
Eu gostaria de saber qual codigo eu uso se eu quero que ela aparece em todas as paginas menos uma.
É 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”)
Como faço pra encontrar o id da página?
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.
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?
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
Obrigado pelas respostas Marcos!
De nada brow. 🙂
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…
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.
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
Parabéns pelo post amigo, ajudou bastante!
Muitoooo obrigada! 🙂
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…
Já consegui… http://www.revestir.pt
É possível usa-lo para que o widget não apareça no MOBILE?
Não. Para fazer isso melhor seria usar CSS (media querie) ou Javascript (jQuery).
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?
Muito obrigado amigo, me ajudou bastante!
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.