WordPress : Comment créer un cache local d’images mshots

Publié par Jean-Michel le

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(); ?>" />

Il fonctionne bien. Mais je me demande comment 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.

Solution n°1 trouvée

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. Comme la façon dont les images sont nommées. Vous pouvez également jeter un œil à ceci.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *