- ベストアンサー
WordPressの質問(q10054200):コメントにハートマークをつけていいねボタンをカウントする方法
- WordPressの質問(q10054200)について、コメントにハートマークをつけていいねボタンをカウントする方法がわからない。
- functions.phpにfunction set_post_views_days()と3,7日間のカウンターをまとめているが、それと合体させるべきか、別に実装すべきか悩んでいる。
- カスタムフィールド(view_good_count)でカウントし、Font Awesomeのハートマークを使用してボタンカウントを実装する予定。しかし、実装方法に関して悩んでいる。
- みんなの回答 (29)
- 専門家の回答
質問者が選んだベストアンサー
【お問い合わせ その9】 パーマリンクはカスタム構造にしなくても、 固定ページのパーマリンクを「contact」にしておくだけで大丈夫そうです。 私の環境では、入力画面以降の画面に遷移できています。 ただ、入力画面の内容が確認画面に反映されていないのと、 そのためかメール送信で以下のエラーになっています。 ~~~~ Warning: mb_send_mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in contact-sendmail.php on line 32 ~~~~ 質問者さまも同じエラーでしょうか。 エラーの調査はまだしていませんが、 エラーの際にindex.phpに遷移する方法を考えてみます。 コメントアウトについてはPHPのコードにするといいです。 <?php //送信時のデータ形式を指定する?>
その他の回答 (28)
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その8】 プラグイン「Formzu WP」 これはどうも外部のサーバーを経由するもののようですね。 試すための準備がいろいろと必要そうなのと、 外部のPHPコードは見れないと思いますので断念しました。 他のものですがよく使われてそうな無料プラグイン「Contact Form 7」 実装は簡単にできたのですが、メール送信に失敗してしまいます。 すんなり動けば細かく見ようと思っていたのですが断念しました。 ただ、<form>タグの送信先が自分自身っぽいので、 質問者さまが自作で参考にされているサイトのものと似た仕組みのような気がします。 そう言うわけで、そのまま参考サイトの方法ですすめていいように思います。
お礼
参考サイトのものから件名を追加してテストしてみたのですが、送信の際にエラーが発生してしまいました。 メールの送信もできていません。 初歩の部分からお聞きすることになってしまい申し訳ないのですが、パーマリンクの設定部分でつまずいております。 コード作者はカスタム構造にSEO面を考慮して意図的に変更しているようですが、パーマリンクは現状のままでお問い合わせフォームを作成するのが理想です。 index.phpのエラー文を表示させたいのですが、どのようなコードにすればよいでしょうか… もう1点お聞きしたいのですが、phpファイルのコメントアウトについてになります。 contact-input.phpでメモを追加したところ画面に表示されてしまいます。 どのようにすれば隠せますでしょうか? ※該当ファイル https://wandbox.org/permlink/9Gk6uGuN171qQ9gv ※該当コード function display_maintenance() { echo <<<maintenance <hr> ただいまメンテナンス中です。<br> しばらく時間をおいてアクセスしてください。 <hr> maintenance; } _____________________________________________________________ 参考サイトのものでは カスタム構造→/%category%/%postname%/ とする前提で書かれておりました。 現在は日付と投稿名 http://www.last.cfbx.jp/2022/11/15/sample-post/ となっているため、どちらかの修正が必要になってしまいます。
補足
試していただいてありがとうございます。 Formzu WPはアンケート機能なども兼ね備えているようなのでJavascriptで作られている機能がありそうですね。 参考サイトのものでデザインや枠を追加したものを作成したのですが、サイトで試していないので試し終わったあとでわからない部分をdell_okさんに質問する予定です。
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その7】 ・define() - 名前を指定して定数を定義する についてお聞きしたいのですが、これは具体的にどの部分に作用しているのでしょうか? 定義されている定数名はWEBMST_NAMEとWEBMST_MAILですね。 それぞれをテキストエディタで検索していただければ使っている箇所がわかると思います。 どちらも、contact-sendmail.phpでのみ使われているようです。 本文に含める文言や送り主の名前としてのサイト名であったり、 送信元ととして、または、自分宛用の送信先のメールアドレスだったりです。 ・enctype="multipart/form-data" についてお聞きしたいのですが、何故指定したのか知りたいです。 なぜなのかは私にはわかりません。 ファイルを送信するわけではないので、 なくてもよさそうな気はしますね。 ・関数の値を使いまわしたい時に使用するのでしょうか? おそらくそうです。 私はお問い合わせフォームでは使いません。 必要なものは改めて送信するようにしているので、 現在参考にされているサイトのような作りにしてます。 セッションを使うと送信の手間が省けるので便利なのかも知れません。 なぜ別々の方法があって人によって違うのか、 それぞれの違いやメリットやデメリットを説明できるほど、 私には知識がありません。
お礼
こちらが最新の回答になります。 現在の質問期限が切れてしまった為、新たに質問させていただきました。下記のリンクからお願いします。 https://okwave.jp/qa/q10072766.html
補足
回答ありがとうございます。 セッションはセキュリティかもしれないです。 テラテイルで自作されている方のコードをみるとSessionで一括管理しているようでした。 余計なことは考えず参考サイトのまま実行してみます。
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その6】 私から言っておいてすみませんが、 セキュリティのことばかりを気にしても始まりません。 お問い合わせの画面とメール送信を作成するのを、 第一の目標にしましょう。 私はセキュリティについては詳しくないため、 アドバイスできません。 それらについては調べていただいて、 それが組み込めるものであれば組み込む、 と言う方針でいいのではないでしょうか。 お問い合わせの画面とメール送信ができたとして、 セキュリティの組み込みに難があれば、 別の作り方でやり直しになるかも知れませんが、 それも勉強だと思います。 いろいろと調べられておられるようですが、 どこのサイトを参考に作るかは決められましたか。 無料のプラグインもあるようですが、 質問者さまは有料無料と言うより、 とにかく自作されたい考えのように感じています。 私は、とりあえず、最初の参考サイトのまま、 送信先のURL問題を調べてみようと思います。 無料のプラグインがどうしているかを見れば、 なにかヒントがあるかと思っています。
お礼
お問い合わせページの作成が遅れてしまい申し訳ありません。 参考サイトのコードをもとに調べてみたのですが、複数分からない点がありました。 アドバイスお願い致します。 contact-check.phpは独自で作られたようで詳しくは分かりませんでした。 今回作成しているお問い合わせページは固定ページのテンプレートとして作成するためファイルの階層が浅くなることはなさそうです。 ※ファイル一覧 https://wandbox.org/permlink/dC7xnqaoaKTkyOSq contact-index.php define() - 名前を指定して定数を定義する についてお聞きしたいのですが、これは具体的にどの部分に作用しているのでしょうか? ※16行目 contact-input.php //送信時のデータ形式を指定する enctype="multipart/form-data" についてお聞きしたいのですが、何故指定したのか知りたいです。 ※20行目 上記の2点とは別にお聞きしたいことがあります。確認ページと送信ページでisset()関数を利用してお問い合わせページを作られていることがあるのですが、 今回参考にした方のお問い合わせページは使用されていないようです。 // セッション開始 session_start(); を使用する意味として値の保存と書いてあったのですが、関数の値を使いまわしたい時に使用するのでしょうか? 今回はファイル全体の意味を理解するために調べてみましたので、デザインやセキュリティなどは後ほど確認していく予定です。 ※お問い合わせページデザイン https://ara-web.net/blog/wordpress/post-3683/ ※お問い合わせフォーム参考サイト https://nw.myds.me/wprdpress-ad/contact_us/ https://teratail.com/questions/71592
補足
A.アドバイスありがとうございます。セキュリティは二の次で作成するのを目標にいたします。 作成してセキュリティを適応するように考えてみます。 機能面でいうと下記のサイトが参考になりそうです。 https://ara-web.net/blog/wordpress/post-3683/ プラグインはFormzu WPですが、大手になるので構造が複雑になっていてコードを参考にできない気がしています。
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その5】 ・URLにならないという意味がよく理解できていないのですが 例えば、以下のようなURLではアクセスできない、と言う意味です。 https://www.last.cfbx.jp/form.php https://www.last.cfbx.jp/confirm.php これだとエラーとして、index.phpに飛ばされると思います。 それよりは、テンプレートを使うことで、 以下のようなURLでアクセスできそう、な気がします。 https://www.last.cfbx.jp/お問い合わせ https://www.last.cfbx.jp/お問い合わせ確認 ・ファイル階層が浅いので危険ということでしょうか? そうですね。 例えば、コメントの送信先のwp-comments-post.phpですが、 ここには以下のようなURLでアクセスされています。 https://www.last.cfbx.jp/wp-comments-post.php でもブラウザのアドレスバーで直接ここにアクセスしても、 index.phpに飛ばされず、別のエラーになると思います。 この階層のファイルにはWordPressを介さずにアクセスできます。 そのため、WordPressの仕組み、 例えば、「/固定ページ名」で固定ページにアクセスできたり、 でたらめなURLはエラーとしてindex.phpに飛ばしたり、 その仕組みを使わずに、 wp-comments-post.phpの中で、 セキュリティなどを含めいろいろと処理してるのだと思います。 この階層でconfirm.phpを配置するなら、 同じようにセキュリティなどの処理が必要になってくる気がします。 それがきちんとできればいいのですが、 仕組みを理解せずに作ったものを、それでできたとは言いづらいです。 ・別の方がWordpredssでお問い合わせフォームを自作しているようですが、別のファイルをテンプレートとして送信側と同じ階層に確認ページを配置しているようです。 これは使えそうな気はするものの、 子テーマはなくてもよさそうな気もするので、 そのへんをふまえて試してみようと思います。
お礼
メールフォームについて再度調べてみたところセキュリティ対策について参考サイトのものだと甘いような気がしています。 下記のような対策が必要なようです。BOT処理は実装する必要のない機能だと思いますが、他のセキュリティ対策は必要不可欠かもしれません。 1,クリックジャッキング対策 2,CSRF対策 3,・SMTP送信制御 +a ・外部からの投稿対策 ・連続送信制限 ・送信/エラーログ ※参考サイト https://teratail.com/questions/71592 https://ara-web.net/blog/wordpress/post-3683/
補足
Q.例えば、以下のようなURLではアクセスできない、と言う意味です。 https://www.last.cfbx.jp/form.php https://www.last.cfbx.jp/confirm.php これだとエラーとして、index.phpに飛ばされると思います。 A.アドバイスありがとうございます。Wordpress意外だと直接飛べたようなきがしますので、Wordpressの場合はエラーになりますね。 なるほどテンプレートにする意味を理解できました。 テーマファイルを介していない浅い階層ということですね。確かに以前調べたセキュリティ対策をすべて実装するのは大変だと思います。 もう少し調べて作成してみます。
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その4】 ・confirm.phpについて疑問なのですがこれは外部の方にも見えるのでしょうか? 外部の方にも見えます。 人間が目で見て確認するため画面ですので見えてしかるべきです。 「この内容で送信していいですか」と言う画面です。 confirm.phpがURLにはなりませんので、 こちらもテンプレートと固定ページで、 「お問い合わせ確認」を用意する必要があると思います。 ただ、私が気になっているのは、 ページの表示や遷移はテンプレートと固定ページでできるとは思うのですが、 このような方法がWordPressを使う上でいい方法なのかはわかりません。 お問い合わせページからフォームの送信をテストしているのですが、 まだうまくいっていません。 コメントの場合は、 送信先であるwp-comments-post.phpがありましたが、 自作の場合には何かフィルタ処理が必要なのかもしれません。 もしくはwp-comments-post.phpと同じ階層にファイルを置いて、 どうにかするのかもしれませんが、 このフォルダに自作するのは危険な気がします。 ・内部確認画面に変異するときのファイルでしょうか?form.phpでもconfirm.phpでも確認ボタンがあるため違和感があります。 form.phpで確認画面に移行させる場合confirm.phpでは必要ないと考えたからです。 WordPress用の参考サイトではありませんので、 WordPressなしで単純にPHPが動く環境でひととおり作成して試してみてください。 画面に表示される内容やどのように遷移するのかがわかると思います。 それで、この画面がいるとかいらないとかの判断をされたらいいと思います。 どのようなものができあがるかわからないまま、 無理にWordPressに組み込んでも、それが正か誤か判断できないと思います。 ・1点目は エラー確認を2回はさんでいるようです。form.php側とconfirm.php側になります。 なぜ2回エラー確認をはさむのでしょうか? それはわかりません。 行ったり来たりできる作りのようなので、 どちらにもチェックがあるのかもしれません。 ・2点目はform.phpのvalue=""の部分になります。 これはconfirm.phpで確認の際に入力済みの項目を保持したまま未入力の項目を入力してもらう機能という前提だとすると、その下のお問い合わせ内容にも保持を追加すべきではないでしょうか? 例えば内容を入力済みで件名、名前、メールアドレスを忘れていた場合、入力内容が消えてしまいます。 参考サイトの第2回「戻ってきた時に値をinput要素に渡す」で、 valueに設定しているので表示されると思います。 それに、すべての項目が必須のチェックのようですので、 「件名、名前、メールアドレスを忘れていた場合」はないと思います。
お礼
申し訳ありませんPHPコードが原因で質問が審議中になっているため新しく質問をさせていただきました。 よろしくお願い致します。 https://okwave.jp/qa/q10072922.html
補足
Q.confirm.phpがURLにはなりませんので、 こちらもテンプレートと固定ページで、 「お問い合わせ確認」を用意する必要があると思います。 自作の場合には何かフィルタ処理が必要なのかもしれません。 もしくはwp-comments-post.phpと同じ階層にファイルを置いて、 どうにかするのかもしれませんが、 このフォルダに自作するのは危険な気がします。 A.説明ありがとうございます。URLにならないという意味がよく理解できていないのですが、Ajaxでない場合に別ページに遷移するしか方法は無い気がするのですが… ファイル階層が浅いので危険ということでしょうか? 参考サイトのお問い合わせページデモを確認してところ内容についてもvalueに設定されていて表示されました。確認不足で申し訳ありません。 別の方がWordpredssでお問い合わせフォームを自作しているようですが、別のファイルをテンプレートとして送信側と同じ階層に確認ページを配置しているようです。 ※参考サイト2 https://virment.com/wordpress-form-without-plugin/
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その3】 流れはこうです。 form.phpからform.phpへ送信してチェック。 内容がOKならconfirm.phpへ遷移。 内容がNGならform.phpのまま再表示。 confirm.phpで確認表示。 送信ボタンでsend.phpへ遷移。 戻るボタンでform.phpへ遷移。 send.phpでメール送信。
お礼
メールフォームについて再度調べてみたところセキュリティ対策について参考サイトのものだと甘いような気がしています。 下記のような対策が必要なようです。BOT処理は実装する必要のない機能だと思いますが、他のセキュリティ対策は必要不可欠かもしれません。 1,クリックジャッキング対策 2,CSRF対策 3,・SMTP送信制御 +a ・外部からの投稿対策 ・連続送信制限 ・送信/エラーログ ※参考サイト https://teratail.com/questions/71592 https://ara-web.net/blog/wordpress/post-3683/
補足
解説ありがとうございます。なるほど入力内容をconfirm.phpで保持するということですね。 お聞きしたところエラーが分かりやすいため正誤判定は別ファイルの方にしておきます。 確かに判定は名前でも可能ですね。盲点でした。 名前が入力されているかの判定があるのならそこから値の確認は可能でしょうし。 confirm.phpについて疑問なのですがこれは外部の方にも見えるのでしょうか? 内部確認画面に変異するときのファイルでしょうか?form.phpでもconfirm.phpでも確認ボタンがあるため違和感があります。 form.phpで確認画面に移行させる場合confirm.phpでは必要ないと考えたからです。 もう2点お聞きしたいことがあるのですが、1点目は エラー確認を2回はさんでいるようです。form.php側とconfirm.php側になります。 なぜ2回エラー確認をはさむのでしょうか? 参考サイトにバッティングすることはないと記述があるのですが、同一ファイル内で同じ関数を使い回す場合に目的が同じことが前提だったと思うのですが 今回は問題ないのか不安です。 ※第一回の時と同じ変数名を使っていますがバッティングすることはないので問題ありません。ややこしければ別の変数名にしておきましょう。 2点目はform.phpのvalue=""の部分になります。 これはconfirm.phpで確認の際に入力済みの項目を保持したまま未入力の項目を入力してもらう機能という前提だとすると、その下のお問い合わせ内容にも保持を追加すべきではないでしょうか? 例えば内容を入力済みで件名、名前、メールアドレスを忘れていた場合、入力内容が消えてしまいます。 ※該当URL https://tech.amefure.com/php-questionform2.php 第3回まで実装したかったのですが、アドバイスを頂きたいものがたくさんありましたので、コードを適応させてから3回目を参考に作成する予定です。 ※現在のコード(名前で入力判断) https://wandbox.org/permlink/lILP1Tnfcmxj2hPb
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その2】 ・参考サイトを見て疑問があるのですが、form.phpから画面を変異させる意図が分かりませんでした。 参考サイトの作り方の意図としては、 入力ページ(form.php)で入力とチェックをして、 入力に問題がある場合は入力内容を保持したまま入力ページを再表示する必要があるため、 自分自身のページで処理する方がいいと言うことだと思います。 入力ページから直接確認ページ(confirm.php)へ遷移する方法だと、 入力に問題がある場合に入力ページに戻らせる必要がでてきてしまうからではないでしょうか。 ・form.phpで正誤判定を行いその後メール送信という形でも可能な気がするのですがdell_okさんの見解はいかがでしょうか? そうですね。可能です。 私は送信画面も確認画面も送信処理もひとつのページ(ファイル)で済ませる方です。 コードがやたら長くなってしまいますが、 お問い合わせ画面としてひとつのファイルにまとめておきたいところですね。 ただ、バグをひそめやすくなりますし、 エラーがあった時に調べるのに手間がかかるので、 あまりおすすめできません。 ・参考サイトは恐らく3択?をタブで選択したうえで質問内容の入力を求めます。このタブがキーになっているようです。 スタイルシートがないのでタブっぽい動作をするかどうかまではわかりませんね。 ただのラジオボタンだと思っておきましょう。 キーと言うか、それで入力があったかどうかを判定しているのは確かなようです。 3択のうちどれかを選択するのが必須と言う仕様のもとで、そうなっているのだと思います。 これをなくすとすると、名前で判断するようにすればいいと思います。 でも、ちょっと見たところ(こまかくは見ていません)、 if(isset($_SESSION['kinds'])) の判定そのものが不要な気がします。 なぜこうしているのか意図がわかりませんね。 ・中に値が入っているかの確認はdumpでも可能でしょうか? 人間が目で見るための確認でしたらdumpで可能です。
- dell_OK
- ベストアンサー率13% (766/5720)
【お問い合わせ その1】 ・心配な点がありまして、html5と記述がありこれはデフォルトのものなのか、読み込みが必要なのかというところです… 「ENT_HTML5」のことでしょうか。 PHPの標準関数ですので、デフォルトのものと思っていただいていいと思います。 https://www.php.net/htmlspecialchars ・ここまでで違和感のあるコード箇所はありますででしょうか? 違和感と言うか、ひとつあるのは。 formタグのaction属性が"form.php"のままではうまくいきません。 同じ理由で、お問い合わせページへのリンクが"form.php"でも遷移できません。 作られたform.phpはまだ表示はされていないのでしょうか。 WordPressを介す必要があるので、 まずはお問い合わせページを表示するようにしてみましょう。 すでに表示されていたら蛇足ですが、私は以下のようにして表示しています。 form.phpの先頭に以下を追加して。 ---- /* Template Name: お問い合わせ Template Post Type: page */ ---- 固定ページをタイトル「お問い合わせ」で作成して、 テンプレートで「お問い合わせ」を選択します。 ひとまず他のテンプレートへのリンクのところに、 お問い合わせへのリンクを表示しました。 ----display.php function display_other_template() { global $tn; for ($i = 1; $i <= 3; ++$i) { if ($i != $tn) { $url = get_template_url($i, false); echo "<div><a href=\"{$url}\">画像{$i}の一覧へ</a></div>"; } } $url = home_url('お問い合わせ'); echo "<div><a href=\"{$url}\">お問い合わせ</a></div>"; } ----
補足
回答ありがとうございます。form.phpはまだ作成していなかったため作成いたしました。 お問い合わせへのリンクは忘れておりました。補足ありがとうございます。 参考サイトを見て疑問があるのですが、form.phpから画面を変異させる意図が分かりませんでした。 form.phpで正誤判定を行いその後メール送信という形でも可能な気がするのですがdell_okさんの見解はいかがでしょうか? form.phpから画面(confirm.phpへ)を変移させる 変移させた時に値をconfirm.phpへ渡す 内容がOKなら送信ボタン→メール送信へ 内容がNGなら戻るボタン→form.phpに値を戻す // 直接URLを記述するパターン header('Location:https://www.○○○.com/Questionform/confirm.php'); // 保守性を高めURLを自動で生成するパターン header('Location:https://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/confirm.php'); もう1点つまずいていることがあるのですが、参考サイトと目標のデザインにユーザーの判定で大きな違いがありました。 参考サイトは恐らく3択?をタブで選択したうえで質問内容の入力を求めます。このタブがキーになっているようです。 このタブは質問の頻度が下がる可能性があるためなくしたうえで実装を考えています。 そうなってしまいますと、if条件が変わってくるようです。※参考サイトから引用SESSIONの中に値があるか確認をして、あれば各値を変数に格納していきます。 if(isset($_SESSION['kinds'])) 中に値が入っているかの確認はdumpでも可能でしょうか? var_dump(isset($)); // false var_dump(empty($)); // true ※参考サイト https://gray-code.com/php/check-variables-exists-and-not-empty/ 今作成しているお問い合わせフォームの流れは、下記のようになっているようですが何故send.phpに送る必要があるのかもよくわかりませんでした。 dell_okさんは意図がわかりますでしょうか? 1つのファイルで出来ることを確認のために2つのファイルで分けているような気がします。お問い合わせ内容の記述がファイルに上書きされる形式にする場合定期的な 削除も実装する予定です。csvファイルの代わりのようなものにも見えます。 form.php(入力送信)→confirm.php(値が入っているか空かの確認)→form.php(値の確認を終えたもの) →send.php(POSTの送信先) ※該当コード <?php session_start(); //SESSIONを使うときは最初にスタートさせる if(isset($_SESSION['kinds'])){ $kinds = $_SESSION['kinds']; $name = $_SESSION['name']; $email = $_SESSION['email']; $title = $_SESSION['title']; $body = $_SESSION['body']; } ?> ※参考サイト https://tech.amefure.com/php-questionform2.php
- dell_OK
- ベストアンサー率13% (766/5720)
・html classも変更してみましたが、空マークのままです。原因が分からなかったのですが、半年前のファイルと中身が変わっていて環境にあっていないのかもしれません。 そうですね。 contentの値が違っていましたし、 この間に仕様変更でもあったのかも知れませんね。 ・代わりにMaterial Iconsを使用することにいたしました。こちらもフリーアイコンですので、functions.phpで読み込むことで使用できます。 こちらはダウンロード不要で使えるので楽ですね。 別手段で解決されてよかったです。 ・アイコンについては整理できましたので、お問い合わせページの作成に移行していく予定です。 参考サイト「https://tech.amefure.com/php-questionform」はすごくしっかり作りこまれているようです。 ちょっと道のりは長くなりそうですが、やってみてください。 ただ、WordPress用ではなさそうなので、もしかしたらうまくいかないかも知れません。 うまくいかない、で想像できるのは、formタグのaction属性に記述するURLくらいだと思います。 WordPressは予期せぬURLにアクセスされるといい感じで他へ飛ばしてくれるようになっているので、 そこがうまくいけば大丈夫かなと思っています。
補足
参考サイトの第一回:【自作】PHPでお問い合わせフォームを作ろう!コードと仕組みを徹底解説!を見て作成してみたのですが、エスケープにhtmlspecialcharsを使っているところに違和感を感じました。 調べたところ下記のようにあったのでセキュリティに強い関数のようです。 心配な点がありまして、html5と記述がありこれはデフォルトのものなのか、読み込みが必要なのかというところです… ここまでで違和感のあるコード箇所はありますででしょうか? 第3回までありますので1つ1つ考えながら作成していく予定です。 ※参考URL https://agohack.com/how-to-escape-with-htmlspecialchars/ htmlspecialchars() は、 HTML タグなどに使われる特殊文字をエスケープし、 XSS や悪意のあるスクリプトによる攻撃を防ぐための PHP の関数 <?php // 送信ボタンが押されたかどうか if(isset($_POST['submit'])){ // POSTされたデータをエスケープ処理して変数に格納 $subject = htmlspecialchars($_POST['subject'],ENT_QUOTES | ENT_HTML5); $name = htmlspecialchars($_POST['name'],ENT_QUOTES | ENT_HTML5); $email = htmlspecialchars($_POST['email'],ENT_QUOTES | ENT_HTML5); $body = htmlspecialchars($_POST['body'],ENT_QUOTES | ENT_HTML5); $confirmation = htmlspecialchars($_POST['confirmation'],ENT_QUOTES | ENT_HTML5); } $body = htmlspecialchars($_POST['body'],ENT_QUOTES | ENT_HTML5); // エスケープ処理の下に記述 $errors = []; //エラー格納用配列 //trim(文字列)→文字列内の空白を除去 →値がなくなればエラーにする if(trim($subject) === '' || trim($subject) === " "){ $errors['subject'] = "タイトルを入力してください"; } if(trim($name) === '' || trim($name) === " "){ $errors['name'] = "名前を入力してください"; } if(trim($body) === '' || trim($body) === " "){ $errors['body'] = "内容を入力してください"; } // エラー配列がなければ完了 if(count($errors) === 0){ echo "完了"; }else{ // エラー配列があればエラーを表示 echo $errors['subject']; echo $errors['name']; echo $errors['body']; } <form method="post" id="questform" class="questform" action="form.php"> <div class="form-group"> <div class="subject"> <input type="text" name="title" value="" placeholder="件名" required> </div> <div class="name"> <input type="text" name="name" value="" placeholder="お名前" required> </div> <div class="email"> <input type="email" name="email" value="" placeholder="メールアドレス" required> </div> <div class="body"> <textarea type="text" name="body" placeholder="お問い合わせ内容" rows="7" required></textarea> </div> <div class="confirmation"> <button type="submit" name="submit" value="確認">確認</button> </div> </div> </form>
- dell_OK
- ベストアンサー率13% (766/5720)
【コメント欄 その77】 アイコンを試してみました。 何がいけないのかわかりませんが、 表示されません。 仕組みがわからないので何とも言えません。 気になるのは、 クラス名が用意されたものと違う点です。 返信で使おうとされているアイコンは、 アイコン名で言うと「level-down」でしょうか。 どう言うわけか、 contentの値が質問者さまのものと違うので、 アイコン名で話しを進めますので、 もし違うアイコンであればその名前だと思ってください。 それで、このアイコン名で、 返信のところに以下を追加するとアイコンが表示されました。 ---- <i class=\"fa icon-level-down\"></i> ---- 何か意味があってクラス名を変えたものを追加されているのだと思いますが、 そのままの名前であれば表示されますか。 仕組みがわからないまま想像すると、 クラス名 と アイコン名 を関連付ける記述がどこかにあると思うのです。 それが、以下の部分であれば表示されていると思うのですが、 ---- font-family: 'fontello'; content: "\e816"; ---- 表示されないと言うことは、それではないか、 それ以外に何かが必要と言うことだと思います。 最初はSVGの画像が必要なのかと思ったりもしましたが、 どうもそこまでではなくても、なんとか表示できました。 と言っても、そのままではありません。 私はスタイルシートも詳しくないので正確なことは言えませんが、 fontello.cssを見るとクラス名が「icon-」で始まるものについての記述があります。 なので、質問者さまが定義されているクラス名「comment-reply-link」を 「icon-comment-reply-link」にしてみると表示されました。 そうなると、「icon-」で始まらないのに表示されている、 カテゴリーやアーカイブのアイコンはなぞです。 参考サイトにはクラス名を変えて使うことまでは書かれていないので、 ダウンロードしてきたものをそのまま使うのが無難な気がします。
補足
Q.それで、このアイコン名で、 返信のところに以下を追加するとアイコンが表示されました。 ---- <i class=\"fa icon-level-down\"></i> ---- fontello.cssを見るとクラス名が「icon-」で始まるものについての記述があります。 なので、質問者さまが定義されているクラス名「comment-reply-link」を 「icon-comment-reply-link」にしてみると表示されました。 A.試していただきありがとうございます。そのままの名前に変更してみても表示されませんでした。 html classも変更してみましたが、空マークのままです。原因が分からなかったのですが、半年前のファイルと中身が変わっていて環境にあっていないのかもしれません。 代わりにMaterial Iconsを使用することにいたしました。こちらもフリーアイコンですので、functions.phpで読み込むことで使用できます。 /*---- Google Icon ----*/ function add_google_icons() { wp_register_style( 'googleFonts', 'https://fonts.googleapis.com/icon?family=Material+Icons' ); wp_enqueue_style( 'googleFonts'); } add_action( 'wp_enqueue_scripts', 'add_google_icons' ); ※参考サイト https://dubdesign.net/web/make_homepage/material-icons/ アイコンについては整理できましたので、お問い合わせページの作成に移行していく予定です。 有料プラグインになるためコストを抑えるために自作していきたいと考えております。 Formzu WPというプラグインです。参考画面は下記になります。 ※参考サイト https://imgur.com/LO49Bjf.jpg https://ws.formzu.net/fgen/S16099269/ 設計から考えていきたいのですが、考えた範囲で実装に必要な機能は下記になりました。足りないものがありましたらご指摘お願い致します。 それぞれinput typeから送る?(恐らくコメントなどフォームを作るときに必須)ことになると思います。 前提として自動送信完了メールとお問い合わせ内容を自身のメールアドレスにも送り返すように作りたいです。 front-page.phpにお問い合わせリンクを設置すると仮定して、 form.phpにURLで飛ばすように考えています。 1,お問い合わせ種別(件名) 2,お名前 3,メールアドレス 4,メッセージ(内容) ※参考サイト https://tech.amefure.com/php-questionform <p >件名</p> <input type="text" name="title" value="" placeholder="件名" required> <p >お名前</p> <input type="text" name="name" value="" placeholder="お名前" required> <p >メールアドレス</p> <input type="email" name="email" value="" placeholder="メールアドレス" required> <p >内容</p> <textarea type="text" name="body" placeholder="お問い合わせ内容" rows="7" required></textarea> <button type="submit" name="submit" value="確認">確認</button>
お礼
参考サイトを見てsmtp設定をPHP側で試しているのですが、メールの送信のやり方がわかりません。 テストメールをwp_mail()から送信してみるというコードをファイルに書き込んでもメールが届いていない状態です。 Hostは契約時のメール内容から、Port番号はカラフルボックスの案内から、Username、Password、From はCpanelの設定画面から確認しているのですが… 何か抜けているのでしょうか? dell_okさんと同じlocalhost環境でも試してみようかと考えております。 ※参考画像 https://imgur.com/1BgETYv.jpg https://imgur.com/jFBZorC.jpg ※接続ポート番号について https://help.colorfulbox.jp/manual/mail-spec-list/ ※実装コード add_action("phpmailer_init", "send_smtp_email"); function send_smtp_email( $phpmailer ) { $phpmailer->isSMTP(); $phpmailer->Host = "[mail.last.cfbx.jp]"; $phpmailer->SMTPAuth = true; $phpmailer->Port = 587; $phpmailer->SMTPSecure = "tls"; $phpmailer->Username = "[test@last.cfbx.jp]"; $phpmailer->Password = "[takuya7530]"; $phpmailer->From = "[test@last.cfbx.jp]"; $phpmailer->FromName = "[test]"; } ※テストメールをwp_mail()から送信(t******@gmail.comは確認用のメールアドレス) wp_mail( "t******@gmail.com", "届きましたか?", /// => サブジェクト(件名) "このメールが見れたなら設定は完ぺき!" /// => ボディ(メール内容) ); ※参考サイト 1,https://qiita.com/e__ri/items/857b12e73080019e00b5 2,https://fukuro-press.com/wordpress-send-email-with-smtp/
補足
アドバイスありがとうございパーリンクを変更したところ遷移することができました。 確認画面の内容は飛ばされているようですね… メールも届いていないようです。 コメントアウト部分修正致しました。ありがとうございます。 メールが送れない原因を考えてみたのですがsmtpが原因ではないでしょうか? ※参考サイト https://teratail.com/questions/123222 https://fukuro-press.com/wordpress-send-email-with-smtp/