Como criar um tema para o WordPress – parte V

Tema Mighty Bom pessoal, estamos chegando a última parte deste tutorial e conforme prometido anteriormente, vou disponibilizar para download o tema que elaboramos durante todo este tempo. Para quem está chegando agora, é bom dar uma olhada nos posts anteriores deste tutorial, parte I, parte II, parte III e parte IV.

Antes de disponibilizar o tema, gostaria de esclarecer para quem acompanhou todo o tutorial, que fiz algumas modificações nos templates e adicionei mais alguns arquivos ao nosso tema, para que o mesmo ficasse completíssimo.

Os arquivos adicionados foram:

  • single.php – arquivo cuja função é exibir um único post. A única diferença para o index.php é a inserção da tag comments_template(), que insere o arquivo comments.php;
  • comments.php – tem a função de exibir os comentários e o formulário para comentar no arquivo single.php;
  • functions.php – torna o tema compatível com widgets.

Tenho certeza que, quem leu todas as partes do tutorial não terá dificuldades em entender os acréscimos que foram feitos. De qualquer maneira se alguém tiver alguma dúvida basta perguntar. Críticas, sugestões e opiniões são muito bem-vindos.

Espero que este tutorial tenha ajudado vocês a elaborar seus próprios temas, pois esse foi meu principal objetivo ao escrevê-lo. Quem quiser informações mais detalhadas sobre como elaborar um tema pode acessar o WordPress Codex.

  • Download do Tema Mighty – 2 colunas, XHTML/CSS válido, compatível com widget e totalmente em português.

[download]

Como criar um tema para o WordPress – parte IV

Na etapa de hoje, falaremos sobre o rodapé do nosso tema e como sempre, recomendo a todos que estão chegando agora a leitura dos posts anteriores deste tutorial, parte I, parte II e parte III.
Na imagem abaixo, como vocês podem ver, está o rodapé do nosso template.
Template Mighty - Rodapé
Neste template o rodapé é extremamente simples, mas há temas para o WordPress que adicionam vários recursos, como é o caso do tema Dark (excelente por sinal).
Voltando ao nosso template, vamos dar uma olhada no código fonte.

<div id="footer">
<ul>
<li id="copyright" >&amp;copy; 2007 Mighty</li>
<li id="links" >
<ul>
<li><a href="http://validator.w3.org/check/referer">XHTML</a> |</li>
<li><a href="http://jigsaw.w3.org/css-validator/check/referer" >CSS</a> |</li>
<li><a href="http://www.kulor.com/?ref=mighty_template">Design by Kulor</a></li>
</ul>
</li>
</ul>
</div>
</body>
</html>

Como de praxe, agora vamos ver o código com as tags do WordPress, que deverá ser inserido no arquivo footer.php.

<div id="footer">
<ul>
<li id="copyright">&amp;copy; 2007 <?php bloginfo('name'); ?> |</li>
<li>Powered by <a href="http://wordpress.org/">WordPress</a> |</li>
<li><a href="<?php bloginfo('rss2_url'); ?>">RSS</a></li>
<li id="links">
<ul>
<li><a href="http://validator.w3.org/check/referer" >XHTML</a> |</li>
<li><a href="http://jigsaw.w3.org/css-validator/check/referer" >CSS</a> |</li>
<li><a href="http://www.kulor.com/?ref=mighty_template" >Design by Kulor</a></li>
</ul>
</li>
</ul>
</div>
<?php wp_footer(); ?>
</body>
</html>

Como vocês puderam observar, de fato nosso rodapé é muito simples e apenas algumas tags foram inseridas. Vamos explicá-las:

  • bloginfo(’name’) – nome do blog;
  • bloginfo(’rss2_url’) – link para o feed RSS;
  • wp_footer() – é uma tag especial que permite certos plugins inserir códigos no rodapé de seu tema. Quando esta tag não é inserida vários plugins deixam de funcionar, então não esqueça de colocá-la em todos os seus temas.

Terminamos assim mais uma etapa de nosso tutorial e para a próxima, e última parte, teremos o tema completo para download e as considerações finais. Até a próxima.

Como criar um tema para o WordPress – parte III

Menu Lateral do Tema Mighty

Menu Lateral do Tema Mighty

Pessoal, não esqueci do nosso tutorial, apenas andei sem tempo nas últimas semanas. Para quem está chegando agora, recomendo a leitura da Parte I e Parte II do tutorial. Na primeira parte do tutorial expliquei como funciona um tema WordPress em linhas gerais e sobre os arquivos screenshot.png, style.css e header.php. Na segunda parte expliquei sobre o corpo principal do tema, o index.php. E agora vocês verão como funciona o menu lateral com o arquivo sidebar.php
Na imagem ao lado vocês estão vendo o menu lateral e nele nos temos o formulário de busca, as listas de categorias, arquivo e blogroll. Todas essas listas são geradas automaticamente pelo WordPress, desta forma sempre que você cria uma nova categoria, por exemplo, ela é exibida no menu lateral sem precisar editar arquivo algum.
Primeiro vejamos o código HTML do menu lateral.

