WordPress中的自定义图像上载字段

时间:2010-09-24 16:11:31

标签: wordpress

我正在WordPress中开发一个自定义图片上传字段,但是一旦上传图片我就会遇到很多困难。除了上传,我还需要调整图片大小以使用缩略图。每次我尝试使用上传的图像时,都会因无法找到文件而出错(即使我可以在浏览器中查看它并且显然在目录中)。上传时图像默认为666,但我也尝试在777处操作一个具有相同结果的图像。上传图像后,将自行调用resize函数。这是我尝试过的一次尝试:

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?"

没有想法,任何意见都表示赞赏!

2 个答案:

答案 0 :(得分:2)

怀疑你仍然需要一个答案,因为这个问题已经很老了,但这是为了将来的参考:

您获得的错误是wp_load_image使用wp_crop_image的回复。 wp_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(其中“file”是表单输入的名称):

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

答案 1 :(得分:0)

如果您使用内联上传功能,则您的图片将位于/ wp-content / uploads文件夹中,除非您在其他管理面板上指定了另一个文件夹。

请确保您没有更改上传目录位置。

尝试使用WP Post工具上传,以确保您的设置正确无误。然后继续调试代码 - 一旦排除了最基本的代码。