Añadir un Meta Box con campo de texto
Los Meta Boxes son paneles personalizados en el editor de WordPress que permiten añadir campos adicionales a tus posts o CPTs. Son la forma nativa de gestionar metadatos sin depender de plugins de terceros. Un meta box completo requiere tres pasos: registrarlo, renderizar el HTML y guardar el valor de forma segura.
Casos de uso: campo URL en un portfolio, precio en un producto, coordenadas en un mapa, fecha de evento extra al campo de fecha de WordPress.
<?php
// Registrar el meta box
add_action( 'add_meta_boxes', 'mi_meta_box_register' );
function mi_meta_box_register() {
add_meta_box(
'mi_meta_box',
'Información Extra',
'mi_meta_box_render',
'post',
'normal',
'default'
);
}
// Renderizar el campo
function mi_meta_box_render( $post ) {
wp_nonce_field( 'mi_meta_box_nonce', 'mi_nonce' );
$valor = get_post_meta( $post->ID, '_mi_campo', true );
echo '';
echo '';
}
// Guardar el campo
add_action( 'save_post', 'mi_meta_box_save' );
function mi_meta_box_save( $post_id ) {
if ( ! isset( $_POST['mi_nonce'] ) ) return;
if ( ! wp_verify_nonce( $_POST['mi_nonce'], 'mi_meta_box_nonce' ) ) return;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( isset( $_POST['mi_campo'] ) ) {
update_post_meta( $post_id, '_mi_campo', sanitize_text_field( $_POST['mi_campo'] ) );
}
}
¿Qué hace cada parte?
- add_meta_box(): registra el panel. Los parámetros son: ID único, título visible, función de renderizado, post type donde aparece, posición (normal/side/advanced) y prioridad.
- wp_nonce_field(): genera un campo oculto con un token de seguridad. Sin esto cualquiera podría enviar datos al formulario desde fuera del admin.
- get_post_meta(): recupera el valor guardado previamente para mostrarlo en el campo. El tercer parámetro
truedevuelve un string en lugar de un array. - esc_attr(): escapa el valor para que sea seguro dentro de un atributo HTML. Impide inyección de código.
- wp_verify_nonce(): verifica que el formulario fue enviado desde el admin y no desde una petición externa maliciosa.
- DOING_AUTOSAVE: evita que el campo se guarde vacío durante el autoguardado automático de WordPress.
- update_post_meta(): guarda o actualiza el metadato. El guión bajo inicial en
_mi_campolo oculta en el panel de campos personalizados del editor clásico.
