"my-meta-box-{$i}", 'title' => sprintf( 'Slide %s', $i ), 'pages' => array( 'lom_slideshow','' ), // multiple post types 'context' => 'normal', 'priority' => 'high', 'fields' => array( array( 'name' => 'Slide Title', 'desc' => 'Enter the title of the slide here', 'id' => $prefix . 'title', 'type' => 'text' ), array( 'name' => 'Slide Description', 'desc' => 'Provide a brief description of the picture or video', 'id' => $prefix . 'textarea', 'type' => 'textarea' ), array( 'name' => 'Slide Image', 'desc' => 'Enter the URL of the image here', 'id' => $prefix . 'image', 'type' => 'text' ), array( 'name' => 'Slide Embed Code', 'desc' => 'Insert embed code for the video', 'id' => $prefix . 'embed', 'type' => 'textarea' ), array( 'name' => 'Hide Slide', 'id' => $prefix . 'checkbox', 'type' => 'checkbox' ) ) ); } /********************************* Setup Class *********************************/ foreach ($meta_boxes as $meta_box) { $my_box = new My_meta_box($meta_box); } class My_meta_box { protected $_meta_box; // create meta box based on given data function __construct($meta_box) { if (!is_admin()) return; $this->_meta_box = $meta_box; // fix upload bug: http://www.hashbangcode.com/blog/add-enctype-wordpress-post-and-page-forms-471.html $current_page = substr(strrchr($_SERVER['PHP_SELF'], '/'), 1, -4); if ($current_page == 'page' || $current_page == 'page-new' || $current_page == 'post' || $current_page == 'post-new') { add_action('admin_head', array(&$this, 'add_post_enctype')); } add_action('admin_menu', array(&$this, 'add')); add_action('save_post', array(&$this, 'save')); } function add_post_enctype() { echo ' '; } /// Add meta box for multiple post types function add() { foreach ($this->_meta_box['pages'] as $page) { add_meta_box($this->_meta_box['id'], $this->_meta_box['title'], array(&$this, 'show'), $page, $this->_meta_box['context'], $this->_meta_box['priority']); } } // Callback function to show fields in meta box function show() { global $post; // Use nonce for verification echo ''; echo ''; foreach ($this->_meta_box['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '', '', ''; } echo '
'; switch ($field['type']) { case 'text': echo '', '
', $field['desc']; break; case 'textarea': echo '', '
', $field['desc']; break; case 'select': echo ''; break; case 'radio': foreach ($field['options'] as $option) { echo '', $option['name']; } break; case 'checkbox': echo ''; break; case 'file': echo $meta ? "$meta
" : '', '', '
', $field['desc']; break; case 'image': echo $meta ? "
$meta
" : '', '', '
', $field['desc']; break; } echo '
', '
'; } // Save data from meta box function save($post_id) { // verify nonce if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) { return $post_id; } // check autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } // check permissions if ('page' == $_POST['post_type']) { if (!current_user_can('edit_page', $post_id)) { return $post_id; } } elseif (!current_user_can('edit_post', $post_id)) { return $post_id; } foreach ($this->_meta_box['fields'] as $field) { $name = $field['id']; $old = get_post_meta($post_id, $name, true); $new = $_POST[$field['id']]; if ($field['type'] == 'file' || $field['type'] == 'image') { $file = wp_handle_upload($_FILES[$name], array('test_form' => false)); $new = $file['url']; } if ($new && $new != $old) { update_post_meta($post_id, $name, $new); } elseif ('' == $new && $old && $field['type'] != 'file' && $field['type'] != 'image') { delete_post_meta($post_id, $name, $old); } } } } ?>