Guest User

Untitled

a guest
Dec 18th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.83 KB | None | 0 0
  1. <?php
  2. /**
  3. * Загружаем файл по URL, перемещаем в папку uploads,
  4. * привязываем файл к юзеру, обновляем мету
  5. *
  6. * @param string $url URL картинки.
  7. * @param integer $user_id ID пользователя.
  8. */
  9. function ms_auth_set_avatar( $url, $user_id ) {
  10.  
  11. // Если у юзера уже есть аватар - ничего не делаем.
  12. if ( (boolean) get_user_meta( $user_id, 'user-avatar', true ) ) {
  13. return;
  14. }
  15.  
  16. if ( ! function_exists( 'wp_handle_upload' ) ) {
  17. /** @noinspection PhpIncludeInspection */
  18. require_once( ABSPATH . 'wp-admin/includes/file.php' );
  19. }
  20.  
  21. if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) {
  22. /** @noinspection PhpIncludeInspection */
  23. include( ABSPATH . 'wp-admin/includes/image.php' );
  24. }
  25.  
  26. // загрузка файла во временную директорию
  27. $temp_file = download_url( $url, 5 );
  28.  
  29. // Получить mime-type временного файла.
  30. $mime_type = mime_content_type( $temp_file );
  31.  
  32. // Получить расширение фафла по его mime-type.
  33. $ext = strtok( array_search( $mime_type, get_allowed_mime_types() ), '|' );
  34.  
  35. // Если не смогли скачать файл во временную папку.
  36. if ( is_wp_error( $temp_file ) ) {
  37. return;
  38. }
  39.  
  40. // массив аналогичный массиву $_FILE as seen in PHP file uploads
  41. $file = array(
  42. 'name' => basename( $ext ? ( str_replace( '.tmp', '', $temp_file ) . ".$ext" ) : $temp_file ),
  43. 'type' => $mime_type,
  44. 'tmp_name' => $temp_file,
  45. 'error' => 0,
  46. 'size' => filesize( $temp_file ),
  47. );
  48.  
  49. // Переопределяем конфиг загрузки.
  50. $overrides = array(
  51. 'test_form' => false,
  52. 'test_size' => true,
  53. 'test_upload' => true,
  54. );
  55.  
  56. // перемещение временного файла в папку загрузки.
  57. $file_data = wp_handle_sideload( $file, $overrides );
  58.  
  59. // Удалить временный файл.
  60. @unlink( $temp_file );
  61.  
  62. // Если не удалось переместить файл в uploads.
  63. if ( ! empty( $results['error'] ) ) {
  64. return;
  65. }
  66.  
  67. // информация по текущему пользователю.
  68. $user_info = get_userdata( $user_id );
  69.  
  70. // настройки аттачмента
  71. $attachment = array(
  72. 'guid' => ! empty( $file_data['url'] ) ? $file_data['url'] : '',
  73. 'post_mime_type' => ! empty( $file_data['type'] ) ? $file_data['type'] : '',
  74. 'post_title' => $user_info->display_name,
  75. 'post_content' => '',
  76. 'post_status' => 'inherit',
  77. 'post_author' => $user_info->ID,
  78. 'post_parent' => $user_info->ID,
  79. );
  80.  
  81. // Размер файла изменяется до указанных параметров.
  82. $image = wp_get_image_editor( $file_data['file'] );
  83.  
  84. // Если не удалось получить объект WP_Image_Editor.
  85. if ( is_wp_error( $image ) ) {
  86. return;
  87. }
  88.  
  89. // Сжимаем изображение.
  90. $image->set_quality( 85 );
  91.  
  92. // Изменяем размер изображения с последующим кропом.
  93. $image->resize( 640, 640, true );
  94.  
  95. // cохранение изображения с указанием его mime-type
  96. $image->save( $file_data['file'], $attachment['post_mime_type'] );
  97.  
  98. // Привязываем аттачмент к профилю
  99. $attachment_id = wp_insert_attachment( $attachment, $file_data['file'], $user_id );
  100.  
  101. // генерация миниатюр аттачмента
  102. $attach_data = wp_generate_attachment_metadata( $attachment_id, $file_data['file'] );
  103.  
  104. // обновление метаданных аттачмента
  105. wp_update_attachment_metadata( $attachment_id, $attach_data );
  106.  
  107. // обновление ссылки на файл аватара
  108. update_user_meta( $user_id, 'user-avatar', $file_data['url'] );
  109. }
Add Comment
Please, Sign In to add comment