LoginSignup
4
0

More than 5 years have passed since last update.

WordPressでメディアにcssをアップロードできるようにする

Posted at

動作確認バージョン

WordPress 4.9.9
WordPress 5.0.3

ググってもできなかったケース

この手の問題はやはりどこでも発生するようで、
ググればいろいろ情報出てくるんだけど、
その通りやってもうまくいかない。

functions.php
function custom_mime_types( $mimes ) {
    $mimes['css'] = 'text/css';
    return $mimes;
}
add_filter( 'upload_mimes', 'custom_mime_types' );

こういうやつ。

調べてみると、WordPressで取り扱う MIME の情報には、
もとからちゃんと text/css が入ってるようなので、
そもそもこれやらんでもアップできてしかるべきじゃね?という状況だった。

落とし穴は MIME にあった

いったいどこでエラー吐いてるんだ、と思って
wp-includes の中まで順番に追いかけていくと、
ようやく問題の条件分岐を発見し、
そこで使われてる変数の状態をdumpして愕然。

css 上げてるのに MIME が text/plain になってやがる

WordPress管理画面のメディアのアップロードの処理としては、
wp-admin/admin-ajax.php から始まり、
最終的に wp-includes/functions.php の wp_check_filetype_and_ext() 内で
「期待される MIME とアップされた MIME が違うっぽい」と判断され、
セキュリティ的にアップさせられないよ! というエラーを吐いていた。

動いたパターン

そんなわけで、「拡張子が css だけど MIME は text/plain やで」と
明示的に教えてやることで無事にアップロードできるようになった。

functions.php
function custom_mime_types( $mimes ) {
    $mimes['css'] = 'text/plain';
    return $mimes;
}
add_filter( 'upload_mimes', 'custom_mime_types' );

これで解決。

今回ハマったのは、css という ASCII なデータゆえ、なのかな・・。
POST時の MIME が期待の通りに送られてないっぽい感じはあるけど、
それがフォーム側の問題なのか、ブラウザの挙動なのか、Webサーバの設定なのか、
ちょっと追いかけきれてないけど、まぁ解決したのでよしとする。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0