Sample code for validating custom metabox?

I’ve found very little on this site or in Google searches for examples of validating metabox custom fields.

If anyone wants to give examples, here are some cases that would be useful

1) Date entered as 05/02/2011 is valid date format
2) Number entered in text box is numeric and between 100 and 500
3) Text in text box is > 25 chars long

My question is not so much the code to validate the fields but where to put the validation code? Use Javascript or PHP? If it hooks on save-post, techniques for dealing with failed validation – Update the post? Don’t update the post? – how do you stop it from updating? Best way to notify the user of the problems.

All suggestions are appreciated. Sample code is more helpful than just a description of a technique. ( This would be a very good topic for someone to write an article on. )
Thank you

3 s
3

Straight from the WP Codex @ http://codex.wordpress.org/Function_Reference/add_meta_box, you call the save_post hook and specify the function that will be run to validate/save your data:

/* Do something with the data entered */
add_action('save_post', 'myplugin_save_postdata');

Then you define that function, which will automatically be passed the post id. Additionally, you can access the $_POST array to get the values in your metaboxes:

/* When the post is saved, saves our custom data */
function myplugin_save_postdata( $post_id ) {
  // verify if this is an auto save routine. 
  // If it is our form has not been submitted, so we dont want to do anything
  if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
      return $post_id;

  // verify this came from the our screen and with proper authorization,
  // because save_post can be triggered at other times

  if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename(__FILE__) ) )
      return $post_id;


  // Check permissions
  if ( 'page' == $_POST['post_type'] ) 
  {
    if ( !current_user_can( 'edit_page', $post_id ) )
        return $post_id;
  }
  else
  {
    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;
  }

  // OK, we're authenticated: we need to find and save the data

  $mydata = $_POST['myplugin_new_field'];

  // Do something with $mydata 
  // probably using add_post_meta(), update_post_meta(), or 
  // a custom table (see Further Reading section below)

   return $mydata;
}

All of your routines to valid data will be done within this function. In the end, you will likely save the data using something like:
update_post_meta('meta_key', 'meta_value');

EDIT: I realize I did not address the breadth of your question, but since I put the time into this I leave it here to get you a quarter of the way there.

Leave a Comment