web-dev-qa-db-ja.com

Gravity Formsの繰り返し可能なファイルアップロードの画像を添付ファイルとして保存する

Gravity FormsとGravity Forms + Custom Post Typesプラグインを使用して、複数の画像を添付ファイルとして投稿にアップロードしようとしています。

重力フォームのgform_column_input_filterを使用して、繰り返し可能なFile Uploadフィールドがあります。それがどのように達成されたかについては この質問 を見てください。

それから私はこの BandonRandonのコードを のように繰り返し可能なFile Uploadフィールドを使うようにしました。

 add_filter("gform_after_submission", "nifty_add_post_attachements", 10, 3);
 function nifty_add_post_attachements($entry) {

 //you'll need this later, TRUST ME.
 if ( !function_exists('wp_generate_attachment_metadata') ) {
    require_once(ABSPATH . 'wp-admin/includes/image.php');
 }

//do we even have a file?
 if ( isset($_FILES['input_2']) ) {
     $file_urls = $entry['2']; //great but what is its url?
     $file_array = unserialize($file_urls);

     foreach ( $file_array as $file_url ) {

         $upload_dir = wp_upload_dir(); //where do you want to put it?
         $file_data = file_get_contents($file_url); //show me what you're made of
         $filename = basename($file_url); //so cute but what's its name?
         if(wp_mkdir_p($upload_dir['path'])) //can we put it there?
         $file = $upload_dir['path'] . '/' . $filename; //yes great
         else //or no, okay fine let's try somewhere else
         $file = $upload_dir['basedir'] . '/' . $filename; //get the whole location
         file_put_contents($file, $file_data); // tada home at last

        $wp_filetype = wp_check_filetype($filename, array('jpeg' => 'image/jpeg','jpg' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png') ); //is it the right type of of file?
         $attachment = array( //set up the attachment
         'post_mime_type' => $wp_filetype['type'],
         'post_title' => sanitize_file_name($filename),
         'post_content' => '',
         'post_status' => 'inherit'
         );

        $attach_id = wp_insert_attachment( $attachment, $file, $entry['post_id'] ); //insert attachment
        $attach_data = wp_generate_attachment_metadata( $attach_id, $file ); //asign the meta
        wp_update_attachment_metadata( $attach_id, $attach_data ); //update the post
    }
    //remove the entry
     //(to keep the entry comment or delete these line)
     // IMPORTANT See:  http://Pastebin.com/quvsvGHJ for the function
     /*if(!function_exists('sedc_gform_remove_entries')){ die('next time maybe you should read the comments');}
     else{ nifty_gform_remove_entries($entry, $form );}*/
 }
}

Nifty_add_post_attachements関数の先頭に次のコードを使用して$ _FILES ['input_2']をダンプしようとしましたが、画面に出力が表示されず、投稿がまだ作成され、フォームajax loading spinnerがハングするだけです。

<pre>
    <?php print_r($_FILES['input_2']); die();?>
</pre>

正しい方向へのどんな助けまたはポインターでも評価されるでしょう。

5
Dom

おそらく、繰り返し可能なアップロードフィールドを持つ代わりに、条件付きロジックを使ってドロップダウンまたはラジオを結び付け、ユーザーに必要なアップロード数(1、2、3、4、5 ...)を尋ねてから、一連のビルド済みアップロード選択された番号に基づいて表示されるボックス。それは100%動的ではありませんが、うまくいけばあなたはこれらのうちのいくつがそもそも欲しいと思うようにある種の制限があります。

それからこれらをメタフィールドとして保存して参照します。各アップロードボックスをメタフィールドにマッピングできます。そして、その投稿が生成されたとき(それは正しい投稿ですか?)post_metaを参照することができます。

1
GhostToast