Se eu tiver um loop em execução em uma consulta de categoria como:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<ul>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<li>.. </li><?php wp_reset_query(); ?>
<?php endwhile; ?>
</ul>
Como eu criaria uma cláusula if que quebra a lista em um determinado intervalo e inicia uma nova. Por exemplo, no 10º post, retorne a </ul>
e inicie um novo <ul>
às 11.
Isso está incorreto, mas para ilustrar meu objetivo:
<?php $count =0;
while($count <=50){
if ($count == 9){
echo "<li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li></ul>";
}
elseif ($count == 10){
echo "<ul><li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li>";
}
else {
echo "<li><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></li>";
}
Qual é a maneira correta de incluir essa lógica no loop?
Respostas:
Crie colunas para sua consulta e exibição fácil
Nos temas é provavelmente mais útil ter algo que se encaixe bem nas tags de modelo e no loop. Minha primeira resposta não se concentrou muito nisso. Além disso, achei um pouco complicado demais para uma adoção rápida.
Uma abordagem mais fácil que me veio à mente foi estender o "loop" com colunas e chegar a esta solução até agora:
Um objeto WP_Query_Columns "estende" qualquer consulta WP padrão com colunas que podem ser facilmente iteradas. O primeiro parâmetro é a variável de consulta e o segundo parâmetro é o número de itens a serem exibidos por coluna:
Para usá-lo, basta adicionar a classe WP_Query_Columns desta lista aos seus temas function.php.
Uso Avançado
Se você precisar do número da coluna que está exibindo no momento (por exemplo, para algumas classes CSS pares / ímpares, também é possível obtê-lo no foreach:
E o número total de colunas também está disponível:
Exemplo de vinte e dez
Eu poderia rapidamente invadir o tema vinte e dez para um teste e adicionar títulos acima de qualquer loop dessa maneira. Ele está inserido no loop.php, o começo é o código do tema:
Para uma resposta mais longa:
(foi basicamente como cheguei ao assunto acima, mas explica melhor como realmente resolver o problema com operações matemáticas simples. Minha nova solução é iterar sobre algo pré-calculado.)
Depende um pouco do quanto você realmente precisa para resolver o problema.
Por exemplo, se o número de itens por coluna for igual a um, isso é muito simples:
Mesmo com esse código simples, pode-se ver que há várias decisões a serem tomadas:
A última pergunta é bastante interessante para a saída HTML, pois você provavelmente deseja incluir não apenas itens, mas também a coluna com elementos html.
Felizmente, com o código, podemos definir tudo isso em variáveis e criar código que sempre calcula nossas necessidades.
E, às vezes, nem podemos responder a todas as perguntas desde o início. Por exemplo, a contagem do total de itens: existe alguma, múltipla, uma contagem exata que corresponda a um número inteiro de colunas no total?
Mesmo a resposta de Jan Fabry pode funcionar em alguns casos (como meu exemplo acima funciona no cenário de um item por coluna), você pode estar interessado em algo que funcione para qualquer número de itens retornados pelo WP_Query.
Primeiro para a matemática:
Esse código não é executado, então vamos colocar isso em um exemplo de texto simples
Isso realmente é executado e já produz alguma saída:
Isso já simula muito bem como poderia ser um modelo de wordpress:
(Não executei o último exemplo em um ambiente WP, mas deve estar pelo menos sintaticamente correto.)
fonte
Esta é mais uma questão de programação geral, mas aqui está a idéia básica:
fonte
wp_reset_query();
não está relacionado à variável $ the_query. Isso não é necessário, certo?$the_query->the_post()
substituirá a$post
variável global e awp_reset_query()
restaurará (chamandowp_reset_postdata()
- o que também pode ser suficiente por si só?).$wp_query
mas$the_query
foi usado no exemplo. No entanto, eu estava errado, vou adicioná-lo à minha segunda resposta por completo.<ul></ul>
.Não há necessidade de criar uma var separado para contar, como o var consulta já conta ele em:
$wp_query->current_post
. Além disso, você precisa levar em consideração a entrada final na lista para não ficar vazio<ul></ul>
na sua marcação.fonte
WP_Query
também tem uma$post_count
variável, você pode usar isso em vez decount($the_query->posts)
. Zac, você pode "inaceitar" minha resposta e aceitar outra, se resolver o seu problema melhor.Adicione a
get_columns_array()
função ao seu function.php. Você pode iterar facilmente sobre suas colunas:No seu tema, você foreach cada loop sobre as colunas:
Defino o tamanho padrão de uma coluna como 10. Você pode usar o segundo parâmetro para definir o tamanho de uma coluna por conta própria. Gostaria de 7:
get_columns_array($post_count, 7);
.fonte
Aqui está outra abordagem que você pode adotar:
fonte