Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

wordpress featured image from external url without download

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" />';
    }
}
like image 627
user3449429 Avatar asked Mar 22 '14 12:03

user3449429


People also ask

How do I add a featured image to a WordPress URL?

Click on the Document section. Scroll down until you have found the Featured Image from URL option. In it, you will find a text box to paste the image URL. Paste your image's URL here.

Why is my WordPress featured image not showing?

Configure WordPress Dashboard Settings Navigate to your WordPress dashboard and click on Screen Options. Check the Featured image option to display a featured image column in your post and page lists. The Featured image tab should now appear in your content editor.

How do I find my featured image URL?

Simply add: add_theme_support('post-thumbnails'); To a theme's functions. php file and you'll get a Featured Image module on the admin screen for posts which allows you to select one.


1 Answers

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 URLClick SELECT FILES to upload images from a remote URL

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

like image 199
Dave Hilditch Avatar answered Oct 14 '22 15:10

Dave Hilditch