【WordPress】メディアアップローダーに独自のファイル種別(SVG・JSONなど)を許可する方法

【WordPress】メディアアップローダーに独自のファイル種別(SVG・JSONなど)を許可する方法 WordPress

WordPressのデフォルト設定では、SVGやJSONといった一部のファイル形式はセキュリティ上の理由からアップロードできない仕様になっています。しかし、開発や運用の現場ではこれらのファイルを扱う必要があるケースも少なくありません。この記事では、WordPressのメディアアップローダーにSVGやJSONなどの独自のファイル種別を許可する方法を解説します。

アップロードを許可するファイル拡張子を追加する

まずは、テーマの functions.php に以下のコードを追加して、SVGやJSONなどのファイルをアップロード可能にします。


function custom_mime_types($mimes) {
  $mimes['svg']  = 'image/svg+xml';
  $mimes['json'] = 'application/json';
  return $mimes;
}
add_filter('upload_mimes', 'custom_mime_types');

このコードは、WordPressのupload_mimesフィルターを使用して、許可するMIMEタイプ(MIME種類)にSVGとJSONを追加しています。

SVGファイルに関する注意点

SVGはXMLベースで記述されており、JavaScriptを埋め込むことも可能なため、セキュリティリスクが存在します。信頼できるユーザーのみにアップロードを許可するか、SVGの内容を検査するような対策を組み合わせることが推奨されます。

より安全にSVGを扱いたい場合は、次のように管理者のみにSVGのアップロードを許可することもできます。


function restrict_svg_upload_to_admin($mimes) {
  if (current_user_can('administrator')) {
    $mimes['svg'] = 'image/svg+xml';
  }
  return $mimes;
}
add_filter('upload_mimes', 'restrict_svg_upload_to_admin');

アップロード時のエラーを防ぐための設定

WordPressバージョンやサーバー環境によっては、MIMEタイプのチェックによりエラーが出る場合があります。以下のようにwp_check_filetype_and_extをカスタマイズして、SVGファイルを正しく処理できるようにします。


function fix_svg_mime_type($data, $file, $filename, $mimes) {
  $ext = pathinfo($filename, PATHINFO_EXTENSION);
  if ($ext === 'svg') {
    $data['ext']  = 'svg';
    $data['type'] = 'image/svg+xml';
  }
  return $data;
}
add_filter('wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 4);

まとめ

WordPressでは、デフォルトで制限されているSVGやJSONなどのファイル形式も、フィルターを利用すれば簡単にアップロード可能にすることができます。ただし、SVGについてはセキュリティ上のリスクもあるため、運用方針に合わせた制限や検証を導入することが重要です。

開発案件やカスタムテーマ制作において、柔軟なメディア管理を行うためにぜひ活用してください。