Suporte » Ajustando o WordPress » Problema com loop que se comporta diferente só em algumas páginas

  • Resolvido Ares_GCS

    (@ares_gcs)


    Meu site: http://www.cuidar.com.br
    Problema: Os menus são gerados por alguns loops, a idéia é que se comportem da seguinte forma:
    Se na home: mostrar artigos mais movimentados. (funcionando)
    Se nas cats: mostrar subcats se existente, senão mostrar posts na categoria. (funcionando)
    Se em single: Mostrar posts na mesma categoria do post que você está. (NÃO FUNCIONA EM TODOS SINGLES)

    Curiosamente está funcionando para toda a categoria planta e não está funcionando na saúde, entre no site, clique em plantas, escolha uma subcategoria e entre em um artigo, o menu se comportará como esperado. Agora vá em saúde, escolha uma subcategoria e entre no artigo, na hora que entrar no artigo a lista passa-rá a apresentar todos os artigos dentro de saúde, não apenas os de “estética” ou “dermatológica” ou “mulheres”.

    O código:

    global $post;
    		$categories = get_the_category();
    		$category_end = end($categories);
    		$sidebar_cat_id_end = $category_end->cat_ID;
    
    		if (!is_category() && !is_single()){
    			$sidebar_related_query = new WP_Query('showposts=20&orderby=comment_count&meta_key=oculto&meta_value=no');
    			echo "Artigos mais populares:";
    			echo "<ul>";
    			while ($sidebar_related_query->have_posts()){
    				$sidebar_related_query->the_post();
    				?><li><a href="<?php the_permalink(); ?>" title="Link para <?php the_title(); ?>"><?php the_title(); ?></a></li><?php
    			}
    			echo "</ul>";
    		}
    
    		if (is_category()){
    			$this_category = get_category($cat);
    			if (get_category_children($this_category->cat_ID) != "") {
    				echo "<ul>";
    				wp_list_categories('child_of='.$this_category->cat_ID.'&title_li=Subcategorias:&hierarchical=false');
    				echo "</ul>";
    			}else {
    				$sidebar_related_query = new WP_Query('cat='.$this_category->cat_ID.'&showposts=9999&meta_key=oculto&meta_value=no&orderby=title');
    				echo "<ul>";
    				while ($sidebar_related_query->have_posts()){
    					$sidebar_related_query->the_post();
    					?><li><a href="<?php the_permalink(); ?>" title="Link para <?php the_title(); ?>"><?php the_title(); ?></a></li><?php
    				}
    				echo "</ul>";
    			}
    		}
    
    		if (is_single()){
    			$sidebar_related_query = new WP_Query('cat='.$sidebar_cat_id_end.'&showposts=9999&meta_key=oculto&meta_value=no&orderby=title');
    			echo "<ul>";
    			while ($sidebar_related_query->have_posts()){
    				$sidebar_related_query->the_post();
    				?><li><a href="<?php the_permalink(); ?>" title="Link para <?php the_title(); ?>"><?php the_title(); ?></a></li><?php
    			}
    			echo "</ul>";
    		}

    O problema aparentemente é na ordem que o “get_the_category” lista as categorias em cada situação. Como faço para saber a posição que cada uma está? É possível listar as categorias que um post pertence “em árvore”, para que eu pegue a mais profunda para listar os outros posts?

    Grato, Guilherme Soares

