【WordPress】Contact Form 7で画像をACFカスタムフィールドに登録する

ContactForm7で画像をカスタムフィールドに追加 Wordpress
ContactForm7で画像をカスタムフィールドに追加

ContactForm7での方法が検索しても出てくる情報が古かったりで、忘れないようにメモ書きです。

Contact Form 7送信時のフックアクションに追加

Contact Form 7 のアクションを使用します

add_action('wpcf7_before_send_mail', 'wpcf7_insert_post', 10, 1);

アップロードされた画像の情報を取得

Contact Form 7からアップロードされたファイル情報は下記で取得できます

$submission = WPCF7_Submission::get_instance();
$uploaded_files = $submission->uploaded_files();

最終ソースコード

add_action('wpcf7_before_send_mail', 'wpcf7_insert_post', 10, 1);

//フォーム送信時に投稿
function wpcf7_insert_post(){
  $submission = WPCF7_Submission::get_instance();
  if($submission) {
        $posted_data = $submission->get_posted_data();
        $uploaded_files = $submission->uploaded_files();
        $timestamp = $submission->get_meta('timestamp');
        $time = date('Ymd_Gi',$timestamp);
    extract($posted_data);
    $new_post = array(
      'post_title' => $posted_data['your-subject'],
      'post_status' => 'draft', //下書き
    );
    
    //投稿
    $post_id = wp_insert_post($new_post);
    
    //作成に成功した場合
    if(!is_wp_error($post_id)) {
      /* 画像の設定 */
      if(isset($uploaded_files['file-test'])) {
        foreach ($uploaded_files['file-test'] as $value) {
          $file = $value;
          // アップロードファイル名(timestamp追加)
          $filename = $time .basename($file);
          
          $upload_file = wp_upload_bits($filename, null, file_get_contents($file));
          if (!$upload_file['error']) {
            // ファイルタイプチェック
            $wp_filetype = wp_check_filetype($filename, null);
            
            $attachment = array(
              'post_mime_type' => $wp_filetype['type'],
              'post_parent' => $post_id,
              'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
              'post_content' => '',
              'post_status' => 'inherit'
            );

            $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], $post_id);

            if (!is_wp_error($attachment_id)) {
              require_once( ABSPATH . 'wp-admin/includes/image.php');
              $attach_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
              wp_update_attachment_metadata( $attachment_id, $attach_data);

              // ACFカスタムフィールド
              update_field('test_img', $attachment_id, $post_id);

              // アイキャッチ画像にも同じ画像を設定
              set_post_thumbnail( $post_id, $attachment_id);
            }
          }
        }
      }
    }
  }
}
タイトルとURLをコピーしました