Suporte » Temas » Personalização mais complexa do looop

  • Resolvido ahtabom

    (@ahtabom)


    Eu tenho uma idéia na cabeça e gostaria de tentar colocar em prática, mas não sei como, por isso, peço a ajuda de vocês.

    Considerando que o meu blog tem 10 categorias e cada categoria uma cor, queria personalizar o loop de um modo que ele continue exibindo o formato tradicional de blog, “post acima de post”, na ordem que é postado, exibindo os posts de todas as categorias normalmente, mas com a cor de cada categoria na barra de titulo. Quanto a isso, andei lendo algumas coisas e parece ser até simples de se conseguir, mas quero ir além dessa parte. O que eu tenho em mente é o seguinte:

    O “index” exibe os 10~15 ultimos posts publicados, sendo os 4 de cima na versão completa (ou com “leia mais” quando eu assim configurar na publicação de cada um), e do 6º em diante, apenas as “chamadas”, com o thumbnail, o titulo do post, a categoria e o autor.

    Exemplo em imagem:
    http://www.ahtabom.com.br/images/modelo-formatacao.jpg

    Por questão de lógica, IMAGINO EU, que o caminho mais “coerente” até por se tratar de 2 formatações totalmente distintas, seria a utilização de 2 loops, sendo o loop convencional na parte de cima e um loop personalizado na parte de baixo, no entanto, me surgem algumas dúvidas:

    1) Como configurar para que o 2º loop não exiba os 4 primeiros posts?
    2) Como configurar para que a exibição das outras páginas ainda no loop (como em “ver posts antigos” ou a navegação pelo pagenavi) exibam uma formatação normal?

    Alguém pode, por favor, me auxiliar em como personalizar em um desses caminhos propostos ou chegar próximo disso? Agradeço muitissimo!

Visualizando 13 respostas - 1 até 13 (de um total de 13)
  • ahtabom,

    você não precisa de dois loops pra isso, basta ficar ligado na propriedade $current_post enquanto estiver rodando e estilizar os primeiros 4 de um jeito e os outros de outro, algo tipo:

    <?php
    global $wp_query;
    if have_posts() : while (have_posts()) : the post();
    
    if ($wp_query->current_post <= 4) {
        /* markup HTML para os 4 primeiros posts */
    } else {
        /* markup para os demais posts */
    }
    endwhile;
    endif;
    ?>

    Sobre mudar as cores de acordo com a categoria veja esta resposta.

    Oi Ricardo.

    Agradeço muito a atenção, no entanto, testei o que você me passou, mas sempre tenho o retorno de erro referente a linha

    if have_posts() : while (have_posts()) : the post();

    e não sei como contornar. =(

    Faltou um parêntesis no if, falha minha:

    if (have_posts()) : while (have_posts()) : the post();

    mesmo com o parentese adicional, o retorno de erro é o mesmo. =/

    poste a msg de erro aqui. Dá pra aprender muita coisa com ela.

    Parse error: syntax error, unexpected T_STRING, expecting '(' in L:\xampp\htdocs\atb-magazine\wp-content\themes\atb-magazine\index.php on line 9

    e a linha 9 contem:

    if have_posts()) : while (have_posts()) : the post();

    ————————————————————–

    tambem testei a opção de abrir e fechar cada chamada como:

    <?php global $wp_query; if have_posts()) : while (have_posts()) : the post(); ?>
    <?php if ($wp_query->current_post <= 4) : ?>

    formatação dos 4 primeiros posts

    <?php else : ?>

    formatação dos demais posts

    <?php endwhile; ?>
    <?php endif; ?>

    mas retorna o erro da mesma forma. =/

    Ainda tá faltando o parêntesis inicial em

    (have_posts())
    unexpected T_STRING, expecting '('

    significa “encontramos uma string inesperada no lugar onde a gente estava procurando um ‘(‘ no arquivo tal, na linha 9.”

    É verdade. “comi” um parentese. Agora que o coloquei no lugar, só mudou a mensagem de erro porque ainda não resolveu.. =(

    Parse error: syntax error, unexpected T_STRING in L:\xampp\htdocs\atb-magazine\wp-content\themes\atb-magazine\index.php on line 7

    agora ele já não aponta onde está o erro. =(

    Bom, continua faltando alguma coisa, agora ele chegou na linha 7, e encontrou uma string. Ou seja, antes de uma das strings da linha 7 está faltando alguma coisa. Provavelmente um ponto-e-vírgula fechando a expressão anterior.

    eu dividi a primeira linha (podia fazer isso?), e ficou assim:

    <?php global $wp_query; if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php if ($wp_query->current_post <= 4) : ?>

    formatação dos 4 primeiros posts

    <?php else : ?>

    formatação dos demais posts

    <?php endwhile; ?>
    <?php endif; ?>

    agora ele aponta o erro:

    Parse error: syntax error, unexpected T_ENDWHILE in L:\xampp\htdocs\atb-magazine\wp-content\themes\atb-magazine\index.php on line 18

    o problema é que na linha 18 está o

    <?php endwhile; ?>

    então, honestamente, não sei mais o que fazer.. =(

    O problema é que vc trocou a notação do segundo if-else dentro do loop, mas esqueceu de fechar.

    <?php endif; ?>
    <?php endwhile; ?>
    <?php endif; ?>

    no final deve resolver. Mas esse estilo de código só dificulta ler tudo.

    nossa! eu sou muito amador nisso! auehauehuaheae
    mas agora funcionou perfeito! =)

    muitissimo obrigado, Ricardo! =)

    eu dividi as classes porque eu faço muito uso de <table> e <div> e geralmente isso dentro de um códito gera conflito.

    me aproveitando da sua boa vontade, pra ver se existe uma opção continuando dali.

    eu uso o plugin pagenavi (que na prática dá na mesma que o “posts anteriores”), mas, com esse formato de “4 completos e 6 resumidos”, quando eu vou pra página 2, ele continua com “4 completos e 6 resumidos”.

    existe a possibilidade de eu configurar que só no index mostre esse “4 completos e 6 resumidos” e ao navegar por páginas anteriores ele mostre tudo no formato resumido?

    obrigado mais uma vez! =)

    É só testar pra saber se estamos na primeira página:

    <?php
    global $wp_query;
    
    $paged = get_query_var( 'page' ); // em qual página estamos
    ($paged > 1 ? $paged : $paged = 1); // se souber,ok, se não, é 1
    
    if have_posts() : while (have_posts()) : the post();
    if (1 == $paged) {
        if ($wp_query->current_post <= 4) {
            /* markup HTML para os 4 primeiros posts */
        } else {
            /* markup para os demais posts */
        }
    else {
        /* markup completo das demais páginas */
    }
    endwhile;
    endif;
    ?>
Visualizando 13 respostas - 1 até 13 (de um total de 13)
  • O tópico ‘Personalização mais complexa do looop’ está fechado para novas respostas.