<div id="secondaryContent">
<form action="">
<p><input /> <button>procurar</button></p>
</form>
<h3>Categorias</h3>
<ul>
<li><a href="#">Sed eros</a></li>
<li><a href="#">Condimentum</a></li>
<li><a href="#">Feugiat sit</a></li>
</ul>
<h3>Arquivos</h3>
<ul>
<li><a href="#">Julho 2007</a></li>
<li><a href="#">Junho 2007</a></li>
</ul>
<h3>Blogroll</h3>
<ul>
<li><a href="#">Sed eros</a></li>
<li><a href="#">Condimentum</a></li>
<li><a href="#">Feugiat sit</a></li>
</ul>
</div>

Agora vamos inserir as tags do WordPress e ver como fica o código do template.

<div id="secondaryContent">
<form id="searchform" method="get" action="<?php bloginfo('home'); ?>">
<p><input type="text" name="s" id="s" /><input type="submit" value="Procurar" /></p>
</form>
<h3>Categorias</h3>
<ul>
<?php wp_list_categories('show_count=1'); ?>
</ul>
<h3>Arquivos</h3>
<ul>
<?php wp_get_archives('type=monthly'); ?>
</ul>
<h3>Blogroll</h3>
<ul>
<?php get_links(2, '<li>', '</li>', '', '', 'name'); ?>
</ul>
</div>

Visto o código com as tags inseridas mostraremos agora o significado de cada uma. Antes porém, é importante explicar que o formulário de busca segue um padrão, e por isto, basta copiar e colar o código na sua template.

  • bloginfo(‘home’) – insere a URL inicial do blog;
  • wp_list_categories(‘show_count=1′); – exibe uma lista com todas as categorias com o número de posts existentes em cada categoria;
  • wp_get_archives(‘type=monthly’) – lista todos os meses do ano em que foram inseridos posts. Se você escreveu 7 posts no mês de maio de 2007, por exemplo, será exibido um link “maio/2007″ que ao ser clicado exibirá todos os 7 posts que você escreveu;
  • get_links(2, ‘<li>’, ‘</li>’, ”, ”, ‘name’) – lista todos os links da categoria 2 (no caso blogroll), inserindo antes a tag “<li>”, depois a tag </li> e exibindo o nome do link.

Assim, concluimos mais uma parte de nosso tutorial. Na próxima etapa veremos o rodapé.

Como criar um tema para o WordPress – parte II

Corpo principal do Tema Mighty

Corpo principal do Tema Mighty

Na primeira parte do tutorial expliquei como funciona um tema WordPress em linhas gerais e sobre os arquivos screenshot.png, style.css e header.php. Nesta segunda parte explicarei sobre o corpo principal do tema, o index.php.

Como vocês podem ver na imagem do corpo principal, este trecho está dividido em cinco partes bem distintas, são elas: o título do post, o conteúdo do post, o link para comentar, o autor e a data. Este é o conteúdo que irá se repetir até que não tenha mais posts ou o número de posts configurado para ser exibido na página principal seja alcançado. Esse é o famoso Loop do WordPress.

Vamos dar uma olhada no código HTML do template referente a este trecho.

<div id="container">
<div id="primaryContent">
<h2>Website Kulor on top yet again website Kulor on top yet again</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce condimentum nibh. Sed eros tellus, <strong>semper</strong> vel, dignissim at, feugiat sit amet, leo.</p>
<div id="comments">
<dl id="status">
<dt>Comments (1)</dt>
<dd>| <a href="#">Add comment</a></dd>
</dl>
<dl class="comment">
<dt><a href="#">John Doe</a></dt>
<dd class="date">on Wed 5 Aug 06</dd>
</dl>
</div>
</div>

E como fica o código com as tags do WordPress.

<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div id="container">
<div id="primaryContent">
 <li ><code><h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<p><?php the_content(); ?></p>
