Continuando a série Dicas básicas para o desenvolvimento de temas WordPress, vamos continuar falando de algumas dicas, truques e boas práticas para o desenvolvimento de temas. Vimos na primeira parte (nesse post) os seguintes itens:

  • O que é um tema WordPress;
  • Hierarquia e organização dos arquivos;
  • Header;
  • Functions; e algumas
  • Principais funções.

Recomendamos que leia todos os posts dessa série para uma melhor entendimento do processo de desenvolvimento de temas para WordPress, e em caso de dúvidas fique a vontade para perguntar na área de comentários logo abaixo do post. Comente também caso tenha uma experiência diferente nesse processo, compartilhe suas impressões nesse desenvolvimento.

Vamos iniciar conhecendo mais algumas funções importantes para o desenvolvimento de temas.

Mais funções

<?php the_content(); ?>

Dentro de um loop, use essa função para exibir o conteúdo do respectivo post/página, tudo que foi inserido na administração, no campo nativo de edição do WordPress como mídias, textos, vídeos e etc serão apresentados aqui. Caso deseje apenas guardar o conteúdo em uma variável, você deve usar uma outra função da seguinte forma:

<?php $conteudo = get_the_content(); ?>

E assim você tem total controle para manipular seu conteúdo antes de apresentá-lo.

<?php the_time( ‘m-d-y’ ); ?>

Exibe a data do post/página. Essa função recebe parâmetros para definição do formato de data de acordo com os padrões do PHP, você pode ver uma listagem completa de formatos aqui.
E da mesma forma que a função the_content(), se você precisar apenas armazenar em uma variável a data do post/página, você deve usar outra função dessa forma:

<?php $data = get_the_time('m-d-y'); ?>

<?php the_permalink(); ?>

Dentro de um loop, principalmente de um archive (arquivo de posts) ou uma listagem simples de posts, para adicionar link ao post usamos essa função, que imprime a url do post, veja um exemplo de uso:

<a href="<?php the_permalink(); ?>">Nome do meu Post</a>

Caso também queira apenas armazenar a URL do post/página em uma variável, use a seguinte função:

<?php $url = get_permalink(); ?>

<?php the_category(‘, ‘); ?>

Essa função exibe link para a categoria ou categorias do post. Seu primeiro parâmetro é o separador, que, no caso de mais de uma categoria, será aplicado entre elas.

Você também pode armazenar esse material dentro de uma variável com a função:

<?php get_the_category(); ?>

<?php the_author(); ?>

Exibe o autor do post/página

<?php the_ID(); ?>

Exibe o ID do post/página. Também pode usar a função get_the_ID() para armazenar o seu valor em uma variável.

<?php edit_post_link(); ?>

Essa função exibe um link para editar o post/página. Esse link somente aparecerá quando a pessoa que estiver logada tenha capacidades de editar aquele post.

<?php comments_template(); ?>

Essa função parece muito com a get_template_parts() que já comentamos, mas o objetivo dela é simplesmente carregar o arquivo template dos comentários. Vale ressaltar que ela não funciona em archives, apenas em páginas e single posts.

<?php wp_list_pages(); ?>

Com essa função você exibe uma lista com as páginas do site.

<?php wp_list_cats(); ?>

Função utilizada para criar uma lista de categorias.

<?php next_post_link(‘ %link ‘); ?>

Imprime o link para o próximo post.

<?php previous_post_link(‘%link’); ?>

Exibe um link para o post anterior.

E isso não é tudo, o WordPress possui uma infinidade de funções que podem (e devem) ser usadas no desenvolvimento de temas (e plugins). Conhecer pelo menos o nome e uma breve descrição das funções do WordPress pode nos poupar tempo em criar alguma solução, recorrendo a itens que outras pessoas já desenvolveram e testaram massivamente antes de tornar público.

Caso queria estudar a partir da fonte, conheça o Codex do WordPress (e se divirta).

Funções Condicionais

Conhecer o conceito de condicionais vai te ajudar e muito no desenvolvimento de temas, com funções condicionais, que é um conceito que vem das linguagens de programação e o WordPress aprendeu e usou bem isso, você pode determinar quando uma ação (ou item) deve acontecer e sob quais circunstâncias.

Vamos conhecer primeiramente a lógica – para os mais familiarizados, isso se remete ao famoso e bom if.

“A construção if executa uma atividade ou bloco de atividades somente se uma determinada condição for verdadeira.”

Funções condicionais do WordPress

Dentre a infinidade de funções do WordPress, algumas delas estão separadas em grupos, como é o caso das Condicional Tags. Aqui apresento alguns exemplos dessas funções que o WordPress possui e que são aliadas inseparáveis do if.

is_single() retorna true caso a página sendo visualizada seja uma single.

is_page() retorna true caso a página sendo visualizada seja uma page (página). Você pode usar como parâmetro dessa função o slug ou ID de uma página, e então a função apenas retornará true caso seja uma página e que possua a informação que forneceu como parâmetro.

is_archive() retorna true quando a página visualizada for um arquivo de posts, de qualquer tipo de post (CPTs por exemplo).

is_home() retorna true quando a página visualizada for a home do site.