Visualizando 7 respostas - 1 até 7 (de um total de 7)
  • Olá,

    Entendi o que você precisa mas acho que antes precisa organizar melhor suas categorias. Não há limites para criar sub-categorias, então acho que pode cria-las para melhorar a organização. (Não recomendo posts em duas categorias ao mesmo tempo, gera muita confusão!)

    Tenho um código que mostra todos os posts que está na categoria atual.
    Ex.: Na pagina single do post Girassol (dentro da categoria “Plantas”) mostra todos os posts da categoria “Plantas”. Acho que tem como juntar o código de mostrar os posts mais populares dentro só de “Plantas”, no caso. Posso ver isso (se é isso que procura).

    Antes de tudo, organize melhor as categorias. Use sempre tags porque elas podem ser uteis. Além de tags, também se pode usar o recurso de taxonomia que é ótimo.

    Para a categoria plantas também não está funcionando (observe o post Tipo de Vaso Ideal).

    Tenta modificar a query assim:
    $sidebar_related_query = new WP_Query('cat='.$this_category[0]->cat_ID.'&showposts=9999&meta_key=oculto&meta_value=no&orderby=title');

    Se não funcionar tenta assim:
    $sidebar_related_query = new WP_Query('cat='.$this_category[1]->cat_ID.'&showposts=9999&meta_key=oculto&meta_value=no&orderby=title');

    renato, meu primeiro teste foi com o this_category[0] e tinha dado o erro que está dando agora, por isso resolvi utilizar o final do this_category que estava funcionando.
    Agora ví que as subcategorias de plantas bugaram também, deve ser pelo fato que não tinha testado o site depois de adicionar a dermatológica… parece que a ordem do this_category é realmente aleatória.
    Quanto a quantidade de categorias, eu pretendia que cada post tive-se só duas, tipo a mãe, saúde, e a filha, mulher, mas não categorias diferentes no mesmo nível. Mas tá foda sem conseguir organizar o menu… Não quero meu site organizado cronologicamente como um blog pois isso tira valor das coisas antigas (e meu site não é de notícias e sim artigos que independem da data que foram lançados), e sim em arvore pelas categorias.
    Tags por enquanto eu só estou utilizando para gerar as keywords, meu site já tem umas 190 tags, mesmo tendo só 52 artigo… acredito que nunca vou deixar os usuários verem as tags.

    Grato pela atenção, depois do almoço eu rodarei alguns testes. O domínio http://www.guild.com.br é meu também e estou testando o tema lá, lá está funcionando perfeitamente (ainda)…

    Tirando a categoria mãe das categorias resolve o problema, mas adiciona mais um subdiretório na url, ai fica /plantas/bonsais/tipos-de-bonsai.htm. Tem como evitar isso?
    Não colocar a subcategoria na url, quero diminuir ao máximo as urls para que cada keyword do título tenha maior relevância.

    Final das contas resolvi remover a categoria mãe do post, infelizmente as urls ficaram maiores, espero que não atrapalhe em nada…

    vlw gente.

    Depois do else vc poderia testar cada uma das categorias para saber se elas têm parentes. Use o foreach e o mesmo teste que vc usou acima.

    Quando achar a que não tem, mande listar os posts.

    foreach((get_the_category()) as $category) {
        //aqui vc faz o teste para cada categoria
        // se não tiver parente, chama o loop para mostrar os posts.
    }

    http://codex.wordpress.org/Function_Reference/get_the_category

    Ótima idéia, o meu problema é dentro do is_single e não depois do else, mas utilizando o foreach para ver qual categoria não tem filhos e usar o id dela para alimentar o loop resolveria o problema. Eu ainda não me acostumei com as funções e variáveis prontas do wordpress e várias vezes passo muito tempo andando em círculos no codex procurando por algo que faça o que estou querendo e não imagino bem as soluções…

    Hoje eu lí várias coisas no blog do google sobre a estrutura de pastas de um site, eu tinha até cogitado usar só /%postname%.htm para meus permalinks e todos ficarem na raiz do site e aumentar a relevância, porém o google aconselha apenas sites pequenos (menos de umas 100 páginas) a fazer isso, sites maiores devem usar uma (para até umas 1000 páginas) ou duas (para 1000+) pastas, mas não mais que isso também para a URL não ficar gigante.
    To usando uma categoria só por post agora e resolveu o problema, os links ficaram todos com 2 diretórios, mas tudo bem, ainda está “lembrável” pelo usuário e meu projeto é para um site com algumas centenas de páginas pelo menos, acredito que vai ser válido na organização usar uma estrutura de dois níveis mesmo…

Visualizando 7 respostas - 1 até 7 (de um total de 7)
  • O tópico ‘Problema com loop que se comporta diferente só em algumas páginas’ está fechado para novas respostas.