Contact Form 7 の送信データから自動で投稿を作成し、ACF のグループフィールドに反映させる
カテゴリー: WordPress
この記事は2020年7月7日に書かれたものです。情報が古い可能性がありますのでご注意ください。
WordPress でメールフォームから送信されたデータを元に、自動で投稿を作成したい案件があり、調べてみたら Contact Form 7 を使うと実装できることがわかりました。
ContactForm7のフォーム送信時に自動でブログ記事を作成する方法
Contact Form 7 で用意されているフック「wpcf7_mail_sent」を利用して投稿を作成できるというもので、カスタムフィールドの値も登録することができ、まさに実現したい仕様でしたが、今回、Advanced Custom Fields (ACF) プラグインのグループフィールドのサブフィールドにもデータを登録する必要がありました。
そこで、次の記事を参考にして、上記の方法と組み合わせることで実現することができました。
【WordPress】PHPプログラムからAdvanced Custom Fieldsの繰り返しフィールドに値を保存する方法 – 上尾市のWEBプログラマーによるブログ
更に、Contact Form 7 Serial Numbers プラグインによる連番も取得してカスタムフィールドに反映してみました。
// フォーム送信時にブログ投稿をおこなう
function wpcf7_insert_post(){
// 送信情報を取得
$submission = WPCF7_Submission::get_instance();
if($submission) {
$formdata = $submission->get_posted_data();
// cf7_serial_number の値を3桁にして取得
$formid = $submission->get_contact_form()->id();
$serialnumber = sprintf('%03d', get_option('nklab_wpcf7sn_count_'. $formid));
// 投稿を作成
$new_post = array(
'post_type' => 'post',
'post_title' => $formdata['your_title'],
'post_content' => $formdata['your_content'],
'post_status' => 'draft' // 下書きで保存
);
$post_id = wp_insert_post($new_post);
// 作成に成功した場合
if(!is_wp_error($post_id)) {
// カスタムフィールドのデータを登録する
update_post_meta($post_id, 'custom_number', $serialnumber); // 連番
update_post_meta($post_id, 'custom_field1', $formdata['your_field1']);
update_post_meta($post_id, 'custom_field2', $formdata['your_field2']);
update_post_meta($post_id, 'custom_field3', $formdata['your_field3']);
// グループフィールド(5つのサブフィールド)
update_post_meta($post_id, 'custom_group', 5);
update_post_meta($post_id, 'custom_group_sub_field1', $formdata['your_field4']);
update_post_meta($post_id, 'custom_group_sub_field2', $formdata['your_field5']);
update_post_meta($post_id, 'custom_group_sub_field3', $formdata['your_field6']);
update_post_meta($post_id, 'custom_group_sub_field4', $formdata['your_field7']);
update_post_meta($post_id, 'custom_group_sub_field5', $formdata['your_field8']);
}
}
}
add_action('wpcf7_mail_sent', 'wpcf7_insert_post', 10, 1);
先の「ContactForm7のフォーム送信時に自動でブログ記事を作成する方法」の記事では、カスタムフィールドのデータを登録する部分で add_post_meta
が使用されていますが、今回 ACF で既に用意されたカスタムフィールドにデータを登録するので、update_post_meta
としています。
そして、以下の記述でグループフィールドのサブフィールドにデータを登録することができました。
update_post_meta($post_id, グループフィールドのフィールド名, サブフィールドの件数);
(サブフィールドの件数分繰り返し)
update_post_meta($post_id, グループフィールドのフィールド名_サブフィールドのフィールド名, 登録するデータ);
(2020年7月15日訂正)
上記コード10行目のフォームIDの取得の記述を $formid = $data['_wpcf7'];
としていましたが、Contact Form 7 ver.5.2 で取得できなくなりましたので、$formid = $submission->get_contact_form()->id();
に変更しました。