<div id="comments">
<dl id="status">
<dt><a href="<?php the_permalink(); ?>"><?php comments_number('Nenhum coment&amp;aacute;rio', 'Um coment&amp;aacute;rio', '% coment&amp;aacute;rios' );?></a></dt>
</dl>
<dl class="comment">
<dt><?php the_author(); ?></dt>
<dd class="date">dia <?php the_time('j \d\e\ F \d\e\ Y'); ?></dd>
</dl>
<?php endwhile; else: ?>
<p><?php _e('Nenhum post encontrado.'); ?></p>
<?php endif; ?>
<?php posts_nav_link(' &amp;#8212; ', __('&amp;laquo; P&amp;aacute;gina anterior'), __('Pr&amp;oacute;xima p&amp;aacute;gina &amp;raquo;')); ?>
</div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Agora o que significa cada uma dessas tags. Antes é importante esclarecer que o index.php é o arquivo base do tema e é por isso que nós vamos inserir nele os demais arquivos do tema, como o cabeçalho, o menu e o rodapé. Vamos lá.

  • get_header() – insere o código do header.php, isto é, o cabeçalho do tema;
  • if (have_posts()) : while (have_posts()) : the_post() – aqui na verdade nós temos três funções e elas é que dão início ao LOOP. A primeira tag verifica se há posts, a segunda solicita que, enquanto existir post continue no loop e a terceira “pega” todas as informações do post, como o título, conteúdo, data, autor, etc. É comum encontrar tags que só funcionam dentro do loop, isto quer dizer que a tag só irá retornar algum valor se estiver inserida após estas funções e antes de endwhile; e endif;, que terminam o loop.
  • the_permalink() – o link do post;
  • the_title() – o título do post;
  • the_content() – o conteúdo do post;
  • comments_number() – insere o número de comentários feitos no post. Além disso adiciona um texto dependendo da quantidade de comentários. Se não houver comentários a tag irá inserir o texto “Nenhum comentário”, se tiver apenas um comentário, irá inserir “Um comentário” e para mais de um comentário irá inserir “N comentários”, onde N é a quantidade de comentários, claro;
  • the_author() – o autor do post;
  • the_time() – a data em que o post foi postado;
  • endwhile; else: – encerra o loop e adiciona a condicional que, se não houver nenhum post insira o conteúdo abaixo;
  • _e(‘Nenhum post encontrado.’) – este é conteúdo que irá ser inserido caso não exista nenhum post;
  • endif; – termina a condicional que verifica se há posts;
  • posts_nav_link() – adiciona links de navegação, “próxima página” e “página anterior”;
  • get_sidebar() – insere o menu lateral, que veremos na próxima etapa do tutorial;
  • get_footer() – e por último, mas não menos importante, insere o rodapé.

Pronto, mais uma parte do nosso tutorial concluída. Até a próxima!

Como criar um tema para o WordPress – parte I

Neste tutorial explicarei como criar um tema para o WordPress baseado em um template XHTML/CSS. Como não sou designer e nosso objetivo aqui não é criar um template e sim um tema para o WordPress, fui no OSWD e escolhi um template, o escolhido foi o Mighty, desenvolvido pelo Kulor.

Template Mighty

Template Mighty

Todos os templates que existem lá, você pode copiar, modificar e utilizar da forma que quiser, desde que cite o autor. Então escolha um template ou crie o seu próprio e vamos colocar a mão na massa.

Um detalhe importante, na verdade dois, primeiro: para a completa compreensão deste tutorial é necessário que você saiba HTML e CSS, se souber alguma coisa de PHP será ótimo mas não é essencial. Segundo: para tornar mais rápido e prático o desenvolvimento do tema eu recomendo que você instale o WordPress no seu computador, eu já fiz um tutorial explicando como fazer isso, espero que lhe seja útil.

Nesta primeira parte do tutorial explicarei onde colocar os arquivos, como o WordPress reconhece seu tema e como criar o cabeçalho. Vamos lá, acesse a pasta wp-content/themes, que está localizada dentro do seu WordPress no seu computador ou no seu servidor, crie uma pasta com o nome da sua template, no meu caso será Mighty, e salve os arquivos da template. Qualquer tema do WordPress deve ter no mínimo dois arquivos, index.php e style.css. No nosso caso teremos mais, são eles: index.php, header.php, sidebar.php, footer.php, comments.php, style.css, screenshot.png e mais uma pasta chamada images (que contem as imagens utilizadas na template). Na medida que formos construindo a template irei explicando para que serve cada um destes arquivos.

Antes de entrarmos diretamente na modificação dos arquivos faremos logo a imagem de preview do tema, que aparece na administração, no momento em que você está selecionando as templates. O arquivo deve ser chamar screenshot.png e possuir 300×225 pixels. Deverá ser salva na pasta do tema como todos os outros arquivos, no nosso caso wp-content/themes/mighty. Lembrei agora de uma dica muito legal que sempre utilizo quando tenho alguma dúvida, vejo como foi feito nos outros templates, principalmente no Classic e Default, que foram os primeiros temas do WordPress.

