2 votes

WordPress | Télécharger des fichiers et les redimensionner

J'ai développé un script qui permet aux utilisateurs enregistrés du front-end de créer leurs propres articles, avec une image vedette pour chaque article.

Bien que j'aie achevé le processus global, le problème qui se pose maintenant est le redimensionnement de l'image.

Le script qui manipule les images est le suivant :

if(isset($files['rcp_user_logo']) && $files['rcp_user_logo']['error'] == 0)
{
    $uploadDir      =   wp_upload_dir();
    $updoadBase     =   $uploadDir['basedir'];
    $uploadURL      =   $uploadDir['baseurl'];
    $uploadLogos    =   $updoadBase . DIRECTORY_SEPARATOR . 'LfirmLogos' . DIRECTORY_SEPARATOR;
    $uploadLogosURL =   $uploadURL . '/LfirmLogos/';
    $dir_exists     =   false;                          //  Flag for directory existance

    if(($dir_exists = is_dir($uploadLogos)) == false)   //  If the upload dir is not exists
    {
        $dir_exists =   mkdir($uploadLogos, 0755);      //  Try to create the dir with 0755 permissions
                                                        //  If the dir will be successfully created
                                                        //  the $dir_exists will be set to true
                                                        //  otherwise will be set to false
    }
    else
    {
        $dir_exists = true;                             //  If upload dir exists then set
                                                        //  the $dir_exists to true
    }

    if($dir_exists  == true)
    {
        //  Set the tmpFile to the temporary uploaded file path
        $tmpFile    =   $files['rcp_user_logo']['tmp_name'];
        //  Set the new file to upload directory and name the file after the custom post ID
        $newFile    =   $uploadLogos . $new_id . '-' . $files['rcp_user_logo']['name'];
        //  Set the new file URL to updaload directory URL and name the file after the custom post ID
        $newFileURL =   $uploadLogosURL . $new_id . '-' . $files['rcp_user_logo']['name'];

        if(move_uploaded_file($tmpFile, $newFile))      //  If file has been
        {
            $wp_filetype    =   wp_check_filetype($files['rcp_user_logo']['name']);

            $attachment = array(
                'guid'           => $newFileURL,
                'post_mime_type' => $wp_filetype['type'],
                'post_title'     => sanitize_title($files['rcp_user_logo']['name']),
                'post_status'    => 'inherit'
            );

            $attachment_id = wp_insert_attachment($attachment, $newFileURL, $new_id);

            if($attachment_id != 0 )
            {
                if(!function_exists('wp_generate_attachment_metadata'))
                {
                    include( ABSPATH . 'wp-admin/includes/image.php' );
                }

                $attachment_data    =   wp_generate_attachment_metadata($attachment_id, $newFileURL);
                $result = wp_update_attachment_metadata($attachment_id, $attachment_data);
                $result = update_post_meta($new_id,   '_thumbnail_id',    $attachment_id);
            }
        }
    }
}

NOTE : Afin de garder mes logos séparés des images par défaut de WordPress, j'ai créé mon propre catalogue sous /wp-content/uploads/ et je ne sais pas si c'est une raison pour empêcher le redimensionnement des images.

NOTE : $new_id est l'ID du message créé par programme dans le code des aperçus.

NOTE : J'ai également utilisé le plugin "AJAX Thumbnail Rebuild" mais toujours aucun effet sur les images. Il ne peut pas non plus redimensionner les images.

NOTE : Les images qui sont téléchargées par la zone d'administration sont correctement redimensionnées.

Avez-vous une idée de la façon de résoudre ce problème ?

Bien à vous

1voto

Dragos Rizescu Points 419

Je vous conseille d'utiliser les images GD de php puisque wordpress l'utilise aussi : http://php.net/manual/en/function.imagecopyresized.php

Voici un extrait de code tiré de cette page qui redimensionne l'image à un pourcentage, 0,5 dans l'exemple :

<?php
// File and new size
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb);
?>

Note : AJAX Thumbnail Rebuild est un plugin qui reconstruit les vignettes à partir du gestionnaire de médias de wordpress.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X