Adicionando meta boxes ao WordPress

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!

20 thoughts on “Adicionando meta boxes ao WordPress

  1. Pingback: PoolDigital

  2. Pingback: promovaja

  3. Pingback: Alexsandro Santos

  4. Pingback: marcelo_torres

  5. 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.

  6. 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.

  7. 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?

  8. 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"]);
    }

  9. Pingback: Wellington Lorindo

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>