Is it possible to set Featured Image using HTML?

The Amazon affiliate program does not let you download images from their site and upload it via their server. One authorized way of using images from Amazon is to use their API or Sitestripe. For new affiliates that haven't made any sales yet, we are only allowed to use Sitestripe.

Sitestripe pulls the image from the site, however the image comes in the form as an html code. Would it be possible to set featured image using said HTML code to comply with Amazon? Thank you

Topic amazon post-thumbnails Wordpress

Category Web


Yes, it's possible. You would just use regex to parse the HTML to get the image URL, upload that to the uploads folder, and then set it as the featured image.

Like this:

function set_featured_image_from_html( $html, $post_id ) {
    // If there are no images in the HTML, return early.
    if ( ! preg_match( '/<img\s+.*?src=[\"\']?([^\"\' >]*)[\"\']?[^>]*>/i', $html, $image ) ) {
        return;
    }

    $image_url = $image[1];

    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents( $image_url );
    $filename   = basename( $image_url );

    if ( wp_mkdir_p( $upload_dir['path'] ) ) {
        $file = $upload_dir['path'] . '/' . $filename;
    } else {
        $file = $upload_dir['basedir'] . '/' . $filename;
    }
    file_put_contents( $file, $image_data );

    $wp_filetype = wp_check_filetype( $filename, null );
    $attachment  = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title'     => sanitize_file_name( $filename ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );

    $attach_id   = wp_insert_attachment( $attachment, $file, $post_id );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );

    wp_update_attachment_metadata( $attach_id, $attach_data );
    set_post_thumbnail( $post_id, $attach_id );
}

You would use it like this:

set_featured_image_from_html('<img src="https://picsum.photos/800">', 29);

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.