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);
}
}
}
}
}
}
}