No WordPress, metas keys surgem como um mecanismo invisível que nos proporciona uma verdadeira flexibilidade de customização. Eles transformam dados estáticos em camadas dinâmicas, permitindo que plugins evoluam de meras extensões para ecossistemas completos e adaptáveis. Neste guia direto e prático, iremos falar um pouco sobre os fundamentos de post_meta, user_meta e similares, com exemplos que elevam o desenvolvimento de plugins a um patamar mais profissional.
Caso tenha interesse, veja o último artigo que publiquei: Desvendando o Sistema de Plugins do WordPress: Um Guia Prático para Desenvolvedores, ele complementa o que iremos abordar neste aqui.
O que vamos cobrir?
Vamos construir exemplos simples para um plugin, cobrindo:
- Tipos de metas: post_meta, user_meta, term_meta e options.
- Operações básicas: adicionar, recuperar, atualizar e deletar.
- Integração com hooks e API REST: para automação e exposição de dados.
- Boas práticas: segurança, performance e organização.
Ao final, você entenderá por que metas são essenciais para plugins que precisam de customização, como perfis avançados, campos extras em posts ou configurações por usuário.
Por que metas são tão importantes?
O WordPress é construído em torno de flexibilidade. Metas permitem estender entidades (posts, usuários, termos) com dados arbitrários, sem alterar o core ou criar tabelas customizadas. Isso é crucial para plugins: imagine adicionar campos como "data de expiração" a um post ou "preferências de tema" a um usuário. Sem metas, você ficaria preso a soluções rígidas. Eles tornam o WP headless-friendly, facilitam migrações e evitam inchaço no banco. Em resumo: metas = poder de customização sem dor de cabeça.
Anatomia dos Metas: Como Funcionam?
Metas são pares de chave-valor (meta_keys) armazenados na tabela wp_postmeta (para posts), wp_usermeta (para usuários) ou similares. Cada entidade tem um ID único, e as chaves podem ser múltiplas (um valor por chave ou arrays serializados).
Operações Básicas
Use funções nativas para CRUD. Sempre prefixe chaves (ex: meu_plugin_campo) para evitar conflitos.
// ADICIONAR meta (cria se não existir)
update_post_meta($post_id, 'meu_plugin_cor_favorita', 'azul'); // Para posts
update_user_meta($user_id, 'meu_plugin_nivel_acesso', 'premium'); // Para usuários
// RECUPERAR meta
$cor = get_post_meta($post_id, 'meu_plugin_cor_favorita', true); // true = single value
$nivel = get_user_meta($user_id, 'meu_plugin_nivel_acesso', true);
// ATUALIZAR (sobrescreve)
update_post_meta($post_id, 'meu_plugin_cor_favorita', 'vermelho');
// DELETAR
delete_post_meta($post_id, 'meu_plugin_cor_favorita');
Dica: O terceiro parâmetro em get_*_meta é chave: true para valor único, false para array de valores (útil para múltiplas entradas).
Tipos de Metas e Exemplos
- post_meta: Dados extras em posts/páginas/custom posts.
// Exemplo: Adicionar meta ao salvar post
add_action('save_post', 'salvar_meta_post');
function salvar_meta_post($post_id) {
if (isset($_POST['cor_favorita'])) {
update_post_meta($post_id, 'meu_plugin_cor_favorita', sanitize_text_field($_POST['cor_favorita']));
}
}
// Recuperar no front-end
$cor = get_post_meta(get_the_ID(), 'meu_plugin_cor_favorita', true);
if ($cor) echo '<div style="color: ' . esc_attr($cor) . ';">Conteúdo colorido!</div>';
- user_meta: Perfis personalizados.
// Adicionar ao registrar usuário
add_action('user_register', 'adicionar_meta_usuario');
function adicionar_meta_usuario($user_id) {
update_user_meta($user_id, 'meu_plugin_bio_curta', 'Usuário novo!');
}
// Exibir em perfil admin
add_action('show_user_profile', 'exibir_meta_perfil');
function exibir_meta_perfil($user) {
$bio = get_user_meta($user->ID, 'meu_plugin_bio_curta', true);
echo '<h3>Bio Personalizada</h3><input type="text" name="bio_curta" value="' . esc_attr($bio) . '" />';
}
- term_meta: Metas em taxonomias (categorias, tags).
// Para WP 4.4+
update_term_meta($term_id, 'meu_plugin_descricao_extra', 'Descrição custom');
$desc = get_term_meta($term_id, 'meu_plugin_descricao_extra', true);
-
get_option/set_option: Metas globais (tabela
wp_options).
update_option('meu_plugin_config_ativa', true);
$ativa = get_option('meu_plugin_config_ativa', false); // Default false
Integração com Hooks e API REST
Metas são ótimas quando combinados com hooks para automação.
// Hook para popular meta em novos posts
add_action('wp_insert_post_data', 'preencher_meta_automatico', 10, 2);
function preencher_meta_automatico($data, $postarr) {
if ($data['post_type'] === 'post') {
$data['ID'] ? update_post_meta($data['ID'], 'meu_plugin_data_criacao_extra', current_time('mysql')) : null;
}
return $data;
}
Para API REST, registre campos customizados:
// Expor post_meta na API
add_action('rest_api_init', 'registrar_campos_meta_api');
function registrar_campos_meta_api() {
register_rest_field('post', 'cor_favorita', array(
'get_callback' => function($post) {
return get_post_meta($post['id'], 'meu_plugin_cor_favorita', true);
},
'update_callback' => function($value, $post) {
update_post_meta($post->ID, 'meu_plugin_cor_favorita', sanitize_text_field($value));
}
));
}
// Agora acessível em /wp-json/wp/v2/posts?_fields=title,cor_favorita
Boas Práticas para Metas em Plugins
-
Segurança: Sempre sanitize (
sanitize_text_field,wp_kses_post) e escape (esc_attr,esc_html) ao salvar/exibir.
update_post_meta($id, $key, sanitize_textarea_field($_POST['texto']));
echo esc_html(get_post_meta($id, $key, true));
-
Performance: Evite queries desnecessárias. Use
meta_queryemWP_Querycom cuidado:
$posts = new WP_Query(array(
'post_type' => 'post',
'meta_query' => array(
array('key' => 'meu_plugin_cor_favorita', 'value' => 'azul')
)
));
- Organização: Armazene arrays serializados para dados complexos:
$config = array('opcao1' => 'valor1', 'opcao2' => 'valor2');
update_post_meta($id, 'meu_plugin_config', maybe_serialize($config));
$config = maybe_unserialize(get_post_meta($id, 'meu_plugin_config', true));
- Limpeza: Delete metas órfãs na desativação:
register_deactivation_hook(__FILE__, 'limpar_metas_plugin');
function limpar_metas_plugin() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE 'meu_plugin_%'");
}
- Teste: Verifique metas em diferentes contextos (admin, front-end, API) e com usuários variados.
Em resumo, metas keys são peças essenciais no quesito customização no WordPress, proporcionando flexibilidade e dinamismo em plugins que vão além do básico. Eles não só facilitam a escalabilidade e a manipulação inteligente dos dados, mas transformam conceitos simples em ecossistemas robustos, possibilitando revoluções no seu sistema.
Para aprofundar
WP Developer Documentation - Documentação oficial do WordPress.
Metadata in Plugins - Visão geral de como usar metadados em plugins, incluindo posts, usuários, comentários e termos.
Metadata API Handbook - Guia oficial completo da API de metadados para posts, usuários e mais.
WP_Meta_Query Class - Otimização avançada de consultas com metadados em WP_Query e similares.
#wordpress #php #webdev #tutorial #metas #plugins #postmeta #usermeta #cms
Top comments (0)