Contact Form 7に通し番号、タイムスタンプをつけるプラグインの使用方法と改修してさらに使いやすくする(2)

前回紹介した記事では、導入方法と基本的な使用方法を紹介した「Contact Form 7」の拡張プラグイン、「Contact Form 7 Serial Numbers」ですが、今回はタイムスタンプ機能を改修し、ミリ秒(UNIX時間)ではなく、今日の日付の形式(年月日)で通し番号を付与する方法を紹介します。
前回の記事も合わせてご覧いただくと、流れが掴みやすいかと思います。
Contact Form 7に通し番号、タイムスタンプをつけるプラグインの使用方法と改修してさらに使いやすくする(1)
Contents index
該当のプラグインを改修する
大きく分けて今回で改修するのは以下のファイルになります。
- contact-form-7-serial-numbers.php
- includes/class-contact_list_table.php
上記ファイルバックアップ、また、wordpressサイトのバックアップも同時に行うことをお勧めいたします。
改修に間違えて失敗するとサイトが表示されなくなります。
contact-form-7-serial-numbers.phpを改修する
第1のステップとしてはまずこのファイルから改修を行います。
下記のコードを基本コピペするだけで問題ありません。
1.日本で使用する場合はタイムゾーンの指定をします。
このプラグイン自体にはタイムゾーンの設定がないのでwordpressデフォルトのタイムゾーンで出力されるのを防ぐため、該当ファイルの上部に下記コードを組み込みます。
これがないと年月日(YMD)で取得する際に、世界標準時間になってしまいます。
date_default_timezone_set('Asia/Tokyo');
2.タイムスタンプを(YMD)形式に変更
プレーンな状態ではミリ秒(UNIX時間)となっているので、該当の箇所を書き換えて年月日(YMD)に変更します。
複数箇所あるので書き換え箇所を間違えないように注意が必要です。
まずはプレーン状態の196行目以下の下記コードを置き換えます。
case 2:
// タイムスタンプ
$output = microtime( true ) * 10000;
break;
default:
$output = '';
}
$output = $prefix . $output;
上記コードを下記に置き換えます。
case 2:
// タイムスタンプ
$output = date("Ymd") . $count + 1;
if ( $digits ) {
$output = date("Ymd") . sprintf( "%0" . $digits . "d" , $count + 1 );
}
break;
default:
$output = '';
}
$output = $prefix . ( $output - 1 );
年月日に書き換えるコードの他に、通し番号の機能であった桁数も年月日の末尾に挿入されるようにします。
※桁数が4桁で最初のカウントの場合
2箇所目はプレーン状態の238行目以下の下記コードを置き換えます。
case 2:
// タイムスタンプ
$output = microtime( true ) * 10000;
break;
default:
$output = '';
}
上記コードを下記に置き換えます。
case 2:
// タイムスタンプ
$output = date("Ymd") . $count + 1;
if ( $digits ) {
$output = date("Ymd") . sprintf( "%0" . $digits . "d" , $count + 1 );
}
break;
default:
$output = '';
}
サクサクいきましょう。
3箇所目は282行目以下の下記コードを置き換えます。
case 2:
// タイムスタンプ(メール生成時のタイムスタンプとは異なる)
$output = microtime( true ) * 10000;
break;
default:
}
上記コードを下記に置き換えます。
case 2:
// タイムスタンプ(メール生成時のタイムスタンプとは異なる)
$output = date("Ymd") . $count + 1;
if ( $digits ) {
$output = date("Ymd") . sprintf( "%0" . $digits . "d" , $count + 1 );
}
break;
default:
$output = '';
}
3箇所全て書き換えが完了したら、このファイルでの書き換えは終了となります。
3箇所ともほぼ同じコードに見えますが、1箇所目のみ微妙にコードが違いますので書き換えする際は注意しながら行ってください。
class-contact_list_table.phpを編集する
管理画面上で桁数などを管理すために必要な改修です。
こちらのファイルは、管理画面上でのフロントエンド側に近いプログラムコードです。
桁数などを管理するために該当の箇所を書き換える必要があります。
プレーン状態の86行目以下を書き換えます。
. ' <input type="radio" name="nklab_wpcf7sn_type_' . $html_encoded_id . '" value="2" ' . ( $type == 2 ? 'checked' : '' ) . ' /><label>' . __( 'Timestamp (ms)', ContactForm7_Serial_Numbers::DOMAIN ) . '</label>'
上記コードを下記に置き換えます。
. ' <input type="radio" name="nklab_wpcf7sn_type_' . $html_encoded_id . '" value="2" ' . ( $type == 2 ? 'checked' : '' ) . ' /><label>' . __( 'タイムスタンプ (YMD)', ContactForm7_Serial_Numbers::DOMAIN ) . '</label><br />'
. ' <span class="indent"><label>' . __( 'Now Count value', ContactForm7_Serial_Numbers::DOMAIN ) . '</label> : <input type="text" name="nklab_wpcf7sn_count_' . $html_encoded_id . '" id="nklab_wpcf7sn_count_' . $html_encoded_id . '" value="' . $count . '" size="5" maxlength="4" /> <input type="button" id="CountModify' . $html_encoded_id . '" data-id="' . $html_encoded_id . '" class="button-primary" value="' . __( 'Set', ContactForm7_Serial_Numbers::DOMAIN ) . '" /></span>'
. ' <span class="indent"><label>' . __( 'Number of digits', ContactForm7_Serial_Numbers::DOMAIN ) . '</label> : <input type="text" name="nklab_wpcf7sn_digits_' . $html_encoded_id . '" value="' . $digits . '" size="2" maxlength="2" /></span>'
. ' <p>例)接続語(No.) + 2021年1月1日 + 桁数(4桁の場合でカウント1の場合)<br>No.202101010001</p>'
先頭に「.(ドット・カンマ)」が付いている状態で書き換えてください。
これが抜けて状態だと正しく表示されないどころか、サイトが表示されなくなる恐れがあります。
書き換えたファイルを上書きする
上記手順で編集した2つのファイルをそれぞれのディレクトリに上書きします。
wordpressのプラグインエディターでも上記までの書き換えは可能ですが、可能であればFTPソフトなどで置き換えを推奨します。
管理画面で正しく表示されるか確認する
ここまでで間違えがなく、正しく上書きできていれば下記の図のような表示になります。

タイムスタンプ(YMD)に変更されているかと思います。
例でも記載してありますが、接続語も使用できるので、接続語 + タイムスタンプ(YMD)+ カウント(桁数)で表示されます。
メールでの実際の表示はどうか
メールクライアントで若干の見え方に違いが出るかと思いますが、大体下記の図のような表示になるかと思います。

表示できていたらここで完了、お疲れ様でした
いかがでしたでしょうか、正しく表示されていますか?
ここまでの手順に間違いがなければタイムスタンプ(UNIX時間)を年月日(YMD)に変更できているかと思います。
年月日で管理すると、いつ管理番号が発行されたか管理者だけではなくメール送信者にも直感的にわかるようになるのでミリ秒ではなく年月日で管理したい方向けの記事になりました。
どちらで管理するかはクライアントベースなどにもよって来るかと思いますので、状況に応じて変更するのが良いかもしれません。