サポート » プラグイン » Contact form 7 記事タイトルの自動表示でIEだけ日本語が表示されない

  • 解決済 mh220aki

    (@mh220aki)


    はじめまして。
    こちらの記事を参考に、contact form 7 で投稿記事のタイトルを取得し、フォームの件名にタイトルを表示することができました。
    http://ja.forums.wordpress.org/topic/3380?replies=10

    firefoxやChromeでは正常にタイトルが表示されるのですが、
    IE8だと、日本語が省かれ半角英数のみ表示されます。
    IE7やIE6でも同じ症状でした。

    どなたか原因わかられる方いらっしゃいますでしょうか。
    宜しくお願いいたします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • モデレーター gatespace

    (@gatespace)

    こんにちは。

    参照されたフォーラムの記事自体が2年前の古いものです。
    最新のContact Form 7では「特別なメールタグ」というものを使う事で、
    投稿のタイトル等を取得できます。

    Contact Form 7 – 特別なメールタグ
    http://contactform7.com/special-mail-tags/?lang=ja

    使い方等は上記のContact Form 7公式ページを参照してください。

    トピック投稿者 mh220aki

    (@mh220aki)

    gatespaceさま

    早速のご回答ありがとうございます。
    特別なメールタグを拝見しましたが、
    これは、例えば、商品詳細ページがあり、この商品に対するお問い合わせということで、
    ボタンを押すと、お問い合わせフォームが別ページで表示され、その件名に商品名(記事のタイトル)が自動表示という事も可能でしょうか。

    私が確認する限り、
    contact form 7の編集画面で、「フォーム」部分では特別なメールタグは使えないようですし、「メッセージ本文」での使用では、お問い合わせフォームを表示している固定ページ名が表示されました。
    商品詳細ページと同ページにフォームがないとダメなように感じたのですが、いかがでしょう。
    大変恐縮ですが、何かヒントをいただけたらと思います。
    宜しくお願いいたします。

    モデレーター gatespace

    (@gatespace)

    先のフォーラムのコードの処理ですが、
    フォームのあるページへのリンクで
    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
    利用サーバー エックスサーバー

    モデレーター gatespace

    (@gatespace)

    以下を投稿ページの編集画面に貼りつけたところ

    投稿の編集画面内ではPHPのタグが使えません。
    PHPのコードはテンプレートファイルに記述してください。

    gatespaceさま

    ありがとうございます。 そうでした、忘れてました。
    Exec-PHP をプラグインして、編集画面内でもphpを有効にしました。
    そしてタグを貼りつけ、function.phpも上記のものに替えました。
    フォームのページのスラッグは同じくcontactにして
    [text your-subject] を貼りつけました。
    今度はちゃんとリンクボタンが出ますが、
    クリックすると404エラーになります。

    アドレスは以下のように出ます。
    http://hoge.com/contact/&mailsubjectID=23

    お手数ですが、何が原因と考えられるでしょうか?

    モデレーター gatespace

    (@gatespace)

    http://example.com/contact/&mailsubjectID=23
    じゃなくて
    http://example.com/contact/?mailsubjectID=23
    ですね。

    通常の投稿画面から書くのであれば
    <?php echo get_permalink( get_page_by_path ('contact')->ID ); ?>
    の部分は、テンプレートタグじゃなくても良いのでは?
    通常のリンク作成と同じようにお問い合わせページへのリンクを作成して、
    <a href="http://example.com/contact?mailsubjectID=<?php the_ID(); ?>">
    の形になればいいのでは?

    gatespaceさん

    完璧です。出来ました。ありがとうございます。

    トピック投稿者 mh220aki

    (@mh220aki)

    gatespaceさま

    ヒントを頂いておきながら、しばらくフォーラムから離れており、お礼も伝えずに大変失礼いたしました。この件については、無事解決しましたのでご報告とさせていただきます。
    ありがとうございました。m(__)m

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「Contact form 7 記事タイトルの自動表示でIEだけ日本語が表示されない」には新たに返信することはできません。