Icono del sitio Imacreste

Metacuadros o metabox de WordPress

Los metabox o metacuadros son bloques de información que se usan para incorporar nuevas opciones o información a las páginas, entradas o entradas personalizadas.

Creando nuestro metabox

Para crear un bloque disponemos tanto de una función como de un Hook:

function add_custom_meta_box(){
add_meta_box("demo-meta-box", "Custom Meta Box", "custom_meta_box_markup", "post", "side", "high", null);
}
add_action("add_meta_boxes", "add_custom_meta_box");

A continuación creamos la función:

function custom_meta_box_markup($post){ 
$precio=get_post_meta($post->ID,'_precio', true); 
wp_nonce_field(plugin_basename(__FILE__),'guardar_metabox'); 
echo '<p>Precio: <input type="text" name="precio" value="'.esc_attr($precio).'" /></p>'; 
}

Simplemente tenemos un input, que previamente recuperamos su valor y antes de mostrarlo creamos un nonce de seguridad.

Guardamos la nueva información

Ahora necesitamos poder almacenar los nuevos campos, comprobando que el nonce es correcto sino nos dará un error y no podremos guardan nada de la página.

function guardar_datos_metabox($post_id) { 
if (isset($_POST['precio'])){ 
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 
//si hay guardado automatico que no guarde estos datos 

check_admin_referer(plugin_basename(__FILE__),'guardar_metabox'); 
//comprobamos el nonce 

update_post_meta($post_id, '_precio',sanitize_text_field($_POST['precio'])); 
} 
} 
add_action("save_post", "guardar_datos_metabox");

Mostrar la nueva información en el bucle

Ahora solo queda mostrar la información almacenada dentro del bucle de WordPress. Para lo que usamos la misma función que en el administrador:

$precio=get_post_meta($post->ID,'_precio', true);
echo esc_html($precio);

Y por último controlamos la salida con esc_html.

Y ya esta, así de sencillo poder incorporar nuevos bloques de información.

Salir de la versión móvil