Skip to content

Instantly share code, notes, and snippets.

@wpfangirl
Created October 25, 2018 16:40
Show Gist options
  • Select an option

  • Save wpfangirl/5df51d2f5b0aa2256c84b4f48651ae4d to your computer and use it in GitHub Desktop.

Select an option

Save wpfangirl/5df51d2f5b0aa2256c84b4f48651ae4d to your computer and use it in GitHub Desktop.

Revisions

  1. wpfangirl created this gist Oct 25, 2018.
    92 changes: 92 additions & 0 deletions create-image.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,92 @@
    <?php
    /**
    * Create the image attachment and return the new media upload id.
    *
    * @author Joshua David Nelson, [email protected]
    *
    * @since 03.29.2017 updated to a class, utilizing code from Takuro Hishikawa's gist linked below.
    *
    * @see https://gist.github.com/hissy/7352933
    *
    * @see http://codex.wordpress.org/Function_Reference/wp_insert_attachment#Example
    *
    * @link https://joshuadnelson.com/programmatically-add-images-to-media-library/
    */
    class JDN_Create_Media_File {

    var $post_id;
    var $image_url;
    var $wp_upload_url;
    var $attachment_id;

    /**
    * Setup the class variables
    */
    public function __construct( $image_url, $post_id = 0 ) {

    // Setup class variables
    $this->image_url = esc_url( $image_url );
    $this->post_id = absint( $post_id );
    $this->wp_upload_url = $this->get_wp_upload_url();
    $this->attachment_id = $this->attachment_id ?: false;

    return $this->create_image_id();

    }

    /**
    * Set the upload directory
    */
    private function get_wp_upload_url() {
    $wp_upload_dir = wp_upload_dir();
    return isset( $wp_upload_dir['url'] ) ? $wp_upload_dir['url'] : false;
    }

    /**
    * Create the image and return the new media upload id.
    *
    * @see https://gist.github.com/hissy/7352933
    *
    * @see http://codex.wordpress.org/Function_Reference/wp_insert_attachment#Example
    */
    public function create_image_id() {

    if( $this->attachment_id )
    return $this->attachment_id;

    if( empty( $this->image_url ) || empty( $this->wp_upload_url ) )
    return false;

    $filename = basename( $this->image_url );

    $upload_file = wp_upload_bits( $filename, null, file_get_contents( $this->image_url ) );

    if ( ! $upload_file['error'] ) {
    $wp_filetype = wp_check_filetype( $filename, null );
    $attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_parent' => $this->post_id,
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit'
    );
    $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $this->post_id );

    if( ! is_wp_error( $attachment_id ) ) {

    require_once( ABSPATH . "wp-admin" . '/includes/image.php' );
    require_once( ABSPATH . 'wp-admin/includes/media.php' );

    $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
    wp_update_attachment_metadata( $attachment_id, $attachment_data );

    $this->attachment_id = $attachment_id;

    return $attachment_id;
    }
    }

    return false;

    } // end function get_image_id
    }
    21 changes: 21 additions & 0 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    <?php
    /**
    * Sets an image uploaded through the Gravity Forms upload field (not the post image field) as the post featured image.
    * Works with the regular upload field and Ajax Upload for Gravity Forms: https://wordpress.org/plugins/ajax-upload-for-gravity-forms/
    *
    * @author Sallie Goetsch, [email protected]
    *
    * Uses Joshua David Nelson's JDN_Create_Media_File class.
    *
    * @see https://gist.github.com/joshuadavidnelson/164a0a0744f0693d5746#file-create-image-id-php
    *
    */

    add_action('gform_after_create_post_4', 'set_post_featured', 10, 3 ); // Substitute your form ID for the '4'
    function set_post_featured($post_id, $entry, $form) {
    $post = get_post($post_id);
    $image_url = rgar($entry, '55'); // Substitute your upload field ID for the '55'
    $create_image = new JDN_Create_Media_File( $image_url, $post_id ); // See create-image.php for this class
    $image_id = $create_image->attachment_id;
    set_post_thumbnail($post_id, $image_id);
    }