Marcelo Mesquita

Apenas mais um desenvolvedor WordPress

Personalizando O Loop

Após entender como O Loop funciona, já podemos começar a brincar com o WordPress controlando o conteúdo a ser caregado ou filtrado. Mais uma vez o WordPress facilita a vida dos desenvolvedores disponibilizando a função query_posts().

Essa função permite criar parâmetros de consulta ou adicionar novos parâmetros aos passados via endereço do navegador, dessa forma você pode: excluir uma categoria da pesquisa; re-ordenar os posts; limitar a quantidade de resultados; entre outras coisas.

O funcionamento do query_posts é simples, apenas adicione a função ‘query_posts(‘args’)’ antes da função ‘have_posts()’ substituindo o args pelos argumentos desejados à sua consulta. Dessa forma o ‘have_posts()’ irá ignorar os parâmetros passados pelo endereço e fará uma consulta baseada nos dados informados. Por exemplo, se você quer listar três posts aleatórios da categoria ‘destaques’ o script seria assim:

<span style="color: #990000;">&lt;?php query_posts(&quot;&amp;orderby=rand&amp;showposts=3&amp;category_name=destaques&quot;); ?&gt;</span>
&lt;?php while(have_posts()) : ?&gt;
trecho da interface a ser repetido...
&lt;?php endwhile; ?&gt;

Note que cada atributo é separado pelo & assim como nos parâmetros passados via url. Dessa forma os desenvolvedores se sentem mais familiarizados com o código e não precisam ficar decorando a ordem dos atributos nem se preocupar em anular os que não serão usados.

Caso a sua intenção seja apenas filtrar os resultados de uma busca, adicione a variável ‘$query_string’ à sua função query_posts, dessa forma o WordPress mescla os seus argumentos com os argumentos da página. Essa variável é muito importante quando você pretende manter a navegabilidade, como é o caso dos resultados de uma pesquisa ou do conteúdo da página inicial do site. Para exemplificar, segue como seria o script para retirar uma categoria dos resultados de uma pesquisa:

<span style="color: #800000;">&lt;?php query_posts(&quot;{$query_string}&amp;cat=-3&quot;); ?&gt;</span>
&lt;?php while(have_posts()) : ?&gt;
trecho da interface a ser repetido...
&lt;?php endwhile; ?&gt;

Esse script deve ficar no arquivo search.php, então os posts encontrados na categoria 3 não aparecerão nos resultados das pesquisas e a paginação dos resultados continuará funcionando.

11 Comments

  • responder

    David

    9 anos atrás

    Olá Marcelo,
    Obrigado por atender o meu pedido, foi de grande ajuda, é desse tipo de post que a comunidade WordPress precisa.
    Continue fazendo post nesse sentido, de como personalizar loop.

  • responder

    navegabilidade.net » Blog Archive » Personalizando O Loop » Marcelo Mesquita

    9 anos atrás

    […] do site. Para exemplificar, segue como seria o script para retirar uma … Veja o post completo clicando aqui. Post indexado de: […]

  • responder

    Romulo

    8 anos atrás

    Tudo bom Marcelo? primerio quero parabenizar pelo blog, muitas informacoes valiozas sobre o wordpress, ja aprendi e coloquei em pratica muita coisa =) faleu mesmo!!
    Segundo:
    Personalizando meu site em wordpress me deparei com um problema, instalei o nextgen-gallery e tava querendo cologar algumas imagens na minha pagina de abertura para quando clicar redirecionar para pagina da galeria, mas meu tema nao usa sibebar na pagina principal (impossibilitando widget) como ainda to començando em php e wordpress nao tive como fazer isso via codigo, vc tem alguma solução para esse meu pequeno problema?

    • responder

      Marcelo Mesquita

      8 anos atrás

      Olá Romulo,
      os widgets são funções prontas do plugin configuradas para serem ativadas através da área administrativa. Se você não quiser/puder ativá-las pelo gerenciador, basta descobrir o nome da função que o WordPress chama e incluí-la na página que desejar.

      Para o nextgen eu achei duas funções que atendem suas necessidades: nggDisplayRecentImages($number, $width = “75”, $height = “50”, $exclude = “all”, $list = “”) mostra imagens recentes e nggDisplayRandomImages($number, $width = “75”, $height = “50”, $exclude = “all”, $list = “”) mostra imagens aleatórias. Onde $number, único parâmetro obrigatório, é a quantidade de imagens que deseja apresentar, $width é a largura das imagens, $height é a altura das imagens, $exclude é o tipo de ação a ser usado em $list que representa as galerias a serem usadas.

      Assim se você quiser mostrar dez imagens aleatórias de 80px de largura por 60px de altura na página inicial basta adicionar < ?php nggDisplayRandomImages(10, 80, 60); ?> no arquivo index.php do seu tema.

      Espero ter ajudado.

  • responder

    Romulo

    8 anos atrás

    Valeu mesmo Marcelo!!! isso atende minhas necessidade totalmente
    E mais uma vez PARABENS PELO SITE!!!

  • responder

    Xemele » Multiplos Loops

    8 anos atrás

    […] todo o serviço de criação de novas colunas. A forma como ele funciona é semelhante ao ‘query_posts‘, inclusive os argumentos são os […]

  • responder

    Multiplos Loops » Marcelo Mesquita

    8 anos atrás

    […] todo o serviço de criação de novas colunas. A forma como ele funciona é semelhante ao ‘query_posts‘, inclusive os argumentos são os […]

  • responder

    Romulo

    8 anos atrás

    Tudo bom marcelo?
    o eu aqui perguntando novamente =)
    Eu tava brincando com loop quando tentei fazer uma coisa: eu tenho um categoria mãe (que nao tem post) e duas categorias filhas, quando clico na categoria mãe o resultado e mostrado em ordem cronologica, entao eu pensei em algo tipo query_posts(“{$query_string}&orderby=category
    para a informacao ser passado de acordo com a categoria e nao a data, mas nao obtive sucesso =(
    Você tem alguma dica pra isso?

    • responder

      Marcelo Mesquita

      8 anos atrás

      Oi Romulo,
      eu não conhecia essa forma de ordenamento, então fui checar no ‘wp-includes/query.php’ e o valor ‘category’ é aceito para ‘orderby’. Depois eu testei localmente e funcionou.

      Não sei o que pode estar ocorrendo, o ‘query_posts’ está posicionado antes do ‘have_posts’?

  • responder

    Romulo

    8 anos atrás

    coloquei antes sim, percebi que quando coloco o codigo query_posts(”{$query_string}&orderby=category”) os posts estao vindo em ordem inversa, primeiro os mais antigos =) que estranho.
    coloquei um print do codigo nesse link http://www.periclessantana.com.br/arq/query.jpg se quiser da uma olhada ou agradeco.
    [ ]’s
    vou continuar tentando aqui

  • responder

    Djalma

    8 anos atrás

    Me ajudou muito este post valew pela força..

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *