wordpress featured image from external url without download

11,930

Solution 1

I just found out that you can insert images from remote urls without having to first download them and then re-upload them. This works by default in Wordpress without any requirement to install any plugins.

Here's how:

Wherever you see UPLOAD FILES, click that - your file browser will appear where you'd expect you must choose a local file, BUT if you just paste the IMAGE URL into this box and hit OPEN or [ENTER] then Wordpress imports the image from the remote URL.

Click SELECT FILES to upload images from a remote URL Click SELECT FILES to upload images from a remote URL

Paste the remote image URL into the place where you'd normally have the file name Paste the remote image URL into the place where you'd normally have the file name

Solution 2

I just find this plugin that seems to do what you need : https://wordpress.org/plugins/external-featured-image

Share:
11,930
user3449429
Author by

user3449429

Updated on July 26, 2022

Comments

  • user3449429
    user3449429 almost 2 years

    i would like to use external pictures as featured image on wordpress.

    either changing worpdress code. (adding a fetured image metabox accepting urls and do some modifications in order to display the featured image from url correctly)

    or modifiying the plugin WP remote thumbnail, which set a featured image from an image url. it download the picture and create thumbnails in wordpress and set the featured image.

    modifications: * no download from the url, just use the url to display directly on the blog. * remove wp-content/uploads from the url generated by wordpress to display featured image (only for external urls) * no thumbnails creation.

    thank you very much for reading i know there is a lot of questions about this problem but if we solve this question it could be useful for a lot of ppl.

    here the code:

    <?php
    /*
    Plugin Name: WP Remote Thumbnail
    Plugin URI: http://magnigenie.com/wp-remote-thumbnail-set-external-images-featured-image/
    Description: A small light weight plugin to set external/remote images as post thumbnail/featured image.
    Version: 1.0
    Author: Nirmal Kumar Ram
    Author URI: http://magnigenie.com
    License: GPLv2 or later
    License URI: http://www.gnu.org/licenses/gpl-2.0.html
    */
    ?>
    <?php
    
    /**
     * Initialize wprthumb on the post edit screen.
     */
    function init_wprthumb() {
        new wprthumb();
    }
    
    if ( is_admin() ) {
        add_action( 'load-post.php', 'init_wprthumb' );
        add_action( 'load-post-new.php', 'init_wprthumb' );
    }
    
    
    class wprthumb {
    
        /**
         * Hook into the appropriate actions when the wprthumb is constructed.
         */
        public function __construct() {
            add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
            add_action( 'save_post', array( $this, 'save' ) );
        }
    
        /**
         * Adds the meta box container.
         */
        public function add_meta_box( $post_type ) {
        if ( post_type_supports( $post_type, 'thumbnail' )) {
          add_meta_box(
            'some_meta_box_name'
            ,'Remote Post Thumbnail'
            ,array( $this, 'render_meta_box_content' )
            ,$post_type
            ,'side'
            ,'default'
          );
        }
        }
    
        /**
         * Save the meta when the post is saved.
         */
        public function save( $post_id ) {
    
            /*
             * We need to verify this came from the our screen and with proper authorization,
             * because save_post can be triggered at other times.
             */
    
            // Check if our nonce is set.
            if ( ! isset( $_POST['wprthumb_nonce'] ) )
                return $post_id;
    
            $nonce = $_POST['wprthumb_nonce'];
    
            // Verify that the nonce is valid.
            if ( ! wp_verify_nonce( $nonce, 'wprthumb' ) )
                return $post_id;
    
            // If this is an autosave, our form has not been submitted,
        // so we don't want to do anything.
            if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
                return $post_id;
    
            // Check the user's permissions.
            if ( 'page' == $_POST['post_type'] ) {
    
                if ( ! current_user_can( 'edit_page', $post_id ) )
                    return $post_id;
    
            } else {
    
                if ( ! current_user_can( 'edit_post', $post_id ) )
                    return $post_id;
            }
    
        /* All good, its safe for us to save the data now. */
    
            // Sanitize the user input.
            $image = sanitize_text_field( $_POST['remote_thumb'] );
        $upload_dir = wp_upload_dir();
        //Get the remote image and save to uploads directory
        $img_name = time().'_'.basename( $image );
        $img = wp_remote_get( $image );
        $img = wp_remote_retrieve_body( $img );
        $fp = fopen( $upload_dir['path'].'/'.$img_name , 'w');
        fwrite($fp, $img);
        fclose($fp);
    
        $wp_filetype = wp_check_filetype( $image , null );
        $attachment = array(
          'post_mime_type' => $wp_filetype['type'],
          'post_title' => preg_replace('/\.[^.]+$/', '', $image ),
          'post_content' => '',
          'post_status' => 'inherit'
        );
    
        //require for wp_generate_attachment_metadata which generates image related meta-data also creates thumbs
        require_once( ABSPATH . 'wp-admin/includes/image.php' );
        $attach_id = wp_insert_attachment( $attachment, $image, $post_id );
        //Generate post thumbnail of different sizes.
        $attach_data = wp_generate_attachment_metadata( $attach_id , $image );
        wp_update_attachment_metadata( $attach_id,  $attach_data );
        //Set as featured image.
        delete_post_meta( $post_id, '_thumbnail_id' );
        add_post_meta( $post_id , '_thumbnail_id' , $attach_id, true);
        }
    
        /**
         * Render Meta Box content.
         */
        public function render_meta_box_content( $post ) {
    
            // Add an nonce field so we can check for it later.
            wp_nonce_field( 'wprthumb', 'wprthumb_nonce' );
    
            // Display the form, using the current value.
            echo '<label for="remote_thumb">';
            _e( 'Enter remote image url', 'wprthumb' );
            echo '</label> ';
            echo '<input type="text" id="remote_thumb" name="remote_thumb" size="25" />';
        }
    }