Fazendo melhor uso dos sticky posts

Com a chegada do WordPress 2.7, a plataforma mostrou algumas boas novidades. Como todo mundo já deve saber disso, dispensarei grandes apresentações. Bem, dentre tais novidades, a que chamou bastante atenção foi a chamada sticky posts/posts fixos, que nada mais são do que posts que você pode manter fixos na página inicial e, principalmente, no topo do seu blog/site, se assim quiser. Ainda acho que a funcionalidade é muito básica, mas tais considerações eu deixo para um próximo texto. Por enquanto, a idéia é tentar detalhar um pouco as vantagens que a interessante novidade (não mais tão novidade, mas tudo bem) pode trazer para o seu site.

Fixando o post

Basta você criar um novo post ou editar um antigo e marcar a opção Fixar este post na página inicial no painel Publicar e pronto, seu post será o primeiro da lista. Caso deseje usar a funcionalidade para mais de um post, sem problemas. O WordPress jogará todos os posts marcados como sticky/fixo pro topo do seu site. Só atenção: a ordem dos posts respeitará a ordem que foi usada para marcá-los. O último post fixado vai ser sempre o primeiro da fila, independente da data dos outros. E que fique claro, os posts continuam na ordem cronológica. Se você desmarcar a opção de fixar o post, ele simplesmente não aparecerá mais no topo das postagens.

Estilizando o post

Como a Cátia já escreveu em seu texto sobre o post_class(), o WordPress agora cria, através dessa função, várias classes para o post. E claro, era de se esperar que uma classe sticky fosse atribuída caso o post estivesse marcado assim. A minha estrutura ficou assim:

[sourcecode language="html"]

[/sourcecode]

Agora, é só declarar a classe sticky no seu arquivo CSS e estilizá-la como bem entender.

A tag condicional is_sticky()

Sendo redundante, a função is_sticky(), se usada dentro do The Loop, vai retornar verdadeiro caso o post tenha sido marcado como sticky. É, simples assim.

[sourcecode language="php"][/sourcecode]

Caso você precise saber se tal post é um sticky, basta colocar a ID do post desejado como parâmetro da função:

[sourcecode language="php"][/sourcecode]

Ignorando sticky posts

Provavelmente você não vai querer que os posts fiquem fixos em todas as áreas do seu site, principalmente se você executa várias queries dentro do mesmo arquivo. Para ignorar os sticky posts e mantê-los na ordem cronológica, faça uso do parâmetro caller_get_posts=1 dentro da query:

[sourcecode language="php"][/sourcecode]

Retirando ou mostrando apenas os sticky posts na query

Não há muito o que explicar. Caso você não queira que a sua query mostre os posts marcados como sticky, faça:

[sourcecode language="php"]
$sticky)); ?>[/sourcecode]

Agora, se a idéia e mostrar apenas aqueles posts marcados, use o parâmetro post__in:

[sourcecode language="php"]
$sticky)); ?>[/sourcecode]

Mostrando apenas um sticky post no topo da página

Por padrão, o query_posts() traz todos os posts fixados para o topo. Se você quiser apenas um desses posts no topo, isso pode ser feito da seguinte maneira:

[sourcecode language="php"]
[/sourcecode]

Essa query é perfeita para blogs que possuam espaço para um post destaque. Porém, ela traz o primeiro post marcado como sticky (é, o primeiro de todos), o que não me parece uma solução muito interessante. Para que a query retorne o último post fixado, apenas adicione a função array_reverse() para que assim a primeira ocorrência seja, na verdade, o último sticky post.

[sourcecode language="php"]

[/sourcecode]

E é isso. Resumidamente, estão aí todos (ou quase todos) os principais detalhes sobre sticky posts. É bem possível que este artigo não tenha mostrado nenhuma novidade perto de outros já escritos, mas ei, é mais uma referência. E sugestões, claro, são mais do que apreciadas.

18 ideias sobre “Fazendo melhor uso dos sticky posts

  1. Natan

    Interessante, boa função. Sou fâ do wordPress, sou fã também dessa imensa comunidade que se aglomera entorno deste todo poderoso WP que sempre ajuda e contribui para seu crescimento.

  2. Walter Araujo dos Santos

    Olá Eduardo, primeiramente parabéns pelo excelente post, em segundo eu segui sua lógica em um trabalho onde preciso colocar na home.php dois loops um com apenas o ultimo post fixo entao usei a sequencia
    1.
    2.
    3.

    e logo apos no segundo loop onde eu preciso apresentar somente os outros posts que nao estao marcados como fixo utilizei

    1.
    2. $sticky)); ?>

    mas nao está funcionando o post__not_in

  3. Bruno

    Estou trabalhando em um guia de serviços em meu portal onde os posts serão as empresas e as categorias as atividades delas. Daí estou tentando usar o query_posts para colocá-las em ordem alfabética. Tenho alguns posts fixos que na index aparecem no topo. Porém nas categorias e na busca (search) não funciona. Aparecem pela data de postagem. Sabem o que pode ocorrer? (usei o mesmo query_posts)

  4. Waldir

    Caros amigos

    Estou começando agora com o WordPress e utilizo a versão 2.9.1. Trata-se de de uma ferramenta poderosa.
    Só não estou sabendo utilizar um recurso que para mim seria uma mão na roda: como fixar um post na página inicial (sticky posts). Eu segui os passos do meu painel de controles, mas não funcionou.
    Se puderem me ajudar, ficarei muito grato. E, se possível, pediria o favor de também me mandarem a resposta através do e-mail: rapidix@rapidix.com.br
    Muito grato.

  5. Bruno

    Estou trabalhando em um guia de serviços em meu portal onde os posts serão as empresas e as categorias as atividades delas. Daí estou tentando usar o query_posts para colocá-las em ordem alfabética. Tenho alguns posts fixos que na index aparecem no topo. Porém nas categorias e na busca (search) não funciona. Os posts fixos aparecem pela ordem alfabética e não no topo. Sabem o que pode ocorrer?

  6. Lili

    Olá estou mexendo com o wordpress a pouco tempo, estou apanhando um pouco, mas com muita pesquisa e esforço estou aprendendo.
    Sobre o Sticky, eu marquei apenas um post como fixo, mas não sei se é problema com o tema que eu escolhi pq esse post se repete.
    Tipo logo abaixo do cabeçalho aparece o post fixo, em seguida o ultimo post publicado, logo após o post fixo aparece novamente e aí o restante dos posts.
    Podem me ajudar por favor?

  7. Eduardo Zulian Autor do post

    @Bruno
    Você precisa usar o query_posts() dentro do seu search.php, da mesma forma. Não tem erro.

    @Lili
    Faz o teste com algum dos códigos aí em cima. Acho que vai funcionar direitinho.

  8. Tiago Celestino

    E como seria para puxar dentro de um wp_query? Coloquei assim:

    have_posts()) : ?>

    porém retorna todos os posts das categorias. Usei o meta_highlight, mas mesmo assim não consegui. Alguém sabe como fazer?

Os comentários estão fechados.