‘cforms’ タグのついている投稿

WordPress: cforms2 & Ktai-style

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

WordPressのプラグインのcforms2とKtai-Styleの併せ技一本を狙う。
お客さんが携帯サイトをやっていて、携帯からのお問い合わせに対応したいと。しかし、携帯からのお問い合わせで送信されてくるメールが文字化けするんで助けてください!と後輩から頼まれたというのが経緯。

WordPressのフォーラムより、
携帯からの場合は文字コード変換処理を入れるとかの対応が必要だと思います (Ktai Style の is_ktai() 関数を使えばいけそう)。
という情報を手に入れたので、cforms2のソースコードに手をいれて、携帯の場合の処理を追加することにした。
ちなみに、cformsのバージョンは11.0です。

/wp-content/plugins/cforms/lib_validate.phpの先頭に追加。

// 携帯のアクセスの場合のみ、検証の前にUTF-8にエンコードしてしまう。
if(function_exists('is_ktai')){
  if(is_ktai()){
    foreach($_REQUEST as $key => $value){
      $_REQUEST[$key] = mb_convert_encoding($value, 'utf-8', 'auto');
    }
  }
}
// 以下略

次に、/wp-content/plugins/cforms/lib_email.phpを編集。
@mailを@wp_mailに全部変更する。
ここは@mailで検索すればいいのでソース省略。

次に、/wp-content/plugins/cforms/cforms.phpの354行目あたりを修正。

### start with form tag
// $content .= $ntt . '<form enctype="multipart/form-data" action="' . $action . '" method="post" class="cform'.( $cformsSettings['form'.$no]['cforms'.$no.'_dontclear']?' cfnoreset':'' ).'" id="cforms'.$no.'form">' . $nl;
// au でメール送信できないため、enctypeを除去
$content .= $ntt . '<form action="' . $action . '" method="post" class="cform'.( $cformsSettings['form'.$no]['cforms'.$no.'_dontclear']?' cfnoreset':'' ).'" id="cforms'.$no.'form">' . $nl;

これで、開発環境のほうは、メールの文字コードがutf-8で送信できるようになり、携帯からのお問い合わせにも文字化けしなくなった。しなくなったのだが、、、。

本番環境(xreaのcoreserver)で文字化けが続いた。
件名が文字化けするのだ。件名に『=?utf-8?B?44C(略)』と表示された。

調査すること3時間。遂に解決!!原因はWP Multibyte Patchの設定だった。
utf-8でエンコーディングされている件名をiso-2022-jpで解釈してるために化けているみたいだった。

/wp-content/plugins/wp-multibyte-patch/wpmp-config.phpを修正。
ない場合は、wpmp-config-sample.phpをコピーしてwpmp-config.phpを作成して修正。

// wp_mailに対してのパッチを外す
$wpmp_conf['patch_wp_mail'] = false;

ちなみに、上記の設定をtrueにしたままパッチプラグインの/ext/ja/config.phpでUTF-8を使うように指定したら、何故かさらに文字化けた。本文までiso-2022-jpで解釈されてしまった。UTF-8って指定したのに!!このあたりはまだよくわかっていない箇所なので、もっといい設定があるのかもしれない。

最後に、cformsのmy-functions.phpを修正する。
携帯でのアクセスの場合のみ、検証処理後に出力に用いられるデータをutf-8にエンコードしておく。

// 値の検証後、出力前にコールされる関数
function my_cforms_filter($POSTdata){
	if(function_exists('is_ktai')){
		if(is_ktai()){
			foreach($POSTdata as $key => $value){
				$POSTdata[$key] = mb_convert_encoding($value, 'utf-8', 'auto');
			}
		}
	}
	return $POSTdata;
}

これで、パソコンと携帯からお問い合わせフォームを利用してみたが、どちらも文字化けせずにメールが届いた!後輩も喜んで一件落着!!


WordPress:cforms2で、メール送信できないエラー

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

仕事でWordPressを使ってサイトの作っているのだが、お問い合わせのページを作るのに、cform2を使おうかと思って、今調査中。ローカル環境(Windows)で設置したあと、グローバル環境(Linux)にコピーしたら、動かなかったので、調査したところ、原因が発覚したのでメモしとく。

http://wordpress4cms.net/202/

/cforms/js/cforms.jsの、/cforms/lib_ajax.phpを指しているパスが違った。

var sajax_uri = 'http://localhost/wp-content/plugins/cforms/lib_ajax.php';

になってたので、

var sajax_uri = '/wp-content/plugins/cforms/lib_ajax.php';

に変更した。

このようにしたところ、500 Internal Server Error発生。ムムム。
/cforms/abspath.phpで設定されているWordPressへのパスがWindows上のパスのままだったので、
Linux上のパスに変更したところ、ちゃんとメール送信できた。

とりあえず、メールは送信できたのだが、まだメールのエンコードがUTF-8のままなので、ISO-2022-JPに変更する方法を調査する必要がある。


Get Adobe Flash playerPlugin by wpburn.com wordpress themes