【WordPress】お問い合わせフォーム(MW WP Form)で画像・ファイルが送れない、確認画面で表示されない時の解決方法
kazuki
こんにちはkazukiです。
wordpressサイトを作る際に、お問い合わせページを作ることは良くあるかと思いますが、その際にファイル(画像)添付機能をつけたのに動かない(アップロードされない)ということがありました。
今回はこのとこについて勉強になったことをメモしておきたいと思います。
どんな状況になったのか
まず、実装したメールフォームの流れは
「入力」→「確認」→「完了」
とよくあるもので、使用したプラグインは「MW WP Form」です。
次にどんな状況なのかまとめます。
- 入力画面にてファイル(画像)のフォームにデータは紐付けはできる
- データを選択すればバリデートも回避できている
- 確認画面に移ると、ファイルの「アップロードしました」や画像が無い
- そのまま送信できるが、届いたメールにファイルは無い。。。
こんな感じで確認画面にいくと消えているという感じになっていました。
試したこと
とりあえず以下のことを試してみました。
- バッティングしてそうなプラグインを一時停止してみる
- うまくいかないフォームを消し、新しく作る
- 簡易的なフォームにしてみる(項目を画像だけにする) etc…
しかし、これらをやってもうまくはいきませんでした。
解決した方法・原因
最終的に解決したのですが、原因はwordpressのアップロード先の指定方法に問題がありました。
今回のサイトでは画像アップロード先を変更していました。
通常、特に変更を加えていなければアップロード先は、
wp-content/uploads/に格納されていきます。
しかし今回は
/imgages/uploads/に格納されていました。
これはoptions.phpにて編集すると変更できます。
wordpress管理画面にログイン後、
https://○○○○○○○○/wp-admin/options.php
このようにURLに直接options.phpを入力すると、「すべての設定」というページに移動します。
ここをスクロールしていくと「upload_path」と「upload_url_path」という項目があります。
上の画像でもあるように原因は、ここのupload_url_pathの指定方法にありました。
upload_url_pathのルートパス指定がいけなかったようです。
upload_url_pathをルートパスではなく絶対パスに書き換えることで解決できました。
upload_url_pathがルートパスでもメディアなどは確認できますし、個別ページでも表示してくれます。(サーバーなどの環境により異なるようです)
しかし、MW WP Formのフォームで画像をアップロードする場合は、ルートパスではダメで絶対パスで指定あげないといけないようです。
補足
ここの補足は完全にメモレベルなので、そんなのあるかもな〜くらいで思っていていただくと助かるのですが、hetemlなどのサーバーでwordpressディレクトリの外、1つ上の階層などにupload画像を格納したい場合は、upload_url_pathにフルパスを記載しないと参照してくれません。
この場合は、まだどうなるのか検証していませんが、注意したいと思います。また、検証できたら追記したいと思います。
今回のこの壁で、かなり時間を消費しましたが、いい勉強になりました。