I created a custom-post-type and multiple metaboxes which needs to be saved. I have a function that saves one metabox, but I can’t figure out how to reuse this function to save all the metaboxes.
add_action ("add_meta_boxes", "add_dedications_jh");
function add_dedications_jh() {
add_meta_box('jh_dedicationDate', 'Enter Date', 'jh_dedicationDate', 'jh_dedications', 'side', 'default');
add_meta_box('jh_dedicationName', 'Enter Name', 'jh_dedicationName', 'jh_dedications', 'normal', 'default');
add_meta_box('jh_dedicationOccasion', 'Enter Occasion', 'jh_dedicationOccasion', 'jh_dedications', 'normal', 'default');
}
function jh_dedicationDate($object, $box) {
wp_nonce_field( basename( __FILE__ ), 'dedicationDate_nonce' );
?>
<input type="text" name="dedicationDate" value="<?php echo esc_attr( get_post_meta( $object->ID, 'dedicationDate', true) ); ?>" />
<?php
}
function jh_dedicationName ($object, $box) {
wp_nonce_field( basename( __FILE__ ), 'dedicationName_nonce' );
?>
<input type="text" size="60" name="dedicationName" value="<?php echo esc_attr( get_post_meta( $object->ID, 'dedicationName', true) ); ?>" />
<?php
}
function jh_dedicationOccasion ($object, $box) {
wp_nonce_field( basename( __FILE__ ), 'dedicationOccasion_nonce' );
?>
<input type="text" size="60" name="jh_dedicationOccasion" value="<?php echo esc_attr( get_post_meta( $object->ID, 'dedicationOccasion', true) ); ?>" />
<?php
}
add_action('save_post', 'jh_save_dedication', 10, 2);
function jh_save_dedication($post_id, $post) {
/* Verify the nonce before proceeding. */
if ( !isset( $_POST["dedicationDate_nonce"] ) || !wp_verify_nonce( $_POST["dedicationDate_nonce"], basename( __FILE__ ) ) )
return $post_id;
if ( !isset( $_POST["dedicationName_nonce"] ) || !wp_verify_nonce( $_POST["dedicationName_nonce"], basename( __FILE__ ) ) )
return $post_id;
if ( !isset( $_POST["dedicationOccasion_nonce"] ) || !wp_verify_nonce( $_POST["dedicationOccasion_nonce"], basename( __FILE__ ) ) )
return $post_id;
/* Get the post type object. */
$post_type = get_post_type_object( $post->post_type );
/* Check if the current user has permission to edit the post. */
if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
return $post_id;
/* Get the posted data and sanitize it for use as an HTML class. */
$new_meta_value = ( isset( $_POST['dedicationDate'] ) ? sanitize_html_class( $_POST['dedicationDate'] ) : '' );
/* Get the meta key. */
$meta_key = 'dedicationDate';
/* Get the meta value of the custom field key. */
$meta_value = get_post_meta( $post_id, $meta_key, true );
/* If a new meta value was added and there was no previous value, add it. */
if ( $new_meta_value && '' == $meta_value )
add_post_meta( $post_id, $meta_key, $new_meta_value, true );
/* If the new meta value does not match the old value, update it. */
elseif ( $new_meta_value && $new_meta_value != $meta_value )
update_post_meta( $post_id, $meta_key, $new_meta_value );
/* If there is no new meta value but an old value exists, delete it. */
elseif ( '' == $new_meta_value && $meta_value )
delete_post_meta( $post_id, $meta_key, $meta_value );
}
You have to repeat the last 9 lines of your code for the other 2 nonce fields. Consider the following function
Now you have to call the above function for each nonce field.
If you are submitting and processing the form inside the WP administration area, then you can use
check_admin_referer()
instead ofwp_verify_nonce()
Read more at Codex
http://codex.wordpress.org/Function_Reference/wp_nonce_field