Olá todos, este é o meu primeiro post aqui no pBlog. Hoje vou mostrar como adicionar caixas de informações (Meta boxes) adicionais do post. Este recurso serve para todas as versões acima da 2.5, quem possuir a versão 3.0 ou superior pode exibir metaboxes de acordo com o tipo de post escolhido
O que são Meta boxes?
Meta boxes são caixas que aparecem na criação de um post elas permitem adicionar informações padronizadas quando estamos criando um post.
Mãos a obra
Em seu arquivo functions.php do seu template adicione o seguinte código:
add_action('admin_init','metaboxes');</code>
function metaboxes(){
add_meta_box( 'ingredientes_meta', 'Ingredientes' , 'ingredientes_call', 'post', 'normal', 'low' );
}
Abaixo a descrição de cada argumento:
‘ingredientes_meta’: nome interno do meta box;
‘Ingredientes’: Titulo do meta box. Será exibido na página de criação/edição do post;
‘ingredientes_call’: Função que imprime os campos personalizados;
‘post’: Onde o meta box deverá ser exibido, pode ser o nome do tipo de post;
‘normal’: Argumento opcional, define onde devera ser exibido, pode ser 'normal', 'advanced', or 'side';
‘low’: Argumento opcional, define a posição do meta box, em ‘low’ ele adiciona ao lado lá em baixo, em ‘high’ ele adiciona embaixo do editor de texto;
Este código abaixo, imprime os campos, o nome da função é igual ao terceiro argumento da função acima.
function ingredientes_call(){
echo '<label for="ingredientes_textarea">';
echo '<textarea name="ingredientes_textarea"></textarea>';
}
No código acima imprimimos um textarea e sua label, pode se adicionar qualquer elemento de um formulário, inputs, checkbox, radios…
Salvando os dados
Depois de tudo, basta salvar as informações no banco, isso é feito adicionando o seguinte código.
add_action('save_post', 'salva_ingredientes');
A função acima, faz com que quando salvemos o post ele chame a função salva_ingredientes que salva as informações personalizadas no banco.
function salva_ingredientes(){
global $post;
update_post_meta($post->ID, "ingredientes", $_POST["ingredientes_textarea"]);
}
Acima, nos passamos o ID do post, depois o nome que será salvo no banco, e o valor que é o campo.
Na verdade os meta boxes são iguais aos campos personalizados, so que são mais padronizados e bonitos. Para resgatar os valores é igual como se estivese resgatando o valor de uma campo personalizado.
$campos = get_post_custom($post->ID); $ingredientes = $campos["ingredientes"][0]; echo $ingredientes;
Espero que tenham gostado do meu primeiro post.
Não esqueçam de dizer o que acharam dele nos comentários.
Até a próxima. Valeuu!
Pingback: PoolDigital
Pingback: promovaja
Pingback: Alexsandro Santos
Não tem uma única tela de como a MetaBox fica no painel? Faltou hein…
É porque eu não tinha acesso a postagem de imagens, veja como fica http://kovshenin.com/core/wp-content/uploads/2010…
Pingback: marcelo_torres
Normalmente eu usava este plugin – http://wordpress.org/extend/plugins/custom-field-… – ele é muito eficiente, mas fazer as coisas não "unha" é sempre melhor.
Ótimo artigo, parabéns!
Obrigado pelo seu comentário.
Fernando, todos os códigos ficam no arquivo functions.php do template.
Valeu Matheus, ótimo post!
Parabéns pelo post, isso mostra o quanto o WordPress é fantástico.
Eu gostei das explicações pra meta-box, mas eu to procurando um jeitinho "na raça" de criar meta-box personalizada de campos criados pelo custom-field-template.
Ele cria uma meta-box com todos os "ingredientes", que pode mudar dinamicamente quando mudamos numa caixa de seleção o "template de custom field". Mas eu queria mesmo, era criar uma meta-box exclusiva pra determinados conjuntos de campos criados pelo plugin. Tá difíiiiici….
Quando instalei o Custom field template, achei ele muito mal organizado. Prefiro fazer na mão do que utilizar um plugin, ate porque caso desinstale o plugin perde todas as configs.
Prefiro os meta boxes aos campos personalizados, pois deixam a administração mais fácil para o cliente, que só precisar inserir uma informação no campo que já está pronto, valeu pela postagem.
na linha
update_post_meta($post->ID, "ingredientes", $_POST["ingredientes_textarea"]);
O parametro "ingredientes" é o campo na tabela do db? Ele cria esse campo automaticamente ao passarmos esse campo para essa funcao?
Esta função apresenta problema (WordPress 3.2) caso o post fique um tempo aberto em função do Auto Save (Salvamento automático).
Para corrigir, o código ficaria assim:
function salva_ingredientes(){
global $post;
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return $post_id;
update_post_meta($post->ID, "ingredientes", $_POST["ingredientes_textarea"]);
}
Como faço para postar isso (<iframe width="560" height="340" src="http://cdn.livestream.com/embed/irmaorubens?layout=4&height=340&width=560&autoplay=false" style="border:0;outline:0" frameborder="0" scrolling="no"></iframe>) no meu blog?
Muito bem explicado! Parabéns!
Pingback: Wellington Lorindo
Muito bom esse tutorial….bem prático e específico!