お問い合わせ先ページの作り方
-
物件情報サイトをwordpress3.0.1で作成しています。
使用しているプラグインは、custom-field-gui-utilityとcontact-form-7です。
先日質問させていただいたトピックの続きのようになってしまうのですが
http://ja.forums.wordpress.org/topic/5065?replies=7上記方法でできた「物件詳細+業者詳細」の記事に、さらにお問い合わせボタンをつけて、コンタクトフォームに遷移させたいと考えています。
ちなみにこちらのサイトを参考にしています。
https://chintai360.jp/rooms/contact/10003/270457自分で考えた手順として、
1.「問い合わせカテゴリー」を作成し、「A町物件詳細+A社業者詳細」記事を出力させ、コンタクトフォームを設置(送信先のメールアドレスはA社)した記事を作成する。
2.「A町物件詳細+A社業者詳細」記事に新たに画像用のカスタムフィールドを設け、「お問い合わせ」ボタン画像を出力する。
3.そのボタンに1の手順で作成した記事のurlを貼るこのような方法でできたことはできたのですが、これまたコンタクトフォームを設置した記事が物件の数に合わせて増えていくことになります。
なんだかスマートではないし、「本当に上記の方法でいいのか?」と悩んでいるところです。
他にいい方法があればアドバイスいただきたいです。
よろしくお願いします。
-
「物件詳細+業者詳細」の記事にコンタクトフォームそのものをせっちしたらどうですか?
どの記事を見て問い合わせしたかを知るにはこのへんを使ってうまく工夫したらよいです。
違うPluginのお話しになってしまい恐縮ですが、cforms||でなら同じ事をやった事があります。
下のリンクの記述方法で、飛び先のフォームの特定のフィールドに値を渡せました。
※以下、cformsの1つめのフォームの1つ目のフィールドにidをaaaと付けている場合の例です。
http://(フォームのURL)?cf_field_1=渡したい文字列
もしくは
http://(フォームのURL)?aaa=渡したい文字列
こうすると、指定フィールドに文字列が入った状態でフォームが表示されます。
このフィールドを変更不能な状態に指定しておいて、cssで表示を調整すれば、参考サイトとほぼ同じことが出来るかともいます。
ただ、ちょっと挙動に癖(bug?)があるので、多少の試行錯誤は必要でしたが…・・・というようなことを Contact Form 7 でしたいなー、って場合は
http://ja.forums.wordpress.org/topic/3380
http://ja.forums.wordpress.org/topic/4701
辺りをご参照◎レスをいただきましてありがとうございました。
ご紹介いただいた参照urlで、コンタクトフォームの指定フィールドに渡したい文字列を
入れることができました。
しかしやりたいことがもう一つあって、
「A町物件のお問い合わせはA社」
「B町物件のお問い合わせはB社」
という風に、送信先のメールアドレスも変えたいのです。Takayuki Miyoshiさんがおっしゃるように、
>「物件詳細+業者詳細」の記事にコンタクトフォームそのものをせっちしたらどうですか?とすれば簡単なのですが、参考にしているサイト(https://chintai360.jp/rooms/contact/10003/270457)がまさに自分がやりたいことを実現していることもあり、同じようにできたらいいなあと思った次第です。
これはやはり業者ごとの宛先メールアドレスのコンタクトフォームを、物件の数だけ増やすしかないでしょうか?A社/B社の業者情報もコンタクトフォームの指定フィールド(gyousha)に渡すようにして
テーマの functions.php で以下のようにすれば OK。add_action( 'wpcf7_before_send_mail', 'my_wpcf7_before_send_mail' ); function my_wpcf7_before_send_mail( $wpcf7 ) { $recipients = array( 'a' => 'info@a.example.com', /* A社 */ 'b' => 'info@b.example.com', /* B社 */ ); if( isset( $_POST['gyousha'] ) && ( '' != $recipients[$_POST['gyousha']] ) ) $wpcf7->mail['recipient'] = $recipients[$_POST['gyousha']]; }
細かいところはお好みでアレンジしてください。
kzさん、いつもいつもありがとうございます。
http://ja.forums.wordpress.org/topic/3380?replies=11
を参考に、コンタクトフォームの「物件名」には<p>物件名<br /> [text your-bukken]</p>
とフィールドを指定しています。
さらに上記投稿で教えていただいたコードをfunction.phpに追加して、
コンタクトフォームに下記の指定フィールドを追加しました。<p>お問い合わせ先<br /> [text gyousha]</p>
その上で「お問い合わせ」画像ボタンに、
<a href="http://www.example.com/contact?bukken=A町1丁目 ?gyousha=a"><img src="http://www.example.com/contact_bt.gif" class="cfg_img" />
のような感じでリンクを付けましたが、
物件名のフィールドに、「A町1丁目?gyousha=a」と出力されてしまいます。
何か自分の使い方が根本的に間違っているようですが…
アドバイスいただけたら幸いです…コンタクトフォームとは関連していない記述ミスと思いますのでとりいそぎ
誤
<a href="http://www.example.com/contact?bukken=A町1丁目 ?gyousha=a">
正
<a href="http://www.example.com/contact?bukken=A町1丁目 &gyousha=a">
でOKだと思います。
ご回答いただきまして、ありがとうございます。
<a href="http://www.example.com/contact?bukken=A町1丁目 &gyousha=a">
で試してみたところ、物件名は「A町1丁目」と正しく表示されましたが、「お問い合わせ先」には何も入っていない状態です。
どうしたものでしょうか…聞かぬは一生の恥ということで、あともう一つだけ質問です。
ご回答いただいた皆様のおかげで、コンタクトフォームへのurlで物件名とメールアドレスを渡せるということは理解できましたが、
さらにそのコンタクトフォームを設置してあるページに、元の記事である「A町詳細+A社お問い合わせ」を出力させることは無理でしょうか。http://www.example.com/contact?bukken=A町1丁目&gyousha=a
というアドレスでアクセスした場合、
bukkenというキーにA町1丁目という値が、
gyoushaというキーにaという値が、
それぞれサーバーに送られます。送られた値はそれぞれ、$_GET[‘bukken’]、$_GET[‘gyousha’] で取得できますが、
このあたり正しく書かれていますか?
functions.phpに追加したコードに誤りがあるのかもしれません。キーを追加すれば「詳細」など他のデータも取得し、
PHPでページに出力することも可能ですよ。
page.phpの任意の位置に下記のコードを追加し、<?php if ( isset( $_GET['syousai'] ) ) { echo wp_kses( $_GET['syousai'] ); } ?>
たとえば、
http://www.example.com/contact?bukken=A町1丁目&gyousha=a&syousai=test
とアクセスした場合、上記のPHPコードを入力した位置に
test
と表示されます。実際にはコンタクトフォームのページのみ表示したいと思いますので、
別名でカスタムページテンプレートとして保存するのが楽です。umbrella_processさん、本当にありがとうございます。
functions.phpには以下のように追加しています。function my_form_tag_filter($tag){ if ( ! is_array( $tag ) ) return $tag; if(isset($_GET['bukken'])){ $name = $tag['name']; if($name == 'your-bukken') $tag['values'] = (array) $_GET['bukken']; } return $tag; } add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11); add_action( 'wpcf7_before_send_mail', 'my_wpcf7_before_send_mail' ); function my_wpcf7_before_send_mail( $wpcf7 ) { $recipients = array( 'a' => 'info@a.example.com', /* A社 */ 'b' => 'info@b.example.com', /* B社 */ ); if( isset( $_POST['gyousha'] ) && ( '' != $recipients[$_POST['gyousha']] ) ) $wpcf7->mail['recipient'] = $recipients[$_POST['gyousha']]; }
上記に誤りがありますでしょうか。
URLに記述して値を渡すのはGET方式です。
$_POST[‘gyousha’] ←これはPOST方式です。
$_GET[‘gyousha’] ←こう変えれば送信先の変更が動作するのではないかと思います。下記は必要ありませんね。
<p>お問い合わせ先
[text gyousha]</p>function.phpを下記のように書き換え、「お問い合わせ」画像ボタンには、
http://www.example.com/contact?bukken=A町1丁目&gyousha=aとリンクさせました。function my_form_tag_filter($tag){ if ( ! is_array( $tag ) ) return $tag; if(isset($_GET['bukken'])){ $name = $tag['name']; if($name == 'your-bukken') $tag['values'] = (array) $_GET['bukken']; } return $tag; } add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11); add_action( 'wpcf7_before_send_mail', 'my_wpcf7_before_send_mail' ); function my_wpcf7_before_send_mail( $wpcf7 ) { $recipients = array( 'a' => 'info@a.example.com', /* A社 */ 'b' => 'info@b.example.com', /* B社 */ ); if( isset( $_GET['gyousha'] ) && ( '' != $recipients[$_GET['gyousha']] ) ) $wpcf7->mail['recipient'] = $recipients[$_GET['gyousha']]; }
その上で実際に送信できるメールアドレスに変更して試してみたところ、メールは送信されませんでした。お問い合わせボタンを設置した記事の方に、何かカスタムフィールドなどを追加しなければいけないのでしょうか。
キーを追加すれば「詳細」など他のデータも取得し、 PHPでページに出力することも可能ですよ。
「詳細」を付け加えることができるとのアドバイス、ありがとうございます!
http://www.example.com/contact?bukken=A町1丁目&gyousha=a&syousai=test
上記のようですと、たとえば「詳細」に入れたい文章が多ければ多いほど、長ーーいURLになっちゃいますよね。
カスタムフィールドの値は渡せないのでしょうか。
あと1つだけとか言っておきながら、重ね重ね申し訳ありません…お問い合わせボタンを設置した記事の方に、何かカスタムフィールドなどを追加しなければいけないのでしょうか。
いえ、その必要はないはずです。
ぱっと見問題なさそうですが、エラーなどは表示されますか?
とりあえずkzさんの補足を待ってみてはいかがでしょうか。リンク元の記事のIDをGETで渡してカスタムフィールドの内容を表示することもできますよ…。
URLでsyousai=1のような形式で記事IDを渡し、カスタムフィールド「test」の内容を表示する<?php if ( isset( $_GET['syousai'] ) && is_numeric( $_GET['syousai'] ) ) { $syousai_id = intval( $_GET['syousai'] ); echo get_post_meta($syousai_id, 'test', true); } ?>
もう一度コードを確認して再度やり直してみたところ、無事送信&出力できました!
このたびは本当に本当にありがとうございました。
原因は、「$_POST」を「$_GET」に直し忘れていたのと、<?php if ( isset( $_GET['syousai'] ) ) { echo wp_kses( $_GET['syousai'] ); } ?>
を「お問い合わせフォームページ(page-contact.php)」ではなく、「物件記事(single-bukken.php)」に加えていたからで、本当に初歩的なミスでした…。
教えていただいたことを自分への戒め&今後同様なことをなさりたい方のために、以下に自分がやったことを明記します。
1.お問い合わせフォームページをカスタムページテンプレートで作成し、「物件名」の指定フィールドを以下のように設定する
<p>物件名<br /> [text your-bukken]</p>
2.function.phpに以下のコードを加える。
function my_form_tag_filter($tag){ if ( ! is_array( $tag ) ) return $tag; if(isset($_GET['bukken'])){ $name = $tag['name']; if($name == 'your-bukken') $tag['values'] = (array) $_GET['bukken']; } return $tag; } add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11); add_action( 'wpcf7_before_send_mail', 'my_wpcf7_before_send_mail' ); function my_wpcf7_before_send_mail( $wpcf7 ) { $recipients = array( 'a' => 'info@a.example.com', /* A社 */ 'b' => 'info@b.example.com', /* B社 */ ); if( isset( $_GET['gyousha'] ) && ( '' != $recipients[$_GET['gyousha']] ) ) $wpcf7->mail['recipient'] = $recipients[$_GET['gyousha']]; }
3.「物件記事」に「お問い合わせ」ボタン画像のカスタムフィールドを追加し、ボタン画像に、以下のようにリンクを付ける
<a href="http://www.example.com/contact?bukken=A町1丁目&gyousha=a">
以上です。
カスタムフィールドの内容を表示できる件も教えていただいてありがとうございました。色々と試してみます。
「wordpressって色んなことができるんだなあ、楽しなあ」と思えるようになってきました。
レスをくださった皆様、本当にありがとうございました。
- トピック「お問い合わせ先ページの作り方」には新たに返信することはできません。