概要説明
お問い合わせの履歴をプラグインを使わずに保存できるようにするためのカスタマイズ。カスタム投稿を事前に用意する必要があります。お問い合わせの履歴としての使い方だけでなく、ユーザー投稿型の機能もこちらのカスタマイズで簡単に実装が行えます。
カスタム投稿記事としてメールを保存
functions.php
/*----------------------------------------------------
Contact Form 7 から送信された情報をカスタム投稿に保存させる
----------------------------------------------------*/
if ( ! function_exists( 'wpcf7_send_add_post' ) ) {
function wpcf7_send_add_post( $contact_form ) {
// 特定のフォームの場合のみとしたい場合は id を使用
// 管理画面からフォームの編集画面を表示させ url の post=55 の部分を指定
if ( 55 !== (int) $contact_form->id() ) {
return;
}
// 送信情報を取得
$submission = WPCF7_Submission::get_instance();
if ( ! $submission ) {
return;
}
$formdata = $submission->get_posted_data();
// 例) 本文とメールアドレスを記事本文に設定(ない欄は空にする)
$message = isset( $formdata['your-message'] ) ? $formdata['your-message'] : '';
$email = isset( $formdata['your-email'] ) ? $formdata['your-email'] : '';
$subject = isset( $formdata['your-subject'] ) ? $formdata['your-subject'] : '(件名なし)';
// 投稿を作成
wp_insert_post( array(
'post_type' => 'mail_history', // メール履歴用のカスタム投稿を事前に用意
'post_title' => sanitize_text_field( $subject ), // 記事タイトル
'post_content' => sanitize_textarea_field( $message ) . "\n" . sanitize_email( $email ), // 本文
'post_status' => 'draft', // 下書き保存
) );
}
add_action( 'wpcf7_mail_sent', 'wpcf7_send_add_post' );
}
以前のコードは、if の行のかっこが 1 つ多く、functions.php に貼るとエラーで画面が真っ白になる状態でした。お詫びして直しました(2026/10/18)。あわせて、フォームの id の確かめを先にし、件名などの欄がないフォームでも警告が出ないようにしています。
お問い合わせの内容(メールアドレスなど)をサイトの中に残すことになるので、プライバシーポリシーにも「お問い合わせの内容を保存すること」を書いておきましょう。
/wp-admin/admin.php?page=wpcf7&post=55&action=edit
特定のフォームのみという制限を加える場合は管理画面のフォーム編集画面を表示させ、URL内に含まれるパラメーターを確認します
実装後フォームから送信を行い動作確認
正常に動作していると上記のように管理画面のカスタム投稿一覧画面にフォームからの送信内容が表示されるようになります
こちらの機能を使って投稿機能を実装
メールの送信履歴保存で使うのも便利ですが、ユーザー投稿型のコンテンツサイトにも使えます。
Contact Form 7 を使ってユーザーからの投稿を記事として表示させるような機能を簡単に作ることができます。


