Contact Form 7 の送信内容をプラグインなしで保存する:カスタム投稿に記事として残す

WordPress 6.4.3
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

お問い合わせの履歴をプラグインを使わずに保存できるようにするためのカスタマイズ。カスタム投稿を事前に用意する必要があります。お問い合わせの履歴としての使い方だけでなく、ユーザー投稿型の機能もこちらのカスタマイズで簡単に実装が行えます。

カスタム投稿を追加する

カスタム投稿記事としてメールを保存

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 の post= の数字を確認します。

実装後フォームから送信を行い動作確認

Contact Form 7 の送信内容をプラグインなしで保存する:カスタム投稿に記事として残す

正しく動いていれば、上の画像のように、管理画面のカスタム投稿の一覧に送信内容が表示されます。

こちらの機能を使って投稿機能を実装

メールの送信履歴保存で使うのも便利ですが、ユーザー投稿型のコンテンツサイトにも使えます。

Contact Form 7 を使って、利用者からの投稿を記事として表示する機能も作れます。

WordPress Developer Resources

SiteBeacon(サイトビーコン)

サイトが止まったら、すぐに気づける。

ホームページを 5 分ごとにチェックして、止まったとき・エラーが出たとき・SSL やドメインの期限が近いときに、メールでお知らせします。2 サイトまでは、ずっと無料で使えます。

SiteBeacon を見る サイトを直す相談をする

監視で気づいたあとの直す作業も、同じ担当がお受けします。