Sidebars para cada categoria…
-
Boa tarde pessoal, tenho um portal de noticias e cada categoria tem uma sidebar diferente (esporte, política, economia, etc) mas eu gostaria que os posts de cada categoria puxassem suas respectivas sidebars
exemplo: categoria esporte >> todos os posts dessa categoria puxassem a sidebar esportecategoria políticas >> todos os posts dessa categoria puxassem a sidebar política
… e assim por diante..
alguém pode me ajudar?
agradeço desde já!
-
Olá,
Fiquei de escrever sobre isso no meu site mas estou sem tempo, publiquei no Stack:
Mesmo que tenha poucas categorias é mais fácil criar as áreas automatico em vez de um por um.
Muito Obrigada Diana, funcionou perfeitamente…
Outra coisa, tenho uma categoria Colunistas, onde cada colunista tem seu espaço para vender anuncios nas sidebars.. percebi que a sidebar de cada um pega a sidebar “colunistas”.. tem como gerar as sidebars das subcategorias de forma dinâmica também?Olá Diana, bem eu estava observando e acabei deixando escapar um detalhe.. tenho realmente muitas categorias e algumas não estam aparecendo, você sabe me dizer por quê? Tem algum limite?
Existe alguma maneira de fazer isso manualmente ao invés de maneira dinâmica? se puder me dar alguma dica ficaria muito grata 😀
Olá,
Não sei se tem limite, ouço falar que não tem limites no WP, mas se criar manualmente seria só para algumas categorias? Então é só tirar a parte da obtenção de categorias, foreach etc e usar um array de slugs mesmo. (Use slugs da categoria para não ter problemas futuros com IDs).
Se o problema está no painel de widgets, tente usar o modo de acessibilidade (em Opções de Tela).
Em vez de criar widgets, também pode adicionar funções diretamente na área (barra lateral), dai não precisa criar widgets.
Eu ativei o modo de acessibilidade, mas não era esse o problema e não consigo mais desativar, como faz?
Eu não entendi bem o que você quiz dizer com array de slugs 🙁
add_action( 'widgets_init', 'generate_widget_areas' ); function generate_widget_areas() { $terms = get_categories('exclude=1'); //I don't want widgets for uncategorized, you can add any ID also foreach ($terms as $term) { register_sidebar( array( 'name' => 'Category: '.$term->name, 'id' => $term->slug.'-widget-area', 'description' => 'Widget area for '.$term->name, 'before_widget' => '<li id="%1$s" class="widget-container %2$s">', 'after_widget' => '</li>', 'before_title' => '<h3 class="titlebar">', 'after_title' => '</h3>' ) ); } };
De onde a onde eu ponho o array? de que forma?
Desculpe minha ignorancia, é que ainda apanho um pouco pra isso!
Com o foreach gera só 10 areas de widgets pra 10 categorias aleatórias, não sei porque :/
Outra coisa, quando ativei o modo de acessibilidade as barras laterias aparecem e de acordo com as minhas contas, elas aparecem com o mesmo numero de categorias, exemplo: 20 categorias 20 barras laterias..
Mas todas aparecem como inativas, não entendo bem como isso funciona :/
Já consegui resolver meus problemas com o modo de acessibilidade.. só ainda não consegui realmente geral manualmente uma area de widget para cada categoria sem ser pelo Foerech :/ ainda não entendo como tem que mudar ali o código acima :/
e também ele não está gerando automaticamente pelo foerech. Eu testei em outro loca, onde uso menos categorias e ele gera as que já existem mas não gera as que são criadas :/Você pode me ajudar??
Olá,
Revisei o código na resposta, estava com erros estranhos, agora vai funcionar ok!
No
functions.php
:add_action( 'widgets_init', 'generate_widget_areas' ); function generate_widget_areas() { $terms = get_categories('exclude=1&hide_empty=0'); //Nao gera area para Sem categoria foreach ($terms as $term) { register_sidebar( array( 'name' => 'Categoria '.$term->name, 'id' => $term->slug.'-widget-area', 'description' => 'Widget para listagem e posts na categoria '.$term->name, 'before_widget' => '<li id="%1$s" class="widget-container %2$s">', 'after_widget' => '</li>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); } }
E no
sidebar.php
:<?php if (is_category() ||is_archive()||is_single()) : ?> <div id="categories" class="widget-area" role="complementary"> <ul class="xoxo"> <?php $category = get_the_category(); if (in_category($category[0]->slug) || is_category($category[0]->slug)){ dynamic_sidebar( $category[0]->slug.'-widget-area' ); }; ?> </ul> </div><!-- #categories .widget-area --> <?php endif; ?>
Desculpe a confusão!
Opá.. Agoora siim.. Fechou… Muito Obrigada MESMOOO pela atenção…
E olha só.. o código da sidebar não funcionou do jeito que voce mandou agora.. mas sim da maneira que estava antes<?php if (is_category() ||is_archive()||is_single() ) { ?> <div id="categories" class="widget-area" role="complementary"> <ul class="xoxo"> <?php $category = get_the_category(); if (in_category($category[0]->slug) || is_category($category[0]->slug) ) { ?> <?php if ( ! dynamic_sidebar( $category[0]->slug.'-widget-area' ) ) : ?> <?php endif;?> <?php } ?> <?php } ?> </div><!-- #categories .widget-area -->
Mas agora está tudo certo 😀
Olá,
Tente usar o novo código porque tem uma chave errada neste antigo :S
É que quando eu uso o novo código fica aparecendo umas mensagens de códigos na sidebar….
- O tópico ‘Sidebars para cada categoria…’ está fechado para novas respostas.