こんにちは。
参照されたフォーラムの記事自体が2年前の古いものです。
最新のContact Form 7では「特別なメールタグ」というものを使う事で、
投稿のタイトル等を取得できます。
Contact Form 7 – 特別なメールタグ
http://contactform7.com/special-mail-tags/?lang=ja
使い方等は上記のContact Form 7公式ページを参照してください。
gatespaceさま
早速のご回答ありがとうございます。
特別なメールタグを拝見しましたが、
これは、例えば、商品詳細ページがあり、この商品に対するお問い合わせということで、
ボタンを押すと、お問い合わせフォームが別ページで表示され、その件名に商品名(記事のタイトル)が自動表示という事も可能でしょうか。
私が確認する限り、
contact form 7の編集画面で、「フォーム」部分では特別なメールタグは使えないようですし、「メッセージ本文」での使用では、お問い合わせフォームを表示している固定ページ名が表示されました。
商品詳細ページと同ページにフォームがないとダメなように感じたのですが、いかがでしょう。
大変恐縮ですが、何かヒントをいただけたらと思います。
宜しくお願いいたします。
先のフォーラムのコードの処理ですが、
フォームのあるページへのリンクで
http://example.com/contact?goods=商品1
としてURLクエリのパラメーターとして2バイト文字を渡しています。(goods=商品1の部分)
最近のブラウザではこの方法で問題ないのですが、古いブラウザで2バイト文字が入る場合は
エンコード・デコード処理をしてあげないとダメです。
ちょっとこの辺が自分の場合は面倒なので、先のフォーラムを元にして
投稿IDから投稿タイトルを付与する方法にしてみました。
(URLクエリにも数字しか入らないからまだ良いかもしれません)
single.php(個別投稿表示用テンプレート)にフォームへのリンクを設置するタグ。
フォームを設置した固定ページのスラッグが「contact」とする。
<a href="<?php echo get_permalink( get_page_by_path ('contact')->ID ); ?>?mailsubjectID=<?php the_ID(); ?>">お問い合わせフォーム</a>
上記の &mailsubjectID=<?php the_ID(); ?>
で投稿のIDをクエリとして渡します。
テーマのfunctions.phpに以下を記述
function my_form_tag_filter($tag){
if ( ! is_array( $tag ) )
return $tag;
if ( isset( $_GET['mailsubjectID'] ) ) {
$name = $tag['name'];
if ( $name == 'your-subject' ) { // [text your-subject] に入れたい場合
$mailsubjectID = $_GET['mailsubjectID'];
$mailsubject = get_post( $mailsubjectID );
$tag['values'] = $mailsubject->post_title;
}
}
return $tag;
}
add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11);
これで [text your-subject]
にリンク元の投稿ページのタイトルが入ります。
ですが、このままだと取得した投稿タイトルを
フォーム入力時にユーザーが改変できますので、
Javascript等でreadonly属性を付加するなどしてください。
すみません、同じようにhttp://example.com/contact?goods=商品1
だとIE8だと、日本語が省かれ半角英数のみ表示さるので、上記の説明のように
以下を投稿ページの編集画面に貼りつけたところ
お問合せがの文字が表示されず、レイアウトが崩れるだけになりました。
どうしてでしょうか?
<div><a href="<?php echo get_permalink( get_page_by_path ('contact')->ID ); ?>&mailsubjectID=<?php the_ID(); ?>">お問い合わせフォーム</a>
</div>
・環境
ブラウザ:IE8
WordPress:3.1.1
テーマ:ソシムのデザインブック添付のsample
PHP:5.3.3
MySQL:5.0.77
利用サーバー エックスサーバー
以下を投稿ページの編集画面に貼りつけたところ
投稿の編集画面内ではPHPのタグが使えません。
PHPのコードはテンプレートファイルに記述してください。
gatespaceさま
ありがとうございます。 そうでした、忘れてました。
Exec-PHP をプラグインして、編集画面内でもphpを有効にしました。
そしてタグを貼りつけ、function.phpも上記のものに替えました。
フォームのページのスラッグは同じくcontactにして
[text your-subject] を貼りつけました。
今度はちゃんとリンクボタンが出ますが、
クリックすると404エラーになります。
アドレスは以下のように出ます。
http://hoge.com/contact/&mailsubjectID=23
お手数ですが、何が原因と考えられるでしょうか?
http://example.com/contact/&mailsubjectID=23
じゃなくて
http://example.com/contact/?mailsubjectID=2
3
ですね。
通常の投稿画面から書くのであれば
<?php echo get_permalink( get_page_by_path ('contact')->ID ); ?>
の部分は、テンプレートタグじゃなくても良いのでは?
通常のリンク作成と同じようにお問い合わせページへのリンクを作成して、
<a href="http://example.com/contact?mailsubjectID=<?php the_ID(); ?>">
の形になればいいのでは?
gatespaceさま
ヒントを頂いておきながら、しばらくフォーラムから離れており、お礼も伝えずに大変失礼いたしました。この件については、無事解決しましたのでご報告とさせていただきます。
ありがとうございました。m(__)m