[WordPress] 한글파일(hwp) 등 지원하지 않는 확장자 업로드 가능하게 하기 (custom extentions)

동기

워드프레스에는 기본 확장자로 지정된 파일 외에는 업로드를 막아놓았다. 예를 들어 한국에서 오질나게 쓰이는 아래아 한글 파일(.hwp)을 업로드하려고 하면 에러가 뜬다. 이를 가능하게 하기 위한 과정이다. 간단하다.

전체 코드

역시 선 전체 코드가 제 맛이다. 아래 내용을 functions.php 파일에 추가하고 관리자 창을 새로 고침한 후 업로드 하려고 하면 잘 작동되는 것을 볼 수 있다.

// 추가시킬 확장자와 mime type 작성
$array_filetypes = array(
  'hwp' => 'application/hangul',
  'svg' => 'image/svg+xml'
);

// 업로드 종류 추가하기
function  custom_upload_mimes($mimes)
{
  global $array_filetypes;
  $mimes = array_merge($mimes, $array_filetypes);
  return $mimes;
}

// mime type 설정
function fix_mime_type($data = null, $file = null, $filename = null, $mimes = null)
{
  $ext = isset($data['ext']) ? $data['ext'] : '';

  // 만약 확장자(ext)가 값으로 넘어오지 않았을 경우
  // $filename에서 확장자를 직접 가져온다.
  if (strlen($ext) < 1) {
    $exploded = explode('.', $filename);
    $ext      = strtolower(end($exploded));
  }

  // $data의 정보를 적절하게 수정하여 리턴한다.
  global $array_filetypes;
  foreach ($array_filetypes as $arr_ext => $arr_type) {
    if ($ext === $arr_ext) {
      $data['type'] = $arr_type;
      $data['ext'] = $arr_ext;
      break;
    }
  }
  return $data;
}

// 액션, 필터에 작성한 함수를 추가
add_action('upload_mimes', 'custom_upload_mimes', 99);
add_filter('wp_check_filetype_and_ext', 'fix_mime_type', 75, 4);


설명

기존에 쓰던, mime_types 필터를 활용하는 방법은 더이상 작동이 되지 않았다. 언제부터, 왜 안되는지 모르겠다. 그래서 더 구글링을 하니 upload_mimes 액선 후크와 wp_check_filetype_and_ext 필터를 활용하는 방법이 있었다. 그래서 그대로 갖고 와서 코드 중복을 줄이고 파일 확장자를 추가하거나 삭제하기 용이하도록 전역 변수 ($array_filetypes)를 두었다. (구글링했었던 자료는 아주 예전에 찾은 거라 링크를 다시 찾을 수 없어서 알려드리지 못한다.)

전역 변수를 사용하면 안되는 금기는 잘 알고 있지만 유지보수 따위는 생각하지 않고 작성했다. (사실 php에서 전역 변수를 사용하지 않고 공유 데이터를 관리할 만한 방법을 모른다.) 또한 upload_mimes 액선 후크와 wp_check_filetype_and_ext 필터가 구체적으로 언제 어떻게 작동하는 지도 모른다. 그냥 쓰자. 하하.

현재 2020년 1월 10일, 5.3.2 버전에서는 문제 없이 잘 작동하나, 이 또한 언제 막힐지 모르는 노릇이긴 하다.


참고

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Scroll to top