0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Contact Form7を用いて、フォーム入力時の日時を成形してメールに表示する

Last updated at Posted at 2025-03-28

背景

wordpress開発においてContact Form7を用いてフォームを作成する際、メールに(yyyy年mm月dd日 hh:mm)という形式で送信日時を表示する必要がありました。

しかし、日時のデフォルト表記は決まっており、そのままでは理想通りの成形(yyyy年mm月dd日 hh:mm)ができない状態でした。

同じような成形を行なっているナレッジが少なかったことから、備忘録という形で記事にさせていただきます。

実現したいこと

管理者用メール、フォール送信者用メールの2つのメールに(yyyy年mm月dd日 hh:mm)形式の日時を表示させること。

結論

以下のコードをfunctions.phpに記載し、WordPress管理画面で[custom-date]を用いることで、フォーム送信の日時を自分好みに成形して表示させることができます。

functions.php
// フォーム入力時の日時を整形してメールに表示
add_action('wpcf7_before_send_mail', 'add_custom_cf7_date_before_mail');
function add_custom_cf7_date_before_mail($wpcf7_data)
{
    date_default_timezone_set('Asia/Tokyo');
    $current_date = date('Y年n月j日 G:i');

    // メールのプロパティを取得し [custom-date] を置換
    $mails = ['mail' => $wpcf7_data->prop('mail'), 'mail_2' => $wpcf7_data->prop('mail_2')];

    foreach ($mails as $key => &$mail) {
        if (!empty($mail)) {
            $mail['body'] = str_replace('[custom-date]', $current_date, $mail['body']);
        }
    }

    $wpcf7_data->set_properties($mails);
    return $wpcf7_data;
}

コード部分の説明

関数宣言部分

functions.php
add_action('wpcf7_before_send_mail', 'add_custom_cf7_date_before_mail');
function add_custom_cf7_date_before_mail($wpcf7_data)

wpcf7_before_send_mailは、Contact Form 7 がメールを送信する前に呼ばれるフックであり、add_custom_cf7_date_before_mailという関数をこのフックに登録しています。
※メール送信する前に呼ばれる=メール送信時の日時取得が可能

また、$wpcf7_dataは送信フォーム全体のデータ(フォームの内容やメール設定など)が入ったオブジェクトであり、これを引数として受け取ることでフォームに設定されたメールの本文を取得できるようになります。


現在時刻の取得部分

functions.php
// タイムゾーンを東京に合わせる
date_default_timezone_set('Asia/Tokyo');
// function実行時刻(フォーム送信時刻)を取得し、「'Y年n月j日 G:i'」という形式に成形
$current_date = date('Y年n月j日 G:i');

PHPのdate()関数を使うことで、現在の日時(時刻を含む)を取得し、好きなフォーマットで表示することが可能になります。


メール設定の取得部分

functions.php
// メールのプロパティを取得し [custom-date] を置換
$mails = ['mail' => $wpcf7_data->prop('mail'), 'mail_2' => $wpcf7_data->prop('mail_2')];

Contact Form 7 には2つのメール送信設定があり、
・mail → 管理者宛のメール
・mail_2 → ユーザー(フォーム送信者)宛のメール

と設定されています。

ここではそれぞれのメール設定を配列として取得しています。


custom-dateの置換部分

functions.php
foreach ($mails as $key => &$mail) {
        if (!empty($mail)) {
            // メール本文($mail['body'])に含まれている [custom-date] という文字列を、変数 $current_date の値に置き換える。
            $mail['body'] = str_replace('[custom-date]', $current_date, $mail['body']);
        }
}

foreachを用いてメールごとに(管理者宛のメール、フォーム送信者宛のメール)、メール本文に含まれている[custom-date] という文字列を、変数 $current_date の値に置き換えています。


Wordpress側の説明

管理画面のサイドバーより、「お問い合わせ」>「コンタクトフォーム」> タイトルを選択 >「メール」のメッセージ本文に、[custom-date]を入力します。

image.png


以上の流れで、(yyyy年mm月dd日 hh:mm)形式の日時を表示することができました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?