Изменить аватар БП через WP_REST_API - PullRequest
0 голосов
/ 20 января 2020

В настоящее время я расширяю API wp rest, чтобы централизовать все и иметь возможность перейти от веб-приложения к реальному приложению (я просто пропускаю Обновление и удаление аватара + входа в систему для входа в систему для завершения API)

Я многому научился и многому научился благодаря этой работе, но я только что провел день без успешной загрузки и аватара через API, таким образом, не добившись прогресса

Я получаю « истинное значение из этого: bp_core_avatar_handle_upload($_FILES['avatar'],'xprofile_avatar_upload_dir');, но больше ничего не происходит (даже загрузка)

Я все еще пытаюсь найти выход, но мне нужна помощь в этом

Thx

РЕДАКТИРОВАТЬ: Так как я не мог заставить его работать, и аватар выбирается на основе последнего обновления файлов '-bp-full' и '-bp-thumb', я буду просто поместите файл в / uploads / avatars / {id} /

Теперь я пытаюсь понять, как изменить размер, чтобы сделать миниатюру. Мой текущий код выглядит так

$file = $_FILES['file'];
        $file_meta = getimagesize($file["tmp_name"]);
        if($file_meta !== false){

          if($file_meta[0] == $file_meta[1]){

            $file_path = $file['tmp_name'];
            $FILE_EXTENSION = pathinfo($path, PATHINFO_EXTENSION);

            // use 'avatar-bp....' instead of default wp_hash($file['name'].time())
            // to avoid having multiple image for each user
            $full_filename  = 'avatar-bpfull.'  . $FILE_EXTENSION;
            $thumb_filename = 'avatar-bpthumb.' . $FILE_EXTENSION;
            $target_dir = wp_get_upload_dir()['basedir'].'/avatars/'.$user_id.'/';

            for($i = 0; $i++; $i<=1){
              if($i == 0){
                $width = 150;
              }else{
                $width = 80;
              }

              $height = $width;

              $image_p = imagecreatetruecolor($width, $height);
              $image = imagecreatefromjpeg($file_path);
              imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
              if($i==0){
                $image_full = $image_p;
              }else{
                $image_thumb = $image_p;
              }
            }
            return $image_full;

            // move from /tmp
            if (rename($file_path, $target_dir.$thumb_filename) && rename($file_path, $target_dir.$full_filename)) {
                return "The file has been uploaded.";
            } else {
                return "Sorry, there was an error uploading your file.";
            }
          }else{
            return 'not a squared image';
          }
        }else{
          return 'not an image';
        }

Я делаю что-то неправильно ? Есть ли лучшая практика, которой я должен следовать? Thx:)

1 Ответ

0 голосов
/ 22 января 2020

Если кому-то нужно сделать то же самое, вам нужно знать 2 вещи:

  1. buddypress хранить изображения в файлах загрузки / аватары / {user_id}
  2. buddypress выбрать изображения на основе Файл 'last_modification' meta

Так что если вы не знаете, как использовать функцию bp_core_avatar_handle_upload, вот мое решение: (мой сценарий должен принимать только квадратное изображение, как показано 'if ($) file_meta [0] == $ file_meta [1]) ', возьмите его, если нужно)

$image_full;
$file = $_FILES['file'];
$file_path = $file['tmp_name'];
$file_meta = getimagesize($file_path);

if($file_meta !== false){

  if($file_meta[0] == $file_meta[1]){
    // use 'avatar-bp....' instead of default wp_hash($file['name'].time())
    // to avoid having multiple image for each user
    $full_filename  = 'avatar-bpfull.'  . $FILE_EXTENSION;
    $thumb_filename = 'avatar-bpthumb.' . $FILE_EXTENSION;
    $target_dir = wp_get_upload_dir()['basedir'].'/avatars/'.$user_id.'/';

    $source = imagecreatefromstring(file_get_contents($file_path)); // La photo est la source

    $full = imagecreatetruecolor(150, 150);
    $thumb = imagecreatetruecolor(80, 80);

    imagecopyresampled($full, $source, 0, 0, 0, 0, imagesx($full), imagesy($full), imagesx($source), imagesy($source));
    imagecopyresampled($thumb, $source, 0, 0, 0, 0, imagesx($thumb), imagesy($thumb), imagesx($source), imagesy($source));

    if(imagejpeg($thumb, $target_dir.$thumb_filename.'jpeg') && imagejpeg($full, $target_dir.$full_filename.'jpeg')){
      return "The file has been uploaded.";
    } else {
      return "Sorry, there was an error uploading your file.";
    }
  }else{
    return 'not a squared image';
  }
}else{
  return 'not an image';
}
...