WPのContactform7でページまたぎ入力

以下、無駄の可能性あります。

令和にはいって一発目の投稿。このGW期間、ちょっと必要があって、ワードプレスのContactform7を使って、前のページでチェックした内容を引き継ぐフォームを作ることにしました。

通常、contactform7だと1つのページ内でしか、チェックしたり、入力したりしかできませんが、前のページからパラメータを引き継げると便利ですね。

今までもGETメソッドで1つの内容を引き継ぐ方法はやっていたのですが、どうしても複数の情報を引き継ぎたかったのでやってみました。

function.phpを使いましたが、jqueryで同様のことは簡単にできました。

パラメータを引き継ぐ方法

あらかじめ、contactform7のあるページにhogeというtext枠をcontactform7に用意しておいて、

https://contactform7のあるページのURL/?hoge=hoge窓に引き継ぐ内容

さらに後ろに&をつけて、複数の情報を増やすことも可能だと思います。

wordpressのContactform7をページまたぎする。

このリンクを必要なところに貼っておけば、引き継げるというのはよく公開されています。

イベントの申し込みなどのリンクで時々見かけます。

チェックボックスのパラメータを引き継ぐ

先ほどの方法ですと、複数チェックしたときに最後の1つのパラメータしか引き継げないことがわかります。

そこで、チェックした内容を1つにまとめてしまうことを考えました。function.phpにコードを書きショートコードで呼び出せるようにして、送信元のページにはチェックボックスの入ったフォームを作っておきます。

次にcontactform7のフォーム側にはtextareaなりで、”hoge”の入力枠を作っておいてください。ここまでは今までとほぼ一緒ですね。

詳しいやり方は次の通りです。

以下、質問には応じかねます。自己責任でお願いします。

function.phpに追記

管理画面の「外観→テーマディタ→function.php」から下のコードを追加します。

あらかじめFTPクライアントソフトなどでfunction.phpのバックアップを取っておくとよいかと思います。

function merge_checkbox(){
 if(isset($_REQUEST['hoge'])){    
     foreach($_REQUEST['hoge'] as $value){
             $hoge .= $value."\n";//”¥n”は改行してtextareaに入れるための記号
     }
     $_GET['hoge']=$merge_checkbox ;
 }else{
     $_GET['hoge']="チェックが入っていません。";
     }
 }
 add_shortcode('merge_checkbox ',' merge_checkbox ');

プログラム的にどうなのか、$_GETに値を戻しています。

送信元のページ

<form method="post" action="固定ページなどcontactform7を表示するページへのリンク">
<input type="checkbox" name="hoge[]" value="hoge1">hoge1<br>
<input type="checkbox" name="hoge[]" value="hoge2">hoge2<br>
<input type="submit">
</form>

POSTメソッドを使っていますが、function.php側が$_REQUESTなのでGETメソッドでも値は引き継げますが、結局、Contactform7へはGETメソッドで渡すので文字数の上限はあります。

キモはhoge[]の[]なのでお忘れのないように。

Contactform7の設定

[textarea hoge default:get readonly]

みたいなものを作っておきます。

フォームを表示するページの設定

固定ページなどContactform7のフォームを表示するページにはfonction.phpで作ったコードを呼び出すショートコードを書きます。

[merge_checkbox]

Contactform7のショートコードより前に書かないとうまく機能しないと思います。

拡張性なしjqueryの方がいいかも

今のところ、即席で作ったので拡張性はないですが、どうしても受け取る側に名前が必要になるのでこんなところかなと思います。使うシーンも私の環境では少ないので足りてしまっています。

今回はPHPでしたが、javascripなどでも同様のことはできると思います。

jqueryで、同様のことがきました。それを使ってサイト内検索に反映。
本記事、時間の無駄だったかもしれません(笑)