Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Загружаем файл по URL, перемещаем в папку uploads,
- * привязываем файл к юзеру, обновляем мету
- *
- * @param string $url URL картинки.
- * @param integer $user_id ID пользователя.
- */
- function ms_auth_set_avatar( $url, $user_id ) {
- // Если у юзера уже есть аватар - ничего не делаем.
- if ( (boolean) get_user_meta( $user_id, 'user-avatar', true ) ) {
- return;
- }
- if ( ! function_exists( 'wp_handle_upload' ) ) {
- /** @noinspection PhpIncludeInspection */
- require_once( ABSPATH . 'wp-admin/includes/file.php' );
- }
- if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) {
- /** @noinspection PhpIncludeInspection */
- include( ABSPATH . 'wp-admin/includes/image.php' );
- }
- // загрузка файла во временную директорию
- $temp_file = download_url( $url, 5 );
- // Получить mime-type временного файла.
- $mime_type = mime_content_type( $temp_file );
- // Получить расширение фафла по его mime-type.
- $ext = strtok( array_search( $mime_type, get_allowed_mime_types() ), '|' );
- // Если не смогли скачать файл во временную папку.
- if ( is_wp_error( $temp_file ) ) {
- return;
- }
- // массив аналогичный массиву $_FILE as seen in PHP file uploads
- $file = array(
- 'name' => basename( $ext ? ( str_replace( '.tmp', '', $temp_file ) . ".$ext" ) : $temp_file ),
- 'type' => $mime_type,
- 'tmp_name' => $temp_file,
- 'error' => 0,
- 'size' => filesize( $temp_file ),
- );
- // Переопределяем конфиг загрузки.
- $overrides = array(
- 'test_form' => false,
- 'test_size' => true,
- 'test_upload' => true,
- );
- // перемещение временного файла в папку загрузки.
- $file_data = wp_handle_sideload( $file, $overrides );
- // Удалить временный файл.
- @unlink( $temp_file );
- // Если не удалось переместить файл в uploads.
- if ( ! empty( $results['error'] ) ) {
- return;
- }
- // информация по текущему пользователю.
- $user_info = get_userdata( $user_id );
- // настройки аттачмента
- $attachment = array(
- 'guid' => ! empty( $file_data['url'] ) ? $file_data['url'] : '',
- 'post_mime_type' => ! empty( $file_data['type'] ) ? $file_data['type'] : '',
- 'post_title' => $user_info->display_name,
- 'post_content' => '',
- 'post_status' => 'inherit',
- 'post_author' => $user_info->ID,
- 'post_parent' => $user_info->ID,
- );
- // Размер файла изменяется до указанных параметров.
- $image = wp_get_image_editor( $file_data['file'] );
- // Если не удалось получить объект WP_Image_Editor.
- if ( is_wp_error( $image ) ) {
- return;
- }
- // Сжимаем изображение.
- $image->set_quality( 85 );
- // Изменяем размер изображения с последующим кропом.
- $image->resize( 640, 640, true );
- // cохранение изображения с указанием его mime-type
- $image->save( $file_data['file'], $attachment['post_mime_type'] );
- // Привязываем аттачмент к профилю
- $attachment_id = wp_insert_attachment( $attachment, $file_data['file'], $user_id );
- // генерация миниатюр аттачмента
- $attach_data = wp_generate_attachment_metadata( $attachment_id, $file_data['file'] );
- // обновление метаданных аттачмента
- wp_update_attachment_metadata( $attachment_id, $attach_data );
- // обновление ссылки на файл аватара
- update_user_meta( $user_id, 'user-avatar', $file_data['url'] );
- }
Add Comment
Please, Sign In to add comment