is_front_page() retorna true quando a página visualizada foi definida como página estática (front page).

is_admin() retorna true quando o usuário está navegando na administração do site (wp-admin).

is_category() retorna true quando está visualizando um arquivo de categorias.

is_page_template() essa função recebe um parâmetro com o nome do template que deseja conferir se é o visualizado e então retorna true.

Conheça (e estude) toda a lista de Condicional Tags no Codex do WordPress, nessa página.

Criando uma função condicional

Vimos acima uma série de funções condicionais nativas do WordPress, mas podemos também nos aventurar e criar nossas próprias funcções. A um (bom) tempo atrás eu encontrei uma forma de solucionar uma condicional que eu usava muito, que era saber se determinado post pertencia a um certo Custom Post Type (CPT).

is_post_type()
function is_post_type( $tipo ){
  global $wp_query;
  if($tipo == get_post_type($wp_query->post->ID)) return true;
  return false;
}

Explicando

A função recebe um parâmetro $tipo, onde compara com o valor de $wp_query->post->ID que se for verdadeiro retorna true, caso contrário retorna false.

Como usar

Para utilizar essa função, use os mesmos princípios das tags condicionais que vimos acima, exemplo:

<?php if( is_post_type( 'seu_post_type' ) ){ ?>
 ...
<?php } ?>

Existe no Ideas do WordPress uma discussão de 2012 propondo exatamente a mesma coisa, algumas pessoas interagiram com a conversa mas o item não foi absorvido pelo core do WP, segundo pelas conversas porque existem funções equivalentes para isso, que seriam a is_singular( 'post_type' ) e is_post_type_archive( 'post_type' ), mas acredito que com essa função acima podemos explorar ela em mais lugares, como por exemplo dentro de um loop onde temos mais de um CPT, o que não é uma coisa incomum. Ou mesmo como no próprio exemplo do Ideas onde poderíamos utilizar essa condicional para remover ou adicionar scripts em determinados CPTs.

Criando e alocando algumas funções
Alocando funções

Sempre temos que nos preocupar em manter os códigos e a organização de pastas e arquivos o mais legíveis e simples possível, assim como já falamos em outros posts aqui no Bloglite também. E para continuar pensando dessa forma, podemos deixar nosso arquivo functions.php organizado, utilizando do mesmo pensamento. Não precisamos adicionar absolutamente tudo diretamente nele, isso é um pensamento comum e até certo ponto eu entendo o porque, ele é um arquivo de carregamento automático, ou seja, basta adicioná-lo ao tema e o WordPress o adiciona na lista de arquivos para ser carregado junto com os demais arquivos do tema.

O que podemos fazer é, imaginando que ao longo do desenvolvimento desse tema, criaremos inúmeras funções para melhorar nosso trabalho e o de quem futuramente usará o mesmo, criar arquivos auxiliares ao functions.php, e nele fazer apenas a inclusão do arquivo com um devido comentário.

A organização que eu tenho feito é criar um arquivo chamado extras.php dentro da pasta /inc, e então faço a inclusão no meu functions.php assim:

/**

 * Adiciona arquivo com funcoes extras.
 */
 require get_template_directory() . '/inc/extras.php';

Adicione nesse arquivo a função is_post_type() que acabamos de criar acima.

Suporte a Multilínguas

Outro item muito fundamental e quase obrigatório, é fazer com que seu tema tenha suporte a múltiplos idiomas. Para que assim ele “fale” a mesma língua que o WordPress onde ele for adicionado.

Esse assunto é muito extenso e possui muitas possibilidades, mas vamos abordar aqui o básico para fazer com que seu tema seja facilmente internacionalizado.

Passo a passo

1- Adicionando suporte ao tema

No functions.php vamos adicionar algumas funções que habilitam o tema a receber o restante do procedimento e assim se tornar multilínguas.

load_theme_textdomain( 'bloglite', TEMPLATEPATH.'/languages' );
$locale = get_locale();
$locale_file = TEMPLATEPATH."/languages/$locale.php";
if ( is_readable( $locale_file ) )
require_once( $locale_file );

2- Substituindo strings do tema

O que precisamos fazer agora, é substituir todas as strings to tema por funções de GetText, existe dois tipos _e() que __(). A primeira para exibição de textos simples e a segunda para ser usada quando a string já está em um trecho de PHP.

<?php _e( "A página que procura não se encontra aqui", "bloglite" ); ?>
<?php the_content(__('Continue Lendo', "bloglite")); ?>

3- Criando o arquivo .po

Com as etapas anteriores prontas, o que precisamos agora é criar um arquivo .po, usando para isso o editor PoEdit. Um aquivo com essa extensão, nada mais é do que uma espécie de dicionário, onde possui a string original, que está no seu tema e como ele ficará em cada língua (um idioma para cada arquivo).

Você pode scanear os arquivos do seu site no site icanlocalize.com que buscará nos arquivos PHP as strings que definimos no item 2.

Pronto, com isso seu tema poderá ser traduzido para qualquer língua.

Conclusão

Nesse post conhecemos mais alguns itens sobre o processo de desenvolvimento de temas, e ainda assim temos muitas outras coisas para explorar. Compartilhe conosco suas experiências comentando o post!