2010-09-24 95 views
3

我正在WordPress中開發一個自定義圖片上傳字段,但是在上傳圖片後我遇到了很多困難。除了上傳之外,我還需要調整圖片大小以使用縮略圖。每次嘗試使用上傳的圖像時,我都會遇到無法找到該文件的錯誤(即使我可以在瀏覽器中查看它,並且很清楚地顯示在目錄中)。上傳時圖像默認爲666,但我也嘗試在777處操作,結果相同。圖像上傳後,調整大小功能會自行調用。下面是我所做的嘗試之一: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"); 
} 

這裏我用fopen()函數,因爲一旦只提供圖像的路徑沒有工作,第二次嘗試。這裏是以前的嘗試:

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"); 
} 

兩個沿着這些線路返回一個錯誤WP對象:

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

運行的想法,任何輸入的感謝!

+0

即使編輯我的答案仍然成立。我已經用一個具體的例子更新了它。 – 2011-05-24 22:03:17

回答

0

如果您使用內聯上傳功能,您的圖片將位於/ wp-content/uploads文件夾中,除非您在其他管理面板上指定了另一個文件夾。

請確保您沒有更改上傳目錄位置。

嘗試使用WP Post工具上傳,以確保您的設置是正確的。然後繼續調試代碼 - 一旦排除了最基本的代碼。

+0

不是問題 - 在wp-content/images中圖像正確上傳並存在於我期望的位置。看來wp_upload_bits()後面的任何腳本都無法訪問這些圖像。 – Gavin 2010-09-24 20:09:26

2

疑問,你仍然需要一個答案,因爲這個問題是很老,但在這裏它是供將來參考:

你得到的錯誤是wp_load_image返回其使用wp_crop_imagewp_load_image使用php函數file_exists,這需要在沒有域的情況下提供文件的路徑。

所以

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

會工作。

另外wp_upload_bits不僅會爲您上傳文件,還會返回上傳文件的網址。

如果你打電話wp_upload_bits像這樣(其中,「文件」的形式輸入的名稱):

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

因此$uploaded_file['url']相當於$dir."/image.jpg"。在上述作物中,您可以使用$uploaded_file['url']的子字符串。

具體的例子:

隨着http://site.local/wp-content/uploads/2010/09/squares-wide.jpeg這將工作:

$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"); 

當然你也想要的文件名是動態的,所以我會打電話wp_uload_bits如上建議(如果不是來自一個表單域,但是一個WP Custom字段像現在這樣調用它,重要的部分是$uploaded_file = wp_upload_bits(...)wp_upload_bits的回報保存在一個變量中供以後使用),然後執行

$file_uri = substr($uploaded_file['url'], 18); 
$crop = wp_crop_image($file, $dimensions[0], $dimensions[1], 0, 0, 250, 280, 
     null, $file_uri); 
相關問題