I am using the wp user frontend plugin and I have added some meta_box fields in it which I copied from the theme functions page. the fields look good but I have problem saving them (posting and inserting). This is what I have copied: global $meta_box, $post; $prefix = 'foodpress_'; $meta_box = array( 'id' => 'meta-box', 'title' => 'Recipe Info', 'page' => 'post', 'context' => 'normal', 'priority' => 'high', 'fields' => array( array( 'name' => 'Number of servings', 'desc' => 'Enter the number of servings (eg. "4")', 'id' => $prefix . 'servings', 'type' => 'text', 'std' => '' ), array( 'name' => 'Cooking time', 'desc' => 'Enter the cooking time (eg. "45 minutes")', 'id' => $prefix . 'cooking_time', 'type' => 'text', 'std' => '' ), array( 'name' => 'Ingredients', 'desc' => 'Enter all the ingredients (eg. "8 ounces dried soba noodles"). <strong>IMPORTANT:</strong> Seperate the ingredients with a single line break', 'id' => $prefix . 'ingredients', 'type' => 'textarea', 'std' => '' ) ) ); // Use nonce for verification echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; echo '<table class="form-table">'; foreach ($meta_box['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<th style="width:20%"><label for="', $field['id'], '"><strong>', $field['name'], ':</strong></label></th>', '<td>'; switch ($field['type']) { case 'text': echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />', '<br /><small>', $field['desc'],'</small>'; break; case 'textarea': echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>', '<br />', $field['desc']; break; case 'select': echo '<select name="', $field['id'], '" id="', $field['id'], '">'; foreach ($field['options'] as $option) { echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>'; } echo '</select>'; break; case 'radio': foreach ($field['options'] as $option) { echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name']; } break; case 'checkbox': echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />'; break; } echo '<td>', '</tr>'; } echo '</table>'; Code (markup): and this are the functions that add the metaboxes in the admin panel for posting: ////////////////////////////////////////////////////////////////// // Register custom meta box ////////////////////////////////////////////////////////////////// $prefix = 'foodpress_'; $meta_box = array( 'id' => 'meta-box', 'title' => 'Recipe Info', 'page' => 'post', 'context' => 'normal', 'priority' => 'high', 'fields' => array( array( 'name' => 'Number of servings', 'desc' => 'Enter the number of servings (eg. "4")', 'id' => $prefix . 'servings', 'type' => 'text', 'std' => '' ), array( 'name' => 'Cooking time', 'desc' => 'Enter the cooking time (eg. "45 minutes")', 'id' => $prefix . 'cooking_time', 'type' => 'text', 'std' => '' ), array( 'name' => 'Ingredients', 'desc' => 'Enter all the ingredients (eg. "8 ounces dried soba noodles"). <strong>IMPORTANT:</strong> Seperate the ingredients with a single line break', 'id' => $prefix . 'ingredients', 'type' => 'textarea', 'std' => '' ) ) ); add_action('admin_menu', 'mytheme_add_box'); // Add meta box function mytheme_add_box() { global $meta_box; add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']); } // Callback function to show fields in meta box function mytheme_show_box() { global $meta_box, $post; // Use nonce for verification echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; echo '<table class="form-table">'; foreach ($meta_box['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<th style="width:20%"><label for="', $field['id'], '"><strong>', $field['name'], ':</strong></label></th>', '<td>'; switch ($field['type']) { case 'text': echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />', '<br /><small>', $field['desc'],'</small>'; break; case 'textarea': echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>', '<br />', $field['desc']; break; case 'select': echo '<select name="', $field['id'], '" id="', $field['id'], '">'; foreach ($field['options'] as $option) { echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>'; } echo '</select>'; break; case 'radio': foreach ($field['options'] as $option) { echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name']; } break; case 'checkbox': echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />'; break; } echo '<td>', '</tr>'; } echo '</table>'; } add_action('save_post', 'mytheme_save_data'); // Save data from meta box function mytheme_save_data($post_id) { global $meta_box; // 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 ($meta_box['fields'] as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } } Code (markup):