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.

I have been struggling for days to figure this one out. I have successfully implemented a form to submit posts from the front end of my site. ButI can't figure out how to make the image uploads work.

I want whatever image the user uploads to automatically attach to the post and become its featured image.

Can someone please explain how to do this with my existing code?

I have searched through all relevant questions on this forum and none of the solutions work for me.

                <?

            if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['insert_post'] )) { //check that our form was submitted
            //If it has, redirect to the dashboard
            ?><script language="javascript"><!--
            location.replace("/dashboard/")
            //-->
            </script> <?php

            $title = $_POST['thread_title']; //set our title

            if ($_POST['thread_description']=="") { // check if a description was entered
            $description = "See thread title..."; // if not, use placeholder
            } else {
            $description = $_POST['thread_description']; //if so, use it
            }

            $tags = $_POST['thread_tags']; //load thread tags (custom tax) into array

            $post = array( //our wp_insert_post args
            'post_title'    => wp_strip_all_tags($title),
            'post_content'  => $description,
            'post_category' => array('0' => $_POST['cat']),
            'tax_input' => array('thread_tag' => $tags),
            'post_status'   => 'publish',
            'post_type' => 'tsv_userpost'
            );

            $my_post_id = wp_insert_post($post); //send our post, save the resulting ID

            $current_user = wp_get_current_user(); //check who is logged in

            add_post_meta($my_post_id, '_your_custom_meta', $var); //add custom meta data, after the post is inserted


            } else {

            if(is_user_logged_in()) { // check that the user is logged in before presenting form

            $current_user = wp_get_current_user();

            ?>

            <div id="postbox">

            <form id="new_thread" name="new_thread" method="post" action="" enctype="multipart/form-data">

            <input class="required" type="text" id="thread_title" value="" tabindex="1" name="thread_title" placeholder="Thread Title" />

            <textarea id="thread_description" name="thread_description" cols="80" rows="20" tabindex="2"></textarea>

            <div class="left">
            <select name='cat' id='cat' class='postform required' tabindex="3">
            <option value="" selected="selected">Choose:</option>
            <option class="writing" value="90">Writing</option>
            <option class="image" value="91">Image</option>
            <option class="video" value="92">Video</option>
            <option class="audio" value="94">Audio</option>
            <option class="link" value="95">Link</option>
            </select>
            </div>

            <input type="text" value="" tabindex="4" size="16" name="thread_tags" id="thread_tags" placeholder="Tags" />
            <br />

            <!-- images -->
            <label for="images">Featured Image:</label>
            <input type="file" name="user-image-featured" id="user-image-featured" size="20">
            <!-- Submit button-->
            <br />
            <input type="submit" value="Save Post" tabindex="5" id="thread_submit" name="thread_submit" class="thread-button" />

            <input type="hidden" name="insert_post" value="post" />

            <?php wp_nonce_field( 'new_thread' ); ?>

            </form>

            </div>

            <?php } else { echo 'please login'; } } ?>
share|improve this question

2 Answers 2

up vote 4 down vote accepted

you can do that by running the function

set_post_thumbnail( $my_post_id, $thumbnail_id );

remember, you have to process and insert the image into the library first:

$uploaddir = wp_upload_dir();
$file = $_FILES[ ... whatever you have in your POST data ... ];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );

move_uploaded_file( $file , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );

did not test the script - it is adapted from a version i created. maybe you want to change the filename and stuff like that, but all in all it works this way :)

share|improve this answer
    
Thanks! I've played with similar functions to that one with no luck. Am I just putting the code in the wrong place? Where should those two code snippets go in the code above? –  Eckstein Nov 13 '12 at 17:44
    
this doesn't really matter. you can create the post before the attachment or the other way round, the only important thing is to have both created when you call set_post_thumbnail( $my_post_id, $thumbnail_id ); –  fischi Nov 14 '12 at 10:32
    
by the way, your image is submitted correctly? try print_r( $_FILES ) to see if you got the right setup and the image available. –  fischi Nov 14 '12 at 10:33

Can I fix your code ?

$uploaddir = wp_upload_dir();
$file = $_FILES[ ... whatever you have in your POST data ... ];
$uploadfile = $uploaddir['path'] . '/' . basename( $file['name'] );

move_uploaded_file( $file['tmp_name'] , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
share|improve this answer
    
Please add an explanation to your answer: why could that solve the problem? –  toscho Sep 9 at 22:58
    
sorry, the $_FILES have some field like ["name"] and ["tmp_name"] that must be used otherwise not work the file uploading –  biancardi Sep 10 at 5:58

Your Answer

 
discard

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.