05.-Programar WordPress desde cero [add_meta_box]
INTRODUCCIÓN
En este tutorial vamos a agregar meta_box en nuestros posts. Pero quizás te este preguntando que es un meta_box es muy fácil, son campos extras que se le agregan a los articulos, en esos campos extras podemos colocar cualquier cosa vamos a mostrara varios ejemplos:
1.- Un articulo de cocina podríamos agregar un meta_box con los ingredientes
2.- Un articulo de vídeos podríamos colocar un meta_box con la url o quizas el id del video.
3.- Un articulo de referencias de paginas en el que podríamos agregar en el meta_box el iframe de la pagina a la que hacemos referencia.
PROCEDIMIENTOS
1.- En wp-content/plugins/ creamos una carpeta llamada mi-metabox
2.- Dentro de la carpeta mi-metabox creamos un archivo llamado mi-metabox.php donde colocaremos este código:
<?php /* Plugin Name: mi-metabox Plugin URI: programadornovato.com Description: Este pluging agrega un metabox en el post Version: 1.0.0 Author: Eugenio Chaparro Author URI: programadornovato.com License: GPLv2 */ // Agregamos la funcionalidad de de metabox atravez de la funcion agregar_boxes add_action("add_meta_boxes", "agregar_boxes"); if(!function_exists("agregar_boxes")){ function agregar_boxes(){ //add_meta_box($id , $title , $callback , $screen); add_meta_box("texto1" , "Agregar texto", "agregar_texto1", "post"); } } //Dibuja un input text en el area de los post if(!function_exists("agregar_texto1")){ function agregar_texto1(){ ?> <input type="text" name="texto1" id="texto1" value="<?php echo cargar_dato(); ?>"/> <?php } } //Lee los datos (si existen) del metabox desde la BD if(!function_exists("cargar_dato")){ function cargar_dato(){ //Recuperamos todos los datos perzonalizados de este post $values= get_post_custom($post->ID); //Recuperamos solo el campo texto1 $campo = esc_attr($values["texto1"][0]); //Retornamos el valor del campo recuperado return $campo; } } // En el evento save_post guardamos el metabox atravez de la funcion guarda_post add_action("save_post", "guarda_post"); if(!function_exists("guarda_post")){ function guarda_post($post_id){ //Evitamos el autoguardado if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } // Revisamos que el usuario tenga permisos de editar el post if (isset($_POST['post_type']) && 'page' == $_POST['post_type']) { if (!current_user_can('edit_page', $post_id)) { return; } } else { if (!current_user_can('edit_post', $post_id)) { return; } } //Sanitizamos el campo para evitar una injection de codigo $dato = sanitize_text_field($_POST["texto1"]); //Actualizamos el dato update_post_meta($post_id, 'texto1', $dato); } } //Pone el valor del campo en el fronted add_filter("the_content", "poner_texto1"); if(!function_exists("poner_texto1")){ function poner_texto1($contenido){ //Si es un post singular if(is_singular("post")){ return $contenido."</br> <strong>Campo nuevo=</strong>".cargar_dato(); }else{ return $contenido; } } }
Ave que vuela, a la cazuela.