Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Is there an easy way to include an upload box to your settings page?

I am building an Open Graph options page and I like users to upload a standard image directly from that page.

share|improve this question
add comment

2 Answers

up vote 2 down vote accepted

WordPress provides a convenient function for just this purpose: wp_handle_upload().

Assuming that you already have the appropriate file form field in your settings page, and that you're using register_setting() for your options, and therefore already have an options validation callback, simply handle the file form field data using wp_handle_upload(). Here's an example:

// Validate file fields
else if ( 'file' == $optiondetails['type'] ) {
    if ( isset( $input[$setting] ) ) {
        // Only update setting if input value is in the list of valid options
        $setting_file = $setting . '_file';
        $valid_input[$setting] = ( isset( $_FILES[$setting_file] ) ? theme-slug_image_upload( $setting, $input ) : $valid_input[$setting] );

Then, you just need to define that theme-slug_image_upload() callback, using wp_handle_upload():

function theme-slug_image_upload( $the_file, $input ) {
    $data = $_FILES[$the_file . '_file'];
    if ( '' != $data['name'] )
        $upload = wp_handle_upload( $_FILES[$the_file . '_file'], array( 'test_form' => false ) );
        $upload['url'] = $input[$the_file];
    return $upload['url'];

That's pretty much it.

share|improve this answer
It would be so nice with a full example of the validation callback functions. I can't seem to make it work. –  windyjonas Apr 22 '13 at 15:04
add comment

This was more what I wanted:


Now to figure out how you can detect if a certain image has been deleted.

share|improve this answer
add comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.