A primeira modificação a ser feita será no arquivo style.css. Neste arquivo deveremos inserir as informações sobre a template, que o WordPress utilizará para reconhecer como um tema e exibirá na seção Presentation>Theme do administrador. Se estes dados não forem inseridas no início do style.css, o tema não aparecerá para você escolher na administração. As informações que deverão ser inseridas são as seguintes:

/*
Theme Name: Mighty
Theme URI: http://www.pblog.com.br/
Description: Tema desenvolvido por Erico Oliveira baseado no template Mighty
Author: Erico Oliveira
Author URI: http://www.pblog.com.br
Version: 1.0
*/

Acredito que aqui não há nada a ser esclarecido, tudo é bem óbvio. Vamos adiante.

O próximo arquivo que faremos é o header.php, ou seja, o cabeçalho. Copiaremos o trecho do código referente a esta parte da template:

Cabeçalho do tema Mighty

Cabeçalho do tema Mighty

Que é exatamente esta:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Mighty</title>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
<link rel="stylesheet" href="style.css" media="all" type="text/css" />
<link rel="alternate" href="" title="RSS Feed" type="application/rss+xml" />
</li>
</head>
<body>
<div id="header">
<div class="subContainer">
<div id="logo">
<div id="box">MIGHTY</div>
<p>Template by James Broad</p>
</div>
</div>
</div>
<div id="navigation">
<ul>
<li id="active"><a href="">Home</a></li>
<li><a href="">About Mighty</a></li>
<li><a href="">Products</a></li>
<li><a href="">Services</a></li>
<li><a href="">Contact Us</a></li>
</ul>
</div>

Agora iremos substituir parte do código estático do HTML pelas tags do WordPress. Para quem não está muito familiarizado com PHP ou outra linguagem dinâmica o negócio funciona assim: na linha 5 do código HTML, por exemplo, temos e iremos substituir por . Desta maneira quando o arquivo header.php for solicitado, o servidor irá processar todos os trechos de códigos compreendidos entre e ?> antes de enviar para o seu browser, neste caso ele substituirá a tag bloginfo('name'); pelo título do blog que você informou no administrador do WordPress. Ok? Vamos então ver como ficou todo código com as tags do WordPress.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php bloginfo('name'); ?></title>
<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />
<meta http-equiv="content-type" content="<?php bloginfo('html_type'); ?>; <?php bloginfo('charset'); ?>" />
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" media="all" type="text/css" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="<?php bloginfo('rss2_url'); ?>" />
<link rel="alternate" type="text/xml" title="RSS .92" href="<?php bloginfo('rss_url'); ?>" />
<link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="<?php bloginfo('atom_url'); ?>" />
 <li></li>
<?php wp_head(); ?>
</head>
<body>
<div id="header">
<div class="subContainer">
<div id="logo">
<div id="box"><?php bloginfo('name'); ?></div>
<p><?php bloginfo('description'); ?></p>
</div>
</div>
</div>
<div id="navigation">
<ul>
<li><a href="<?php echo get_option('home'); ?>/">Home</a></li>
<?php wp_list_pages('title_li='); ?>
</ul>
</div>

Agora vou explicar todas tags utilizadas neste cabeçalho. Se você quiser saber mais detalhes sobre as tags ou conhecer as demais tags do WordPress eu recomendo uma visita ao Codex>Template Tags (em inglês, ok?).

  • bloginfo('name') - este quase dispensa explicações, nome do blog;
  • bloginfo('version') - versão do WordPress;
  • bloginfo(’html_type’) - "Content-type" do seu blog;
  • bloginfo(’charset’); - codificação de caracteres utilizada no blog;
  • bloginfo(’stylesheet_url’) - CSS do seu tema;
  • bloginfo(’rss2_url’) - RSS 2.0 do blog;
  • bloginfo(’rss_url’) - RSS 0.92 do blog;
  • bloginfo(’atom_url’) - Atom do blog;
  • wp_head() - é uma tag especial que permite que certos plugins insiram códigos no cabeçalho de seu tema. Quando esta tag não é inserida vários plugins deixam de funcionar, então não esqueça de colocá-la em todos os seus temas;
  • bloginfo('description') - descrição do blog;
  • get_option('home') - na verdade trata-se de uma função e não uma tag, por isso deve vir precedida da função echo do PHP, que exibe o resultado de uma função ou variável. Neste caso irá retornar a URL inicial do blog;
  • wp_list_pages('title_li=') - exibe uma lista com todas as páginas existentes.

Terminamos assim a primeira parte do nosso tutorial. Na próxima etapa falaremos sobre o corpo principal do site, onde são exibidos o objetivo de todo blog, os posts.