Загружаем файлы пользователя из фронтенда

Существует множество случаев, когда необходимо разрешить пользователям из фронтенда, однако суть здесь именно в том, чтобы убедиться, что файл был загружен и сохранен в медиабиблиотеку WordPress корректно. Вы свободно можете использовать стандартные функции PHP для обработки загрузки, а затем и сохранения файлов где угодно, однако тогда вы не сможете воспользоваться преимуществами системы вложений, используемой WordPress. Изображение, которое было корректно загружено, например, будет существовать в различных доступных размерах, наряду с наличием мета-данных, таких как заголовок, описание и название. Также у вас будет возможность редактирования всего этого из медиа библиотеки вашей административной панели WordPress.

Этот сниппет будет обрабатывать загрузки и сохранять загруженные файлы в медиабиблиотеку должным образом. Все, что нужно, это пропустить загруженный файл через функцию — все загруженные файлы будут сохраняться в массиве $_FILES, поэтому вам просто нужно прогнать все через цикл и оттуда загрузить каждый файл. Помните, что если необходимо, чтобы ваша форма умела обрабатывать загрузку файлов, ей необходимо добавить enctype=»multipart/form-data» к тегу < form>.

function upload_user_file( $file = array() ) {
        require_once( ABSPATH . 'wp-admin/includes/admin.php' );
      $file_return = wp_handle_upload( $file, array('test_form' => false ) );
      if( isset( $file_return['error'] ) || isset( $file_return['upload_error_handler'] ) ) {
          return false;
      } else {
          $filename = $file_return['file'];
          $attachment = array(
              'post_mime_type' => $file_return['type'],
              'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
              'post_content' => '',
              'post_status' => 'inherit',
              'guid' => $file_return['url']
          );
          $attachment_id = wp_insert_attachment( $attachment, $file_return['url'] );
          require_once(ABSPATH . 'wp-admin/includes/image.php');
          $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
          wp_update_attachment_metadata( $attachment_id, $attachment_data );
          if( 0 < intval( $attachment_id ) ) {
                return $attachment_id;
          }
      }
      return false;
}
if( ! empty( $_FILES ) ) {
  foreach( $_FILES as $file ) {
    if( is_array( $file ) ) {
      $attachment_id = upload_user_file( $file );
    }
  }
}

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 3.7/5 (3 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top