Añadir un Meta Box con campo de texto

Php marzo 10, 2026

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 true devuelve 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_campo lo oculta en el panel de campos personalizados del editor clásico.