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

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

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

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Q&A

2回答

914閲覧

Wordpress でアップロードした画像をサイズに応じて名前を変えたい

sanokoyuki

総合スコア12

WordPress

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

0グッド

1クリップ

投稿2018/04/18 14:57

前提・実現したいこと

WordPress で image.jpg という画像をアップロードすると
image.jpg の他に

  • image-150x150.jpg(サムネイル)
  • image-300x225.jpg(中)
  • image-1024x768.jpg(大)

という画像が作成されます。

これを

  • image-thumbnail.jpg
  • image-medium.jpg
  • image-large.jpg

というように作成したいと思います。

発生している問題・エラーメッセージ

sanitize_file_name で…というのを見かけてやってみたのですが、ファイル名そのもの(この場合は image )を変更はできるものの、ファイル名の後の部分(この場合は thumbnail や large 等)を変更する方法がわかりません。
add_image_size() 等で追加する場合はそれに準じたものが、"-" 以降に入る…というのが理想ですが、こういうことは不可能でしょうか?

該当のソースコード

以下は http://stackoverflow.com/questions/3259696 からの引用です。
ファイル名を MD5 変換した文字に変換するというものでした。

function so_3261107_hash_filename( $filename ) { $info = pathinfo( $filename ); $ext = empty( $info['extension'] ) ? '' : '.' . $info['extension']; $name = basename( $filename, $ext ); return md5( $name ) . $ext; } add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );

teratil にも似たような質問があったのですが、やはり少し違うようです。

試したこと

以前 WordPress のフォーラム で質問して格闘していたのですが解決せず、放置しておりました。
一応これをいじってみたのですが、行き詰ってしまいました…。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

投稿2018/04/18 22:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sanokoyuki

2018/04/19 14:34

Space-Monkey さま 素敵なプラグインのご紹介ありがとうございます。 これって WordPress のプラグイン検索では出てこないんですね。 テストに時間がかかってしまいお返事が遅くなりました。 このプラグインを導入して、以下の操作をしてみました。 1. image.jpg をアップロード 2. image.jpg を回転 → 確定 すると image.jpg の他に image-e0123456789012.jpg ( e 以降の 13 桁の数字はランダムな数字)というファイルができていました(これは WordPress の仕様でしょうか?)。 image.jpg の画像については -thumbnail.jpg 、-medium.jpg 、-large.jpg ができたのですが、image-e0123456789012.jpg については WxH 形式でファイル名が付いていました。 Regenerate Thumbnails を実行すると WxH 形式のファイルは消えずに(残念…)、期待通りの -thumbnail.jpg 、-medium.jpg 、-large.jpg ができました。 回転した時に余計なファイルができるのと WxH 形式のファイルができるのが残念ですが、もう少し頑張ってみようと思います。 ありがとうございました。 また修正について情報がありましたらお願いいたします。
sanokoyuki

2018/04/19 14:44

作者の方のホームページはなくなっちゃってたんですね…残念…
退会済みユーザー

退会済みユーザー

2018/04/19 22:35

WordPressに登録されてないものはWordPressのサイトで検索しても出てきません。 管理画面でファイルを編集した場合際にランダムな文字列が付与されたファイルが出来るのはWordPressの仕様です。 対策はファイルを上書きする方法を考えるかアップロード前に回転しておくかの二択だと思いますが、やりたいことは 『Wordpress でアップロードした画像をサイズに応じて名前を変えたい』 なので本件とは別問題です。
sanokoyuki

2018/04/20 03:32

Space-Monkey さま おっしゃる通りですね。 また機会がありましたらよろしくお願いいたします。 もう少しがんばって解決した時点でまたご報告させていただきます。 ありがとうございました。
guest

0

ざっくり見ただけなので未検証です。


WordPress の画像操作は WP_Image_Editor クラスで行われています。(WP3.5以降)

で、GDImagick が用意されていますが、どちらも同じ方法で名前を取得しています。
wp-includes/class-wp-image-editor-gd.php#L384
wp-includes/class-wp-image-editor-imagick.php#L619

PHP

1$filename = $this->generate_filename( null, null, $extension );

generate_filename() 内で get_suffix() を使っているため、下記パターンに固定されます。

PHP

1return "{$this->size['width']}x{$this->size['height']}";

なので、たぶん、WP_Image_Editor クラスを自作して(既存の物をコピーとか継承とかして)置き換えることが出来るとは思います。

GD / Imagick のどれを使うかは下記 WP_Image_Editor クラス取得関数内の _wp_image_editor_choose関数で分岐されています。

【wp_get_image_editor() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/wp_get_image_editor/

【media.php in tags/4.9/src/wp-includes – WordPress Trac】
https://core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/media.php#L2900

PHP

1$implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) );

と、ここで画像操作用クラスを差し込めそうなので、試してみるとか。(未検証です)

PHP

1add_filter( 'wp_image_editors', 'change_graphic_lib' ); 2function change_graphic_lib( $array ) { 3 require_once TEMPLATEPATH.'/class-my-wp-image-editor-imagick.php';/* ← とりあえずテンプレートフォルダにおいてみた(プラグインにするならプラグインのパスにどうぞ) */ 4 return array( 'MY_WP_Image_Editor_Imagick',/* ← コピーか継承して作った自作のクラス*/ 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ); 5}

【wp_image_editors | Hook | WordPress Developer Resources】
https://developer.wordpress.org/reference/hooks/wp_image_editors-9/

投稿2018/04/18 16:36

kei344

総合スコア69407

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

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

sanokoyuki

2018/04/19 14:40

kei344 さま ご回答ありがとうございます。 WordPress を表面だけ触るのと中の方まで触るのとでは奥深さが違うなぁと感じさせられました。 気軽にできるとは思っていませんでしたが、書かれたことを理解するだけでも結構大変そうですが頑張ってみようと思います。 正直どこをどういじればいいのかわかりませんでしたので、大変参考になりました。 本当にありがとうございました。 追加の情報等ありましたら、またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問