Há algum tempo que desejávamos iniciar esta série de artigos, a partir da qual esperamos ajudá-lo a aprender como criar um template WordPress. Esta série irá analisar passo-a-passo todas as diferentes fases do desenvolvimento de um template para WordPress, e para que você consiga analisar e implementar todas elas, decidimos partir esta ideia em vários artigos mais simples de assimilar e explorar. No final da série, certamente conseguirá criar seu template WordPress!

Os templates wordpress são hoje em dia cada vez mais procurados e podem ser facilmente criados com o intuito de serem vendidos em mercados como a Theme Forest ou a Mojo Themes. Qualquer pessoa que deseje entrar neste mundo fascinante do desenvolvimento de templates para wordpress, pode posteriormente comercializá-los nesses mercados e começar a ganhar dinheiro produzindo templates de qualidade.

Se não deseja perder pitada desta nova série sobre Como criar um Template WordPress, considere assinar a nossa newsletter e receber todos os próximos artigos por email e comodamente. É grátis!

Endereço de Email:

Vejamos algumas das competências do template que vamos desenvolver ao longo dos próximos artigos:

  • Otimização para motores de busca
  • Marcação com suporte Microformato da Google
  • Semântica da estrutura de marcação válida e lógica que pode ser usada em qualquer template
  • Layouts de CSS inteligentes
  • Classes dinâmicas para o corpo, postagens e comentários
  • Trackbacks e comentários em árvore separados
  • 2 áreas para widgets que desaparecem quando não estão ocupadas
  • Tudo o resto que é normal num template WordPress

No final desta série de tutoriais, com o código feito e pronto a ser implementado, você poderá fazer praticamente tudo aquilo que desejar com ele. Você pode inclusive olhar para o resultado final como a sua framework WordPress de trabalho.

CONSTRUINDO O INDEX (INDEX.PHP) DO TEMPLATE WORDPRESS

O ficheiro Index.php é provavelmente o ficheiro mais crucial de todo o seu template WordPress. Não apenas porque o WordPress necessita dele no caso de você não estar usando nenhuma página irmã (como as páginas, category.php ou tag.php) mas porque tendo em conta o trabalho que estamos desenvolvendo, conseguir criar este ficheiro da forma mais correta, irá ajudar-nos a construir todos os outros ficheiros mais rapidamente (excepto o ficheiro de comentários que é sempre muito complicado de programar).

O CICLO

Embora o ciclo esteja a meio do seu ficheiro, de uma forma metafórica, o index.php inicia e termina com O Ciclo. Sem ele você não tem nada. Vejamos como ele se parece.

<?php while ( have_posts() ) : the_post() ?>
<?php endwhile; ?>

Muito simples mesmo. Embora você tenha postagens em seu banco de dados, o seu template irá correr um ciclo por entre eles e por cada um, realizar uma determinada tarefa. A parte do “realizar uma tarefa” é sem dúvida a mais complexa de todas. Mas ainda assim, poderemos torná-la simples e acessível.

Experimente este ciclo para começar e ao longo dos artigos iremos trabalhar em cima dele. Coloque esse código dentro da sua div #content em seu ficheiro index.php.

<?php while ( have_posts() ) : the_post() ?>
<?php the_content(); ?>
<?php endwhile; ?>

O que é que você obtém com esse código? Todas as suas postagens numa grande pilha. Mas poderemos tornar isso diferente.

<ul>
<?php while ( have_posts() ) : the_post() ?>
<li>
          <?php the_excerpt(); ?>
</li>
<?php endwhile; ?>
</ul>

Conseguiu perceber o que fizemos aqui? Agora você ficou com uma lista não ordenada de todos os excertos de suas postagens. (Agora também já consegue perceber o que as funções the_content() e the_excerpt() fazem!)

