Como usar o Odin no meu tema?
E ae, meu povo. Tudo bem?
Hoje eu venho falar um pouco do fucking framework Odin:
Um framework que chuta bundas!
Criado pelo Grupo WordPress Brasil, Odin é um framework com objetivo de turbinar e agilizar o desenvolvimento de temas para WordPress.
Como conheci
Antes de falar das funcionalidades dele ou de como usar no seu tema, vou falar de como conheci o Odin.
Desenvolvo com o WordPress há um tempo já e fui melhorando meu código a cada tema desenvolvido (sempre que possível, prefiro desenvolver o tema “do zero”, com um front-end próprio para o projeto) e criei minha própria classe de criação de conteúdo, afinal o WordPress não é só um CMS (o considero um framework bem robusto) e nos permite criar nossos próprios formatos de conteúdo (além de regras de usuário, taxonomias, conectar com o banco e mais meio milhão de coisas), como vocês devem saber.
Ela otimizou bastante meu trabalho e resolvi criar logo outras classes para tudo o que eu geralmente preciso: plugins, taxonomias, opções do tema e Ajax. Mas antes, fui procurar se já não havia algo do tipo e encontrei o Odin. Simplesmente perfeito.
P.S.: Nunca contribui com o Odin, mas pretendo pegar algo pra fazer lá, assim que possível, para “pagar” pelo uso :P
Como criar um tema do zero com o Odin
Se você quer criar um tema desde o início, basta fazer o download no site oficial e ser feliz alterando o nome da pasta, o arquivo style.css e seguir alterando os arquivos que já estão lá.
Se você não lembra da Hierarquia de Modelos do WordPress, consulte a documentação oficial para refrescar a memória e depois é só ir consultando a documentação do Odin, que é muito foda boa:
Conteúdo:
- Custom Post Types/Tipos de conteúdo
- Taxonomias personalizadas
- Custom Post Status/Status de posts personalizados
- Opções para termos
Administração:
- Metaboxes/Opções para posts/páginas
- Opções para perfis de usuários
- Opções para o Tema
- Personalizando o Admin
Outras:
Preciso nem dizer que a classe Odin_Theme_Options é extremamente útil, né?
Como alterar meu tema com o Odin
Agora sim! O maior objetivo desse texto é ajudar a galera que já possui um tema ou vai criar um Tema Filho e quer usar algumas funcionalidades do Odin. Lembrando que, pelo menos, uma noção de WordPress e PHP são obrigatórias para tudo na vida mexer nos arquivos dos temas, plugins ou mesmo para usar o Odin.
Antes de qualquer coisa, se você quer alterar um tema comprado (ou não) e ainda quer manter as alterações quando fizer atualizações, considere criar um Tema Filho.
1 – Adicione o core
Com tudo no lugar, faça download do Odin e jogue a pasta /core para dentro do seu tema. Copiar e colar.
2 – Inclua os arquivos
Vá no seu functions.php e adicione, logo no começo (ou onde você achar melhor), os arquivos das classes que você vai querer:
// See in Matrix =D
// Nesse exemplo, iremos usar a classe de metaboxes:
require_once get_template_directory() . '/core/classes/class-metabox.php'
3 – Código!
Agora que você já incluiu os arquivos e sabe o que quer, basta olhar a documentação específica de cada Classe para aprender a usá-la.
A documentação é bem completa, por exemplo, vamos adicionar uma metabox para uma segunda imagem destacada:
O problema: meus posts precisam, além da Imagem Destacada, uma imagem específica para o compartilhamento no Facebook.
Já adicionamos os arquivos e “chamamos” a classe no functions.php, certo? Então agora é código. Olhando a documentação, vimos que para criar uma metabox basta instanciar a classe. E pelo exemplo faremos isso dentro da action init (prometo tirar um dia para explicar os Hooks – actions e filters), então vamos adicionar a action:
// See in Matrix =D
add_action( 'init', 'meu_tema_metabox_segunda_imagem' );
E agora criamos a função, instanciando a classe:
// See in Matrix =D
function meu_tema_metabox_segunda_imagem() {
$segunda_imagem_metabox = new Odin_Metabox(
'segunda_imagem', // Slug/ID do Metabox (obrigatório)
__( 'Imagem do Facebook', TEXTDOMAIN ), // Título do Metabox já pronto para tradução (obrigatório)
'post', // Slug do Post Type, sendo possível enviar apenas um valor ou um array com vários (opcional)
'side', // Contexto (opções: normal, advanced, ou side) (opcional)
'low' // Prioridade (opções: high, core, default ou low) (opcional)
);
}
Pronto! Já podemos ver a metabox:
Agora precisamos adicionar os campos. A documentação também é bastante clara nessa parte e podemos criar vários tipos de campos e mais de 1 campo por vez.
No momento, queremos apenas 1 campo e será um campo de imagem, então acrescento à função o código abaixo:
// See in Matrix =D
function meu_tema_metabox_segunda_imagem() {
$segunda_imagem_metabox = new Odin_Metabox(
'segunda_imagem', // Slug/ID do Metabox (obrigatório)
__( 'Imagem do Facebook', TEXTDOMAIN ), // Título do Metabox já pronto para tradução (obrigatório)
'post', // Slug do Post Type, sendo possível enviar apenas um valor ou um array com vários (opcional)
'side', // Contexto (opções: normal, advanced, ou side) (opcional)
'low' // Prioridade (opções: high, core, default ou low) (opcional)
);
$segunda_imagem_metabox->set_fields(
array(
array(
'id' => 'imagem_facebook', // ID único do Campo (obrigatório)
'label' => __( 'Escolha uma imagem para o Facebook', TEXTDOMAIN ), // Label do Campo (obrigatório)
'type' => 'image', // Tipo do Campo (obrigatório)
'description' => __( 'Recomendamos um tamanho mínimo de 1200x630.', TEXTDOMAIN ) // Descrição do campo (opcional)
)
)
);
}
Agora a metabox ficou assim:
Legal, né? O comportamento já está todo aí. Basta usar!!!
4 – Alterando o Tema
Agora que o WordPress já cuida do upload e cadastro desse campo, você só precisa “imprimir” a imagem no seu tema, né? Para recuperar o valor do campo basta fazer:
// See in Matrix =D
<?php get_post_meta( $post->ID,'imagem_facebook', true ); ?>
Voltando ao nosso exemplo, como nosso problema dita que queremos alterar a imagem exibida no compartilhamento do Facebook, começamos a pesquisar nos arquivos e notamos que no header.php tem o seguinte código:
// See in Matrix =D
<?php
$facebook_image = get_option( 'meu_tema_facebook_image_default', '' );
?>
<meta property="og:image" content="<?php echo $facebook_image ?>" >
Então precisamos verificar se estamos mostrando a página do Post e então pegar o valor que cadastramos com ajuda do Odin:
// See in Matrix =D
<?php
global $post;
$facebook_image = get_option( 'meu_tema_facebook_image_default' );
if ( is_singular( 'post' ) ) {
$facebook_image = get_post_meta( $post->ID, 'imagem_facebook', true ); // Recuperando o valor
$facebook_image = wp_get_attachment_image_src( $facebook_image, 'full' ); // Recuperando os dados do attachment (no tamanho full)
$facebook_image = $facebook_image[0]; // Pegando a URL (primeiro parâmetro)
}
?>
<meta property="og:image" content="<?php echo $facebook_image ?>" >
Pronto! Tudo OK.
Sobre o código, esqueci de comentar, mas tem na documentação: o tipo de campo image armazena apenas o ID da imagem. Sendo assim, temos que usar uma das funções que ele recomenda: eu escolhi a wp_get_attachment_image_src que retorna a URL, dentre outras informações para montarmos o HTML.
Ainda sobre o código: ele é bem simples. Não validei no caso de não ter imagem cadastrada, nem de ter algum problema, afinal é só pra entender a lógica do negócio.
Quer contribuir com o Odin?
Eu ainda não fiz o fork, nem sugeri nada lá, mas assim que tiver tempo vou atrás de retribuir o trabalho da galera ajudando no que eu puder.
O Odin é um projeto totalmente Open Source, então quem quiser contribuir, basta ir clicar aqui e ir no GitHub dar uma olhada.
Conclusão
E por hoje é só.
O foco hoje foram os desenvolvedores iniciantes e a galera que precisa mexer no próprio site e se arrisca pelos códigos. Notei que aparece muita gente assim no grupo do WordPress Brasil e assim terei esse artigo para indicar sempre que aparecer alguém com dúvida.
Espero que tenha ajudado a você e não esqueça de compartilhar a palavra curtindo e enviando para os amigos, nem de deixar seu comentário abaixo.
Author: Mário Valney