Пользовательское поле загрузки изображений в WordPress - PullRequest
3 голосов
/ 24 сентября 2010

Я разрабатываю настраиваемое поле для загрузки изображений в WordPress, но у меня возникает масса проблем с обработкой изображения после его загрузки.В дополнение к загрузке, мне нужно изменить размер изображения, чтобы использовать миниатюру.Каждый раз, когда я пытаюсь работать с загруженным изображением, я получаю сообщение об ошибке из-за невозможности найти файл (даже если я могу просмотреть его в браузере, и он явно находится в каталоге).Изображения по умолчанию 666 при загрузке, но я также пытался манипулировать одним на 777 с теми же результатами.Функция изменения размера вызывается сама по себе после загрузки изображения.Вот одна из попыток, которые я предпринял:

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 ]

2 голосов
/ 24 мая 2011

Сомневаюсь, что вам все еще нужен ответ, так как этот вопрос довольно старый, но здесь он предназначен для дальнейшего использования:

Ошибка, которую вы получаете, - это возвращение 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" );

сработало бы.

AnПомимо wp_upload_bits не только загружает файл (ы) для вас, он также возвращает URL загруженного файла.

Если вы вызываете wp_upload_bits, например, так (где "file" - это имя формыinput):

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 );
0 голосов
/ 24 сентября 2010

Если вы использовали встроенную функцию загрузки, ваше изображение будет находиться в папке / wp-content / uploads, если вы не указали другую папку в Разное админ-панели .

Убедитесь, что вы не изменили расположение каталога загрузки.

Попробуйте загрузить с помощью инструментов WP Post, чтобы убедиться, что ваши настройки верны. Затем перейдите к коду отладки - как только вы исключите самое основное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...