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");
- demo-meta-box: Es el identificativo del bloque.
- Custom Meta Box: Título del bloque, se muestra en el metacuadro.
- custom_meta_box_markup: Función para mostrar la información.
- post: Página en la que se quiere mostrar el metabox, en este caso en entradas.
- side: En qué zona se mostrara, side (lateral), advanced, normal.
- high: Prioridad del cuadro, hide, core, default, low.
- null: Argumentos que se pasan al cajón. En este ejemplo no se pasa nada.
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.
Deja una respuesta