質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3752閲覧

WordPressでファイル名にドット(.)を含むファイルをアップロードすると勝手に末尾にアンダーバー(_)がつく

senooken

総合スコア9

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/04/08 12:43

編集2018/04/08 13:35

問題

WordPress 4.9.5 (Lightning テーマ)を使っています。

[メディア]から[20180408.slide.pdf]のような名前のファイルをアップロードすると,勝手に[20180408.slide_.pdf]のように末尾にアンダーバー(_)がついてしまいます。

1個目のピリオドの後に,2-5文字ある場合勝手にアンダーバーがつくようです([x.xx.pdf]〜[x.xxxxx.pdf]はアップロード後に_がつく)。

1個目のピリオドのあとが,1文字,または6文字以上の場合は大丈夫でした([x.x.pdf]〜[x.xxxxxx.pdf]はアップロード後に_がつかない)。

まず,他の方の環境で再現するかどうか教えていただきたいです。そして,末尾に_がつかないようにするいい対処方法はないでしょうか?

現状の対処

WordPressのメディアは[添付ファイルのページ]ができる都合,グローバルな名前空間なので,先頭にYYYYMMDD.というプレフィクスを付けて(構造体のように)階層を識別したいのです。

区切り子に.ではなく,_を使えばいいかもしれませんが,_や-は元ファイルに使われていることがよくあるので避けたいのです。

現状は,アップロード後にwp-content/uploadsにアップロードされたファイルを手動でリネームして,DBもリネームして対応しています。

おそらく,アップロード時のメディアのファイル名にsanitize処理が入っていて,こうなるのだと思います。
add_actionやadd_filterで何かうまい具合に対応できるなら,それでもかまいません。

どうぞよろしくお願いします。

追記

WordPressデフォルトテーマのTwentySevenTeenでも再現しました。なお,念のため,全プラグインを停止してみましたが,結果に違いはなく,末尾に_がつきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/08 12:55

別のテーマでも確認してみよう。そうすれば何が問題かは見えてくるかもしれない
senooken

2018/04/08 13:00 編集

回答ありがとうございます。WordPressデフォルトテーマのTwentySevenTeenでも再現しました。なお,念のため,全プラグインを停止してみましたが,結果に違いはなく,末尾に_がつきました。
guest

回答1

0

ベストアンサー

超適当

function remove_underscore( $filename, $filename_raw ) { if( strpos( $filename, '_') !== false && mb_substr_count( $filename, '.') == '2' ){ $filename = str_replace( '_', '', $filename ); } return $filename; } add_filter( 'sanitize_file_name', 'remove_underscore', 10, 2 );

投稿2018/04/08 13:33

編集2018/04/08 13:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

senooken

2018/04/08 13:43

ありがとうございます。このコードをpluginにして動作確認したところ,ひとまず解決しました。 このような感じでフィルターをかませば,ちょっとした問題なら対応できそうですね。PHPとWordPressをもっと勉強して次からは自力で解決できるようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問