Basicamente, você cria um ciclo (inicia com while e termina com endwhile) e coloca algumas coisas dentro dele — coisas como por exemplo tags de template WordPress que puxam informação de suas postagens que se encontram dentro do ciclo, tal como a tag de template bloginfo() puxa a informação das suas opções do WordPress, como vimos no último artigo.

Agora, vamos criar um ciclo realmente fantástico! Vamos iniciar com a nossa versão básica. Mas iremos fazer com que ela seja compatível com a Tag More e a Tag Next Page. Iremos colocá-lo também numa Div própria e fazer com que o browser saiba que isso é o conteúdo de suas postagens usando a classe de micro-formato “entry-content”.

  <div class="entry-content">
<?php the_content( __( 'Continue reading <span class="meta-nav">»</span>', 'your-theme' )  ); ?>
<?php wp_link_pages('before=<div class="page-link">' . __( 'Pages:', 'your-theme' ) . '&after=</div>') ?>
  </div><!– .entry-content –>

E o título da postagem? Isso é muito simples também. Iremos usar a tag the_title() para puxar o título da postagem e envolvê-lo numa tag <a> que linke diretamente para o the_permalink() (esse é o link permanente para qualquer postagem). Iremos adicionar também um atributo para títulos e outro micro-formato (bookmark) que diz ao browser ou ao buscador (ex.: Google) que isto é um link permanente para um artigo. Tente colocar este código por baixo de sua div .entry-content.

