Date: Fri, 24 May 2013 14:38:41 +0200
Quote:
- Eliseos.Net
Como añadir un Meta Boxes a nuestros posts en WordPress
http://feedproxy.google.com/~r/EliseosNet/~3/X6PGtHuvZPM/
Text:
Desde hace unos cuantos meses me acostumbre a crear pequeños frameworks con diversas funciones en WordPress para acelerar mi trabajo. En este caso quería compartir con ustedes una manera simple de ponder incluir un Meta Box en nuestros post, páginas o custom post basado un poco en un articulo de Voodoopress.
Para este ejemplo vamos a estar creando algo como se muestra a continuación:

Como lo podrás ver es una buena opción para aquellos sitios donde el cliente necesita añadir datos específicos (en este caso precio, peso, presentación de un producto, etc.) de forma rápida. En lugar de decirle al cliente que necesita crear un nuevo campo personalizado por cada dato, le proporcionamos una forma mucha mas amena de hacerlo.
Antes de proceder veamos como se comporta la función add_meta_box();
add_meta_box();
Esta función esta presente dese la versión 2.5
<?php add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args ); ?>
Donde:
$id
(string) (requerido) ‘id’ único del meta box
$title
(string) (requerido) Titulo del meta box que sera el que vea el usuario
$callback
(string) (requerido) La función que imprime el resultado de nuestra función
$page
(string) (requerido) Tipo de pagina en la que queremos que se muestre el meta box, puede ser: ‘post’, ‘page’, ‘link’, o ‘custom_post_type’
$context
(string) (opcional) Donde queremos que se muestre el metabox, puede ser: ‘normal’, ‘advanced’, or ‘side’
$priority
(string) (opcional) La prioridad que el meta box tendrá sobre el resto, puede ser: ‘high’, ‘core’, ‘default’ o ‘low’
$callback_args
(array) (opcional) Argumentos para pasar a nuestro callback.
Creando nuestro Meta box
Una vez que tenemos claro lo que vamos a crear, ya estamos en condiciones de crear nuetsro primer Meta Box. Para ello solo necesitar pegar las siguientes lineas en tu archivo functions.php o importarlo mediante un require_once
<?php // Crear un nuevo evento para el MetaBox function add_lista_metaboxes() { add_meta_box('wpt_lista_location', 'Datos Extra', 'wpt_lista_location', 'productos', 'side', 'high'); //add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args ); } // El nuevo evento function wpt_lista_location() { global $post; global $post; // Noncename es necesario para saber desde donde obtenemos las informacion echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' . wp_create_nonce( plugin_basename(__FILE__) ) . '" />'; // Obtener la nueva informacion $precio = get_post_meta($post->ID, '_precio', true); $presentacion = get_post_meta($post->ID, '_presentacion', true); $peso = get_post_meta($post->ID, '_peso', true); $disponibilidad = get_post_meta($post->ID, '_disponibilidad', true); $codigo = get_post_meta($post->ID, '_codigo', true); // Echo los nuevos campos echo '<p>Precio:</p>'; echo '<input type="text" name="_precio" value="' . $precio . '" class="widefat" />'; echo '<p>Presentacion del producto:</p>'; echo '<input type="text" name="_presentacion" value="' . $presentacion . '" class="widefat" />'; echo '<p>Peso del Producto</p>'; echo '<input type="text" name="_peso" value="' . $peso . '" class="widefat" />'; echo '<p>Disponibilidad</p>'; echo '<input type="text" name="_disponibilidad" value="' . $disponibilidad . '" class="widefat" />'; echo '<p>Codigo del producto</p>'; echo '<input type="text" name="_codigo" value="' . $codigo . '" class="widefat" />'; } // Guardamos la nueva informacion function wpt_save_events_meta($post_id, $post) { // nos aseguramos de tener los permisos necesarios para guardar la info if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) { return $post->ID; } if ( !current_user_can( 'edit_post', $post->ID )) return $post->ID; // Contamos con los permisos, procedemos a guardar al info // Creamos un array de $events_meta para una facil manipulacion $events_meta['_precio'] = $_POST['_precio']; $events_meta['_presentacion'] = $_POST['_presentacion']; $events_meta['_peso'] = $_POST['_peso']; $events_meta['_disponibilidad'] = $_POST['_disponibilidad']; $events_meta['_codigo'] = $_POST['_codigo']; // Creamo nuevos valores def $events_meta para que se comporten como custom fields foreach ($events_meta as $key => $value) { / if( $post->post_type == 'revision' ) return; $value = implode(',', (array)$value); if(get_post_meta($post->ID, $key, FALSE)) { update_post_meta($post->ID, $key, $value); } else { add_post_meta($post->ID, $key, $value); } if(!$value) delete_post_meta($post->ID, $key); } } add_action('save_post', 'wpt_save_events_meta', 1, 2); // guardamos los nuevos custom fields dese wpt_save_events_meta ?>
Como lo podrás observar el ID unico de nuestro meta box es wpt_lista_location mientras que su titulo es Datos Extra y se estar mostrando en el custom post type productos a un costado y con la prioridad máxima.
Luego (a groso modo) lo que hacemos es crear una serie de nuevos inputs donde podremos insertar la información que necesitamos, en este ejemplo creamos 5 nuevos inputs: Precio; Presentación, Peso, Disponibilidad y Código.
El código esta fuerte comentado por lo que lo encontraras fácil de entender.
Utilizar los valores del Meta box en nuestro Theme
Ahora solo nos resta mostrar los valores de nuestro nuevo meta box dentro del Theme, donde lo necesitemos solo nos resta hacer un llamado:
<?php echo get_post_meta($post->ID, "_peso", true); ?>
Para este ejemplo estamos imprimiendo el valor para el peso del producto.
Como lo podrás observar es muy simple de crear tus propios meta boxes para darle un poco mas flexibilidad a tu Theme y hacerlo mucho mas simple de trabajar para tu cliente, o para vos mismo.
Via FeedShow.com