0

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

1 Answer 1

0

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);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.