<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( __('Permalink to %s', 'your-theme'), the_title_attribute('echo=0') ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>

Agora é necessário puxar a informação adicional sobre a sua postagem: quem escreveu o artigo, a data em que foi publicado, a categoria onde foi inserido, tags, links para comentários, etc. Gostaria de quebrar esta fase em duas fases: as coisas relacionadas com meta dados (autor e data de publicação) que colocamos antes do conteúdo da postagem, e as coisas relacionadas com utilidade (categorias, tags e link para comentários) que colocamos depois do conteúdo. E ambas as fases irão colocar a sua postagem dentro de sua própria div junto com o título.

Vamos dar uma olhada a todo o ciclo já programado. Inseri alguns comentários no PHP para o ajudar a compreender melhor o código.

      <?php /* O Ciclo — com comentários! */ ?>
      <?php while ( have_posts() ) : the_post() ?>
      <?php /* Criando uma div com um ID único graças ao the_ID() e classes semânticas com o post_class() */ ?>
          <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
      <?php /* um título h2 */ ?>
           <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( __('Permalink to %s', 'your-theme'), the_title_attribute('echo=0') ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
      <?php /* Meta dados da postagem com possibilidade de tradução */ ?>
           <div class="entry-meta">
            <span class="meta-prep meta-prep-author"><?php _e('By ', 'your-theme'); ?></span>
            <span class="author vcard"><a class="url fn n" href="<?php echo get_author_link( false, $authordata->ID, $authordata->user_nicename ); ?>" title="<?php printf( __( 'View all posts by %s', 'your-theme' ), $authordata->display_name ); ?>"><?php the_author(); ?></a></span>
            <span class="meta-sep"> | </span>
            <span class="meta-prep meta-prep-entry-date"><?php _e('Published ', 'your-theme'); ?></span>
            <span class="entry-date"><abbr class="published" title="<?php the_time('Y-m-d\TH:i:sO') ?>"><?php the_time( get_option( 'date_format' ) ); ?></abbr></span>
            <?php edit_post_link( __( 'Edit', 'your-theme' ), "<span class=\"meta-sep\">|</span>\n\t\t\t\t\t\t<span class=\"edit-link\">", "</span>\n\t\t\t\t\t" ) ?>
           </div><!– .entry-meta –>
      <?php /* O conteúdo da postagem */ ?>
           <div class="entry-content">
      <?php the_content( __( 'Continue reading <span class="meta-nav">»</span>', 'your-theme' )  ); ?>
      <?php wp_link_pages('before=<div class="page-link">' . __( 'Pages:', 'your-theme' ) . '&after=</div>') ?>
           </div><!– .entry-content –>
      <?php /* Categoria micro-formatada e links para tags junto com link para comentários */ ?>
           <div class="entry-utility">
            <span class="cat-links"><span class="entry-utility-prep entry-utility-prep-cat-links"><?php _e( 'Posted in ', 'your-theme' ); ?></span><?php echo get_the_category_list(', '); ?></span>
            <span class="meta-sep"> | </span>
            <?php the_tags( '<span class="tag-links"><span class="entry-utility-prep entry-utility-prep-tag-links">' . __('Tagged ', 'your-theme' ) . '</span>', ", ", "</span>\n\t\t\t\t\t\t<span class=\"meta-sep\">|</span>\n" ) ?>
            <span class="comments-link"><?php comments_popup_link( __( 'Leave a comment', 'your-theme' ), __( '1 Comment', 'your-theme' ), __( '% Comments', 'your-theme' ) ) ?></span>
            <?php edit_post_link( __( 'Edit', 'your-theme' ), "<span class=\"meta-sep\">|</span>\n\t\t\t\t\t\t<span class=\"edit-link\">", "</span>\n\t\t\t\t\t\n" ) ?>
           </div><!– #entry-utility –>
          </div><!– #post-<?php the_ID(); ?> –>
      <?php /* Encerrar a div e terminar o ciclo com endwhile */ ?>
      <?php endwhile; ?>

NAVEGAÇÃO

Agora necessitamos de criar uma forma de navegarmos para outras postagens. Iremos criar isto usando 2 tags do WordPress: next_posts_link() e previous_posts_link(). Estas duas funções … não fazem aquilo que você julga que fazem.

Tal como tudo o que está no index.php, a navegação de postagens tem de ser criada com alguns cuidados porque é um código que iremos usar em praticamente todas as páginas de nosso template.

Uma coisa que também gostamos, é colocar a navegação no topo e no final de cada postagem.

Uma coisa que queremos fazer também é esconder a navegação caso não existam outros conteúdos para navegar. Ou seja, se você não tiver postagens antigas em seu blog, nós não queremos enviar o código de navegação para o browser. Para o fazer, envolvemos o nosso código da seguinte forma:

      <?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
      <?php } ?>

O que estamos fazendo é indicando que queremos verificar num dado ciclo, se o número de postagens é superior a 1. Caso seja afirmativo, a navegação aparece em seu blog.

Eis o código final que você irá necessitar na sua navegação, para o topo e fundo da postagem, ou seja, antes e depois do ciclo.

      <?php /* Navegação para o Topo */ ?>
      <?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
          <div id="nav-above" class="navigation">
           <div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older posts', 'your-theme' )) ?></div>
           <div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-nav">»</span>', 'your-theme' )) ?></div>
          </div><!– #nav-above –>
      <?php } ?>
      <?php /* Navegação para o Fundo */ ?>
      <?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
          <div id="nav-below" class="navigation">
           <div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older posts', 'your-theme' )) ?></div>
           <div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-nav">»</span>', 'your-theme' )) ?></div>
          </div><!– #nav-below –>
      <?php } ?>

E agora uma última coisa que vamos fazer em nosso index.php. Nas próximas postagens iremos analisar como trabalhar com ele, mas para já vamos apenas colocar esta nova função antes da nossa get_footer().

<?php get_sidebar(); ?>

ESTÁ ACOMPANHANDO? TEM DÚVIDAS?

Este quinto artigo teve como base a programação de nosso index.php e sua devida otimização. O mais importante neste momento é que você compreenda os passos que vamos dando e caso tenha dúvidas, poderá colocá-las sem problema. Contamos com a sua participação e as suas dúvidas. Está gostado? Participe com seus comentários!

Se não deseja perder pitada desta nova série sobre Como criar um Template WordPress, considere assinar a nossa newsletter e receber todos os próximos artigos por email e comodamente. É grátis!

Endereço de Email:

Até Já!