web-dev-qa-db-fra.com

Comment faire un cache local des images mshots

J'utilise l'api WordPress mshots pour générer des vignettes automatiques de sites Web à partir de l'URL du site. J'utilise un champ personnalisé pour capturer l'URL du site Web et transmettre la valeur à l'URL mshots pour renvoyer la capture d'écran.

<?php
    $shot = get_post_meta($post->ID, 'website_url', true);
    $url = str_replace('http://', '', $shot);
    $imgurl = "http://s.wordpress.com/mshots/v1/".$url;
?>
<img src="<?php echo $imurl ?>" width="300" height="200" alt="<?php the_title(); ?>" /> 

Cela fonctionne bien. Mais je me demande comment puis-je créer un cache local des captures d'écran générées dans le dossier du thème, afin qu'il puisse être affiché au lieu de faire un appel au serveur distant chaque fois que l'image est demandée.

1
Jinson Abraham

Je pense que cela devrait fonctionner.

function upload_image_from_url($url) {

    /** Require dependencies */
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    require_once( ABSPATH . 'wp-admin/includes/media.php' );     

    // Save as a temporary file
    $tmp = download_url( $url );

    // Check for download errors
    if ( is_wp_error( $tmp ) ) 
    {
        @unlink( $file_array[ 'tmp_name' ] );
        return $tmp;
    }

    // Image name (just random-number)
    $name = Rand(0,100000).".jpg";

    // Take care of image files without extension:
    $path = pathinfo( $tmp );
    if( ! isset( $path['extension'] ) ):
        $tmpnew = $tmp . '.tmp';
        if( ! rename( $tmp, $tmpnew ) ):
            return '';
        else:
            $name = Rand(0,100000).".jpg";
            $tmp = $tmpnew;
        endif;
    endif;

    // Upload the image into the WordPress Media Library:
    $file_array = array(
        'name'     => $name,
        'tmp_name' => $tmp
    );
    $id = media_handle_sideload( $file_array, 0 );

    // Check for handle sideload errors:
    if ( is_wp_error( $id ) )
    {
        @unlink( $file_array['tmp_name'] );
        return $id;
    }

    return $id;
}

Je sais que ce script fonctionne, mais je ferais quelques changements. J'aime comment les images sont nommées. Vous pouvez également consulter this .

1
Lasse M. Tvedt