カスタム投稿を追加する
カスタム投稿記事としてメールを保存
/*----------------------------------------------------
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 の post= の数字を確認します。
実装後フォームから送信を行い動作確認

正しく動いていれば、上の画像のように、管理画面のカスタム投稿の一覧に送信内容が表示されます。
こちらの機能を使って投稿機能を実装
メールの送信履歴保存で使うのも便利ですが、ユーザー投稿型のコンテンツサイトにも使えます。
Contact Form 7 を使って、利用者からの投稿を記事として表示する機能も作れます。

