Skip to content

Instantly share code, notes, and snippets.

@tableless
Created February 13, 2014 02:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save tableless/8968592 to your computer and use it in GitHub Desktop.
Save tableless/8968592 to your computer and use it in GitHub Desktop.
Anotações e links do Micro Workshop sobre Wordpress (13/02/2014)
# LOOP
Uma das principais diferenças entre o WP_Query e o get_post(), é que no primeiro precisamos fazer um loop básico para buscar as informações que queremos de um determinado post. Com o get_post() não precisamos fazer loop, ele vai direto onde queremos.
Para o get_post() não importa se o que queremos é uma página ou um post, basta passar o ID e pronto, ele busca as informações necessárias. Já o WP_Query() precisa saber o que estamos buscando.
Quando usamos o WP_Query(), nós rodamos por default 4 queries no banco.
Uma query pega os dados da tabela de posts, outra pega os custom fields de uma meta table, a terceira query pega os dados do author da tabela de usuário e a quarta query pega os comentários relacionados ao post. Isso pode ser eficiente, mas só se você for usar todas essas informações. Nesse caso, elas já estarão prontas para serem consumidas.
Com o get_post(), usamos apenas uma query no banco. Ela geralmente usa a função setup_postdata() que permite usar templates tags como the_title(), isso quer dizer que o get_post irá fazer apenas as queries necessárias, que você pedir e não várias sem necessidade.
Isso não quer dizer que o WP_Query é ineficiente, longe disso. Há casos e casos para você usar cada um. Geralmente, meu chute, é que você vai usar mais o WP_Query do que o get_post exatamente por que vai precisar de mais informações de uma vez. E nesse caso, o WP_Query ganha por já se adiantar.
## Quando usar um ou outro
Depende dos dados que você quer mostrar. Se quer mostrar número de comentários, informação do autor ou custom fields, é melhor usar WP_Query. Se você quer apenas dados dos posts, use get_post(). Assim você "economiza" queries no banco.
Se você precisar de um loop específico, contendo tags condicionais ou funcionalidades de plugins, vá de WP_Query. Se você vai evitar tags condicionais relacionadas que não estão relacionadas com o post, você deve ir de get_post().
[Codex para WP_Query](http://codex.wordpress.org/Class_Reference/WP_Query)
[4 Maneiras de fazer o loop](http://digwp.com/2011/05/loops/)
[Não use query_posts para fazer loops porque ele não é performático](http://codex.wordpress.org/Function_Reference/query_posts)
[Diferenças entre WP_Query e get_post](http://www.peterrknight.com/differences-between-using-get_post-and-wp_query/)
# Incluindo pedaços de código com get_template_part()
O get_template_part() é uma espécia de include inteligente. Com ele fica simples de adicionar pedaços de diferentes pedaços de códigos (como loops) no seu tema. É basicamente a mesma coisa que as partials do Ruby on Rails.
É muito simples de entender:
<?php get_template_part({nome-geral}, {nome-especifico});?>
Isso vai buscar arquivos com essa nomenclatura: {nome-geral}-{nome-especifico}.php
Por exemplo: <?php get_template_part({loop}, {home});?>
Ele vai buscar um arquivo chamado: loop-home.php
Se ele não encontrar o arquivo loop-home.php, ele vai procurar um arquivo com o nome {nome-geral} no nosso caso *loop.php*. Se ele não encontrar mesmo assim, ele não inclui nada.
Diferente do include comum do PHP, que se ele não encontra o arquivo, retorna um erro.
Usando get_template_part() ajuda a componetizar seu tema, facilitando a reutilização de um mesmo pedaço de código em diversos lugares do tema.
Vantagens resumidas:
* O get_template_part sempre sabe onde seu tema está localizado e sempre procurará o arquivo no diretório do seu tema.
* Ele não retorna erros ou warnings quando o arquivo não existe
* Se o arquivo não existe, ele procura o arquivo alternativo
* Ele sabe sobre os temas filhos (child themes) e temas pais (parent themes).
[Entendendo o get_template_part()](http://kovshenin.com/2013/get_template_part/)
[Codex get_template_part()](http://codex.wordpress.org/pt-br:get_template_part)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment