Contact Form 7で記事のタイトルを取得して自動で記入する方法

スポンサーリンク

みんな大好きContact Form 7で
どのページを見て問い合わせをしたのかわかるようにしたかったのです。

ちなみに固定ページでも投稿でもどちらでも大丈夫です。
私がやりたかったのが投稿だっただけですので適宜置き換えてお考え下さい。

最終的に、どのページを見て問い合わせをしたかわかるように
ページのタイトルをあらかじめ記入済みの状態で問い合わせフォームを表示させます。

方法1:特別なメールタグを使う

最近まで知らなかったのですがContact Form 7には便利なタグがあります。
例えば[_remote_ip]は送信者のIPアドレスを取得できます。
その特別なメールタグとやらの中には投稿のタイトルを取得できるものもあったのだ!
[_post_title]で投稿のタイトルを取得できる!
他にも便利そうなタグがありました。

[_remote_ip] このタグは送信者の IP アドレスで置換されます。
[_user_agent] このタグは送信者のユーザーエージェント情報で置換されます。
[_url] このタグはコンタクトフォームの URL で置換されます。
[_date] このタグは送信された日付で置換されます。
[_time] このタグは送信された時刻で置換されます。
[_post_id] このタグはコンタクトフォームを含んだ投稿の ID で置換されます。
[_post_name] このタグはコンタクトフォームを含んだ投稿の名前(スラッグ)で置換されます。
[_post_title] このタグはコンタクトフォームを含んだ投稿のタイトルで置換されます。
[_post_url] このタグはコンタクトフォームを含んだ投稿のパーマリンクで置換されます。
[_post_author] このタグはコンタクトフォームを含んだ投稿の作成者の名前で置換されます。
[_post_author_email] このタグはコンタクトフォームを含んだ投稿の作成者のメールアドレスで置換されます。

詳しくはContact Form 7の公式サイトで!

ということで、もう解決!こうすればいいね!

cf7-1

あれ?
cf7-2

あ、フォームには表示できないんだね。
でも届いたメールにはちゃんと投稿のタイトルが入ってたよ。

cf7-3

公式サイトをよく読んだらちゃんと書いてあった。

これらの特別なメールタグはメッセージ本文やその他のメールセクションの項目に挿入して使うことができます。

てへっ!フォームに使えるなんて書いてないね!早とちり!

しかし管理者に届くメールにだけ入っていればいいならこれでOKですね。

でも私はフォームにページのタイトルが入力された状態で表示したいんだ!
ついでに言うとフォームを設置していないページから
「お問い合わせはこちら」ボタン押したらどのページから来たかわかるようにしたいんだ!

方法2:やっぱりfunction.phpに書く

問い合わせフォームへのリンク元ページにget値でページ名を持たせて
問い合わせフォームのページでそのget値を取得すればいいんじゃないかな
と思ったら素敵な解説を見つけました。
どや!?Contact form 7 のフォームに自動的に記事タイトルを入れる方法

function.phpに以下を追加します

function my_form_tag_filter($tag){
  if ( ! is_array( $tag ) )
  return $tag;

  if(isset($_GET['goods'])){
    $name = $tag['name'];
    if($name == 'goods')
      $tag['values'] = (array) $_GET['goods'];
  }
  return $tag;
}
add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11);

contact form 7で使えるタグを追加するんですね!
goodsの部分は好きなように変更とのことだったので
私はserviceにしました。

single.phpのボタンのリンク先を下記に変更

<a href='/?page_id=123&goods=<?php the_title(); ?>'>お問い合わせはこちら</a>

固定ページにリンクを置く場合はpage.phpですね。
goodsの部分を書換えた場合は忘れずに変えよう。
わたしはお問い合わせはこちら部分は画像にしました。
ちなみに投稿画面から使いたいときは
固定ページ、投稿内でphpを使えるようにするプラグイン「Exec-PHP」を有効化して
htmlエディタで書いたらいいのかな
※このプラグインは便利だけど特性上、危険なもあるので気をつけてね

Contact Form 7のフォーム側に追加

<p>問い合わせしたい商品<br />
    [text goods] </p>

っていう感じにするとフォームにちゃんと表示された!
ユーザーがもし違うページについて問い合わせたい場合もちゃんと書換えられるね!
※[]は半角にしてください。うまく表示できなかった・・・

まとめ

わたしの場合別ドメインにインストールしているwordpressのサイトからリンクさせてみましたが、
ちゃんと記事のタイトルを取得できました。ステキ!
デザインどや!?さんありがとうございます!