Creating a metabox to upload multiple images

Is it possible to make a meta box that attaches multiple images to a post?

Related posts

Leave a Reply

4 comments

  1. That depends entirely on what you mean by “attach.”

    Each WordPress post can already have multiple media attachments – photos, documents, etc. You upload these using the built-in uploader and they’ll all be marked as “attached” to that specific post ID.

    You can refer to these later programatically elsewhere. For example, the following code will list out all attachments for a specific post (code from Snipplr):

    $args = array(
        'post_type' => 'attachment',
        'numberposts' => null,
        'post_status' => null,
        'post_parent' => $post->ID
    );
    $attachments = get_posts($args);
    if ($attachments) {
        foreach ($attachments as $attachment) {
            echo apply_filters('the_title', $attachment->post_title);
            the_attachment_link($attachment->ID, false);
        }
    }
    

    All of this functionality is accessible via the default “Add Media” button to the far right of “Upload/Insert” on the new post screen. After you add one image, you can click “Select Files” again and upload a second image. Then a third. Then a fourth. As many as you want.

    Each of these images will be “attached” to the post … even if they’re not inserted into the content.

  2. I’d also recommend checking out http://www.wpalchemy.com . WPAlchemy is a kick ass “class” (near to a plugin) to easily add custom meta boxes to your site. I use it extensively and have been impressed by the ease of use and commitment of the developer and burgeoning community.

  3. Yes it’s quite possible. See a response I got about metaboxes. Basically, you’ll just want to add a hook for save_post and verify the nonce field.

    function my_save_post_callback( $post_id, $post )
    {
        if ( empty($_POST) || !isset($_POST['my_custom_metabox']) || !wp_verify_nonce( $_POST['my_custom_metabox'], plugin_basename( __FILE__ ) ) )
        {
            return $post->ID;
        }
    
        // Handle the upload here
    
    }
    add_action( 'save_post', 'my_save_post_callback', 1, 2);