2010-09-24 4 views
3

Je développe un champ de téléchargement d'image personnalisé dans WordPress, mais j'ai beaucoup de difficulté à traiter l'image une fois qu'elle a été téléchargée. En plus du téléchargement, j'ai besoin de redimensionner l'image pour utiliser une vignette. Chaque fois que j'essaie de travailler avec l'image téléchargée, j'obtiens une erreur d'être incapable de trouver le fichier (même si je peux le voir dans un navigateur et c'est clairement dans le répertoire). Les images sont 666 par défaut lorsqu'elles sont téléchargées, mais j'ai également essayé de manipuler une à 777 avec les mêmes résultats. La fonction de redimensionnement est appelée seule après le téléchargement de l'image. Voilà l'une des tentatives que j'ai fait:Champ de téléchargement d'image personnalisé dans WordPress

function resize_author_picture($filename) { 
    $filename = $_POST['file']; 
    $file = fopen($filename, 'r'); 
    $data = fread($file); 
    fclose($file); 
    $dimensions = getimagesize($filename); 
    $dir = dirname($filename); 
    $crop = wp_crop_image($data, $dimensions[0], $dimensions[1], 0, 0, 250, 280, null, $dir."/image.jpg"); 

    die("crop: ".var_dump($crop)." file: ".$filename." path: ".$dir."/image.jpg"); 
} 

Ici, j'utilisé fopen() comme une deuxième tentative fournissant une fois juste le chemin de l'image ne fonctionne pas. Voici la tentative précédente:

function resize_author_picture($file) { 
$file = $_POST['file']; 
$dimensions = getimagesize($file); 
$dir = dirname($file); 
$crop = wp_crop_image($file, $dimensions[0], $dimensions[1], 0, 0, 250, 280, null, $dir."/image.jpg"); 
die("crop: ".var_dump($crop)." file: ".$file." path: ".$dir."/image.jpg"); 
} 

Les deux renvoient un objet d'erreur WP dans ce sens:

string(123) "File <http://site.local/wp-content/uploads/2010/09/squares-wide.jpeg> doesn't exist?" 

à court d'idées, toute entrée est appréciée!

+0

Même avec la modification, ma réponse est toujours valide. Je l'ai mis à jour avec un exemple concret. –

Répondre

0

Si vous avez utilisé la fonction de téléchargement en ligne, votre image se trouve dans le dossier/wp-content/uploads, sauf si vous avez spécifié un autre dossier sur le Panneau d'administration divers.

Assurez-vous que vous n'avez pas modifié l'emplacement du répertoire de téléchargement. Essayez de télécharger en utilisant les outils WP Post pour vous assurer que vos paramètres sont corrects. Puis déplacez-vous sur le code de débogage - une fois que vous avez exclu le plus fondamental.

+0

Pas le problème - les images téléchargent correctement et existent là où je les attend, en wp-contenu/images. Apparemment, tout script suivant wp_upload_bits() ne peut pas accéder aux images. – Gavin

2

doute vous avez encore besoin d'une réponse, que cette question est assez vieux, mais ici il est pour référence future:

L'erreur est votre obtenir un retour de wp_load_image qui est utilisé par wp_crop_image. wp_load_image utilise la fonction php file_exists, qui doit être alimenté le chemin du fichier sans le domaine.

Alors

$crop = wp_crop_image($file, $dimensions[0], $dimensions[1], 0, 0, 250, 280, 
     null, "wp-content/uploads/2010/09/squares-wide.jpeg"); 

aurait travaillé.

En mettant de côté wp_upload_bits ne télécharge pas seulement le fichier (s) pour vous, il renvoie également l'URL du fichier téléchargé.

Si vous appelez wp_upload_bits comme si (où « fichier » est le nom de l'entrée de la forme):

if ($_FILES["file"]["name"]!="") { 
    $uploaded_file = wp_upload_bits($_FILES["file"]["name"], null, 
     file_get_contents($_FILES["file"]["tmp_name"])); 
} 

Par conséquent $uploaded_file['url'] est équivalent à $dir."/image.jpg". Dans la culture ci-dessus, vous auriez pu utiliser une sous-chaîne de $uploaded_file['url'].

Exemple concret:

Avec http://site.local/wp-content/uploads/2010/09/squares-wide.jpeg cela fonctionnera:

$dir = dirname($file); 
$dir_substr = substr($dir, 18) 
$crop = wp_crop_image($file, $dimensions[0], $dimensions[1], 0, 0, 250, 280, 
     null, $dir."/squares-wide.jpeg"); 

Bien sûr, vous voulez aussi le nom de fichier soit dynamique, donc je dirais wp_uload_bits tel que proposé ci-dessus (si ce n'est pas provenant d'un champ de formulaire, mais un champ WP personnalisé l'appeler comme vous le faites maintenant, la partie importante est $uploaded_file = wp_upload_bits(...) pour enregistrer le retour de wp_upload_bits dans une variable pour une utilisation ultérieure), puis faites

$file_uri = substr($uploaded_file['url'], 18); 
$crop = wp_crop_image($file, $dimensions[0], $dimensions[1], 0, 0, 250, 280, 
     null, $file_uri); 
Questions connexes