• 現在、コンタクトフォーム7のフォーム送信から記事投稿ができるようカスタマイズを行っているのですが、フォームでアップロードした画像のメディアライブラリへのアップロードと記事のカスタムフィールドへの追加がうまくいかない状態です。

    メディアライブラリへは、画像が保存される代わりに、ファイル名が「array」と記載されている謎のファイルが保存されています。

    当方PHPはコピペでなんとか触れる程度で、参考サイトを見ながらできる範囲いろいろと試してみましたが解決することができず…。

    先日もこちらで助けていただいたばかりで大変恐縮なのですが、詳しい方がいらっしゃいましたら解決策をご教授いただけますと幸いです。

    ↓コード

    //フォーム送信時にブログ投稿をおこなう
    function wpcf7_insert_post(\WPCF7_ContactForm $contactForm)
    {
    //送信情報を取得
    $submission = WPCF7_Submission::get_instance();
        $form_id = $contactForm->id();
     
    if($submission && $form_id == "40") {
    $formdata = $submission->get_posted_data();
    $uploaded_files = $submission->uploaded_files();
    $uploaded_files2 = $submission->uploaded_files();
    $uploaded_files3 = $submission->uploaded_files();
    $new_post = array(
    'post_type' => 'user-report',
    'post_title' => $formdata['ttl'],
    'post_status' => 'draft', //下書き
    'post_content' => $formdata['your-txt']
    );
    //ブログ作成
    $post_id = wp_insert_post($new_post);
    //作成に成功した場合
    if(!is_wp_error($post_id)) {
    //カテゴリを取得
    $item1 = $_POST['product-select1'];
    $term1 = get_term_by('name', $item1 ,'use_item');
    $term_id1 = $term1->term_id;
    $item2 = $_POST['product-select2'];
    $term2 = get_term_by('name', $item2 ,'use_item');
    $term_id2 = $term2->term_id;
    $item3 = $_POST['product-select3'];
    $term3 = get_term_by('name', $item3 ,'use_item');
    $term_id3 = $term3->term_id;
    //カスタムフィールドのデータも登録する
    wp_set_object_terms($post_id,array($term_id1,$term_id2,$term_id3),'use_item');
    add_post_meta($post_id, 'name', $formdata['your-handlename']);
    add_post_meta($post_id, 'date', $formdata['date']);
    add_post_meta($post_id, 'time', $formdata['time']);
    add_post_meta($post_id, 'field', $_POST['area']);
    add_post_meta($post_id, 'field1', $formdata['area2']);
    add_post_meta($post_id, 'results', $formdata['catch']); 
      /* 画像の設定 */
                if (isset($uploaded_files['photo1'])) {
                    $thumb_path = '/user-report/' . str_replace($baseurl, '', $uploaded_files['photo1']);
                    $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['photo1'], $post_id, $time);
                    update_field('photo1', $thumb_id,  $post_id);
                }
     if (isset($uploaded_files2['photo2'])) {
                    $thumb_path = '/user-report/' . str_replace($baseurl, '', $uploaded_files['photo2']);
                    $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['photo2'], $post_id, $time);
                    update_field('photo2', $thumb_id,  $post_id);
                }
     if (isset($uploaded_files3['photo3'])) {
                    $thumb_path = '/user-report/' . str_replace($baseurl, '', $uploaded_files['photo3']);
                    $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['photo3'], $post_id, $time);
                    update_field('photo3', $thumb_id,  $post_id);
                } 
     }
    }
    }
    add_action('wpcf7_mail_sent', 'wpcf7_insert_post', 10, 1);
    
    /* 画像の詳細処理 */
    function addAttachmentFromForm($filename, $file_base, $post_id, $time) {
    $layout_img_value = '';
     $filetype = wp_check_filetype( basename( $filename ), null );
    $wp_upload_dir = wp_upload_dir();
    $upfile = $wp_upload_dir['url'] . '/' . $time . basename( $filename );
    $copyfile = $wp_upload_dir['path'] .'/' . $time . basename( $filename );
    copy($file_base, $copyfile);
    $attachment = array(
        'guid'           => $upfile,
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/.[^.]+$/', '', basename( $upfile ) ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $copyfile, $post_id );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $copyfile );
    wp_update_attachment_metadata( $attach_id, $attach_data );
    
    if($attach_id) return $attach_id;
    else return false;
    }

    ↓仕様

    ・フォームでは、JPG、PNGなどの画像データのみをアップロード

    ・カスタムフィールドは、Advanced Custom Fieldsで作成。

    画像を入れたいフィールドの設定➡フィールドタイプ:画像、ライブラリ:投稿にアップロード

    ・最大3枚の画像をアップロード

    ↓参考にしたサイト

    https://qiita.com/webiscuit/items/23a2b0f9d218a0d972eb

    https://teratail.com/questions/274973

    何卒よろしくお願い致します。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • nagisaneさん、こんにちは。

    参考サイトのコピペで動作するかどうかは検証するにも時間や労力がかかってしまうので、フォーラムで回答が付くのは意外に難しいかもしれません。

    PHP に関して初心者とのことのようですので、この手の大きなコードのコピペのみでの稼働は非常に難しいと考えます。手法としては参考サイトに記載されているコードをご自身で読み解きながら、必要な箇所の最低限の機能追加から試されてみることをお勧めいたします。

    具体的には画像をアップロードしたいことが目的かと思いますので、いきなりカスタムフィールドへの追加を行わず、最低限の内容のテスト用フォームからサーバー上のどこかのディレクトリへ画像が正常にアップロードできるところまでを検証されてみてはいかがでしょうか。

    ContactForm 7 を利用されている場合、記憶が正しければフォームに添付されたファイルは一時的にサーバー上にアップロードされてもメールへの添付送信が完了した際に削除されサーバー上には残らなかったと思います。ですのでまずはフォームから送信されたファイルがどこか適切なディレクトリへ保存されるコードを書き、確実に保存できることを確認すること辺りから検証されると良いのではないでしょうか。

    ご参考になれば。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「コンタクトフォーム7から記事作成した際の画像保存」には新たに返信することはできません。