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 am writing a plugin which should allow users to create a custom post type called reseller and attach an image. The image is being uploaded to the uploads folder and appears in the media library with a blank thumbnail. The image is also not visible in the list of 'resellers' in the back-end i.e the admin interface for the custom post type.

Can anyone see what I've missed? relevant functions start line 362 here:

https://gist.github.com/codecowboy/80fd6363c58558a74c9e

Relevant section:

   public function wps_reseller_cpt() {
        $labels = array(
            'name'               => _x( 'WPS Resellers', 'post type general name' ),
            'singular_name'      => _x( 'WPS Reseller', 'post type singular name' ),
            'add_new'            => _x( 'Add New', 'book' ),
            'add_new_item'       => __( 'Add New Reseller' ),
            'edit_item'          => __( 'Edit Reseller' ),
            'new_item'           => __( 'New Reseller' ),
            'all_items'          => __( 'All Resellers' ),
            'view_item'          => __( 'View Reseller' ),
            'search_items'       => __( 'Search Resellers' ),
            'not_found'          => __( 'No resellers found' ),
            'not_found_in_trash' => __( 'No Reseller found in the Trash' ),
            'parent_item_colon'  => '',
            'menu_name'          => 'Resellers'
        );
        $args = array(
            'labels'        => $labels,
            'description'   => 'Holds our resellers and reseller specific data',
            'public'        => true,
            'menu_position' => 50,
            'supports'      => array( 'title', 'editor','image', 'thumbnail', 'custom-fields' ),
            'has_archive'   => false,
        );
        register_post_type( 'wps-reseller', $args );
    }

    public function create_reseller_profile_form(){

        require_once plugin_dir_path( __FILE__ ) . 'views/public-create_reseller_profile_form.php';

    }

    public function intercept_reseller_profile_form() {

        if ( !empty( $_POST['wps-reseller-user-submission'] ) ) {
            $this->wps_reseller_process_form();
        } else {
            return $template;
        }

    }

    public function wps_reseller_process_form() {
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');


        if ( wp_verify_nonce( $_POST['reseller_user_form'], 'add_reseller_form') &&
            !empty( $_POST['reseller-title'] ) &&
            !empty( $_POST['reseller-description'] ) &&
            !empty( $_FILES['reseller-image']) )
        {

            //var_dump($_POST); exit;
            $file = $_FILES['reseller-image'];
            $uploads = wp_upload_dir();//var_dump($uploads); exit;
            $new_reseller_profile_data = array(
                'post_status' => 'draft',
                'post_title' => $_POST['reseller-title'],
                'post_content' => $_POST['reseller-description'],
                'post_type' => 'wps-reseller'
            );

            $file_errors = $this->wps_parse_file_errors($file);
            $upload_overrides = array( 'test_form' => FALSE );
            if($file_errors['error'] == 0) {

                if($new_reseller_id = wp_insert_post( $new_reseller_profile_data )){

                    //$this->wps_process_image($file, $new_reseller_id);exit;

                    $uploaded_file = wp_handle_upload( $file, $upload_overrides );


                    $wp_filetype = wp_check_filetype( basename( $uploaded_file['file'] ), null );
                    $attachment = array(
                        'post_mime_type' => $wp_filetype['type'],
                        'post_title' => preg_replace('/\.[^.]+$/', '', basename( $uploaded_file['file'] ) ),
                        'post_content' => '',
                        'post_author' => '',
                        'post_status' => 'inherit',
                        'post_type' => 'attachment',
                        'post_parent' => $new_reseller_id,
                        'guid' => $uploads['baseurl'] . $uploads['subdir'] . '/' . $file['name']
                    );
echo $uploads['baseurl'].'<br />';
echo $file['name'].'<br />';
var_dump($uploads); exit;

                    $attachment_id = wp_insert_post( $attachment );
                    $attach_data = wp_generate_attachment_metadata( $attachment_id, $uploaded_file['file'] );

                    // update the attachment metadata
                    wp_update_attachment_metadata( $attachment_id,  $attach_data );
                    set_post_thumbnail( $new_reseller_id, $attachment_id );

                }
            }

        }

        //create a new reseller post, make it draft (ensure post type supports this)
        //email an admin user

    }

    protected function wps_parse_file_errors($file){

        define('MAX_UPLOAD_SIZE', 200000);
        define('TYPE_WHITELIST', serialize(array(
            'image/jpeg',
            'image/png',
            'image/gif'
        )));

        $result = array();
        $result['error'] = 0;

        if($file['error']){

            $result['error'] = "No file uploaded or there was an upload error!";

            return $result;

        }
        $image_data = getimagesize($file['tmp_name']);

        if(!in_array($image_data['mime'], unserialize(TYPE_WHITELIST))){

            $result['error'] = 'Your image must be a jpeg, png or gif!';

        }elseif(($file['size'] > MAX_UPLOAD_SIZE)){

            $result['error'] = 'Your image was ' . $file['size'] . ' bytes! It must not exceed ' . MAX_UPLOAD_SIZE . ' bytes.';

        }
        return $result;

    }


}

Questions:

  1. why is the thumbnail blank in the media library? Here's what is being loaded:

  1. How do I get the image to show up in the admin interface?

If I add files to the library using the media manager, the thumbnails and image appear as expected.

In case it is relevant, this is a multisite install.

share|improve this question
1  
Please just post the relevant code in here. ... you know that. –  kaiser Oct 16 '13 at 13:55
    
@kaiser do I? done. –  codecowboy Oct 16 '13 at 14:19
    
After 25 questions we assume that you do know :) –  kaiser Oct 16 '13 at 14:52

1 Answer 1

How About you try this code for your attachment

 $uploaded_file = wp_handle_upload( $file, $upload_overrides );
 $attachment = array(
        'post_mime_type' => $uploaded_file['type'],
        'post_title' => preg_replace('/\.[^.]+$/', '', basename( $uploaded_file['file'] ) ),
        'post_content' => '',
        'post_author' => '',
        'post_status' => 'inherit',
        'post_type' => 'attachment',
        'post_parent' => $new_reseller_id,
        'guid' => $uploaded_file['file']
    );
 $attachment_id = wp_insert_attachment( $attachment, $uploaded_file['file'] );
 $attach_data = wp_generate_attachment_metadata( $attachment_id, $uploaded_file['file'] );

 // update the attachment metadata
 wp_update_attachment_metadata( $attachment_id,  $attach_data );
 //Set as thumbnail
 set_post_thumbnail ($new_reseller_id, $attachment_id );

To fetch the post thumbnail

if you are in the loop, then

  the_post_thumbnail

will give you the featured image. otherwise use

   get_the_post_thumbnail ( $new_reseller_id )
share|improve this answer

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.