Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Contact Form7のメール送信&表示のカスタマイズ

WordPressのお問い合わせフォームを設置しようと思いまして、こちらを使ってみました。

Contact Form 7 - WordPress のお問い合わせフォームプラグイン。シンプル、でも柔軟。

設置そのものはとても簡単です。プラグインDL→うp→有効化→ページ作る→フォームのコードをコピペで、完了です。

で、カスタマイズしてみたのでメモっておきます。

メールが届かない

画面上エラーになっていないけど全くメールが届かない場合があります。

このプラグインはメール送信にwp_mail()という関数を使います。PHP標準のmail()のラッパーでダブルバイト処理などをよしなにやってくれます。ただ、mail()は基本的にメールサーバーがあることを前提に動く関数の為、僕のローカル環境のようにメールサーバがない環境だと動きません。

メールサーバーを持っていないクライアントもいたりするし、GMailで送りたい人もいる、と。

というわけで、wordpressのwp_mail()をSMTP送信をするように変えてみました。下記プラグインをDLします。phpmailerのラッパーみたいです。

WordPress › Configure SMTP « WordPress Plugins

設定方法はすげー簡単なので割愛します。見ればわかる。Sender e-mailという項目はReturn-PathとFromにあたるものなので、ここは必ず入れましょう。Return-pathが無いとケータイに届かない場合があった気がしたので。

表示位置を変えたい

エラーとか完了メッセージとかの表示位置を変えるには、フォームの編集エリアの任意の位置に

<div class="wpcf7-response-output"></div>

を入れます。これで任意の位置に出ます。displayはnoneにしておいてね。

ただ、このままだと2箇所表示されますので、ちょっとカスタマイズします。contact-form-7\includes\classes.phpを開いて、66行目あたりのコードをコメントアウトするだけ。

//contact-form-7\includes\class.php
<?php
	function form_html() {
		$form = '<div class="wpcf7" id="' . $this->unit_tag . '">';

		$url = wpcf7_get_request_uri();

		if ( $frag = strstr( $url, '#' ) )
			$url = substr( $url, 0, -strlen( $frag ) );

		$url .= '#' . $this->unit_tag;

		$url = apply_filters( 'wpcf7_form_action_url', $url );
		$url = esc_url_raw( $url );

		$enctype = apply_filters( 'wpcf7_form_enctype', '' );

		$form .= '<form action="' . $url
			. '" method="post" class="wpcf7-form"' . $enctype . '>' . "\n";
		$form .= '<div style="display: none;">' . "\n";
		$form .= '<input type="hidden" name="_wpcf7" value="'
			. esc_attr( $this->id ) . '" />' . "\n";
		$form .= '<input type="hidden" name="_wpcf7_version" value="'
			. esc_attr( WPCF7_VERSION ) . '" />' . "\n";
		$form .= '<input type="hidden" name="_wpcf7_unit_tag" value="'
			. esc_attr( $this->unit_tag ) . '" />' . "\n";
		$form .= '</div>' . "\n";
		$form .= $this->form_elements();
                if ( ! $this->responses_count )
                        //コメントアウトする
			//$form .= $this->form_response_output();

		$form .= '</form>';

		$form .= '</div>';

		return $form;
	}

formという文字列の最後に表示領域をくっつけているので、そいつをやめさせればいいだけです。

いじょ。