🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

PHP

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

Q&A

3回答

1240閲覧

WordPressに自作のフォームを設置したい

kamatama3

総合スコア4

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/12/20 01:22

編集2019/12/20 01:55

前提・実現したいこと

WordPressに自作のフォームを設置し、フォーム送信後ある処理をしてから画面遷移するようにしたいです。

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

ページを開いた段階で、画面が遷移してしまう。

該当のソースコード

function.php

function.php

1function send_form(){ 2 // ここに実行したい処理 3 // . 4 // . 5 // . 6 // . 7 header('Location: /thanks'); 8} 9add_action('template_redirect', 'send_form');

form.php

form.php

1 7 <form action="<?php template_redirect() ?>" method="post"> 2 8 <button type="submit">送信する</button> 3 9 4 10 </form>

試したこと

add_actionの記述を消せば遷移しなくなりますが、フォームが動作している様子もありません。

補足情報(FW/ツールのバージョンなど)

何か必要な情報があれば追記します。

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

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

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

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

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

guest

回答3

0

初心者特有の安易な期待に基づく誤解があると思うのでそっちを潰しときます

php

1<form action="<?php template_redirect() ?>" method="post">

↑これ

こうすればformを送信した時template_redirectフックを発火させられる
なんて思ってるんじゃないかと思いますが、そんなことできません

  1. formの送信先をPHPの関数にすればフォーム送信時に関数が実行される、なんてことはありません
  2. WPでは任意の関数を実行するとその関数名のフックが発火する、なんてことはありません

template_redirectはWPのコアがページ表示時に必ず発火するフックです
どのページでも必ず発火するフックでリダイレクトしたらどうなるか・・・
もしそのリダイレクト先もWPのページであったなら・・・

・・・怖いですね


最もシンプルで原始的なフォームの実装方法は
「formの送信先は同じページにして、任意のURLパラメータの有無によって
フォームの受信処理をするか表示処理をするかを分岐する」
です

つまり

php

1function send_form(){ 2 // ここに実行したい処理 34function send_form(){ 5 if(empty($_POST['action']) || $_POST['action']!=='send'){return;} 6 // ここに実行したい処理 7 8 9 10<form action="<?php template_redirect() ?>" method="post"> 11<button type="submit">送信する</button> 1213<form action="./" method="post"> 14<button type="submit" name="action" value="send">送信する</button>

みたいな感じです

それでもWPでフォームを実装する場合はwp_nonceはつけておきたいところです
とりあえず動くところまでできたら次はwp_nonceをつけましょう

投稿2019/12/20 02:52

KazuhiroHatano

総合スコア7819

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

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

0

最小限ならこんな感じでやってみるとどうでしょうか。
(csrf対策などはよしなに)

php

1// formページ 2<?php 3if( !empty($_POST) ) { 4 // 送信値の処理をする 5 6 // redirect 7 wp_safe_redirect('完了ページ'); 8 exit; 9} ?> 10 11<form action="" method="post"> 12// フォーム 13</form>

投稿2019/12/20 02:34

編集2019/12/20 02:43
madone99

総合スコア1857

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

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

0

今の処理の書き方では単純にリダイレクト処理を行っているだけに見えます

https://example.comへ値を送信したいなら書き方はこうかと

php

1<form action="https://example.com" method="post">

投稿2019/12/20 01:28

sola-msr

総合スコア876

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

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

kamatama3

2019/12/20 01:52

やりたいことは、「サーバー側で受け取って処理を実行し、サンクスページに遷移させたい」です。 いただいた例だとただ画面遷移してしまいませんか?
sola-msr

2019/12/20 02:07

画面遷移はしますが、サンクスページのURLをactionに書いて、サンクスページで送信した値の処理を書けば問題ないのかなと
kamatama3

2019/12/20 02:12

ありがとうございます。 <form action="/form_submit.php" method="post"> としたのですが、form_submit.phpはどこに設置すべきでしょうか? wp/wp-content/themes/lightning/form_submit.php に配置したのですが、404になってしまいます。
sola-msr

2019/12/20 02:21

サンクスページのPHPファイル(form_submit.php)を「page-〇〇.php(例えばpage-thanks.php)」形式にリネームし、管理画面から固定ページの追加を行ってください。 現在WPの管理画面を見る環境がないのであっているかわからないですが、検索してみた結果おそらく、管理画面左メニューの「固定ページ」→「新規追加」で、スラッグ部分を〇〇に設定するといけるかなと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問