質問編集履歴

2

「追記2」追加

2017/12/02 16:57

投稿

bpbjsu
bpbjsu

スコア24

test CHANGED
File without changes
test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
 
80
80
 
81
- ###追記
81
+ ###追記(不使用)
82
82
 
83
83
  コメントのアドバイスに従い、以下のようにしてみました。
84
84
 
@@ -193,3 +193,173 @@
193
193
  add_action('wpcf7_mail_sent', 'gloc_wpcf7_insert_post', 10, 1);
194
194
 
195
195
  ```
196
+
197
+
198
+
199
+ ###追記2
200
+
201
+ (★2)以下のようにしてみましたがカスタムフィールド内に「ultifile Upload Field for Contact Form 7」で作成されたzipのフルパスが返りメディアライブラリにzipが登録されます(※WP本来のカスタムフィールドにフルパスが返り、プラグインで作成したカスタムフィールドには何も返りません)
202
+
203
+
204
+
205
+ (★3)update_fieldを使用した場合は何も返りません。
206
+
207
+
208
+
209
+ また、(★2)を使用した際(★1)部分のように、ZipArchiveを使用してみましたが、解凍したものをメディアライブラリ及び投稿内に登録できませんでした。
210
+
211
+
212
+
213
+ 何を間違えているのかわからない状態です。
214
+
215
+ おかしな部分を教えていただけませんでしょうか?
216
+
217
+
218
+
219
+
220
+
221
+ ```
222
+
223
+ //メール送信後に内容を投稿として保存
224
+
225
+ function gloc_wpcf7_insert_post(){
226
+
227
+ $submission = WPCF7_Submission::get_instance();
228
+
229
+ if ( $submission ) {
230
+
231
+ $formdata = $submission->get_posted_data();
232
+
233
+ $media = $submission->uploaded_files(); //ファイルのパス取得準備
234
+
235
+ $name = $formdata['rep-name'];
236
+
237
+ $email = $formdata['rep-email'];
238
+
239
+ $multifile = $media['multifile-819']; //投稿内にzipのフルパスを取得
240
+
241
+ $new_post = array(
242
+
243
+ 'post_type' => 'post',
244
+
245
+ 'post_status' => 'draft',
246
+
247
+ 'post_title' => $formdata['rep-name'],
248
+
249
+ 'post_content' => $formdata['rep-text']
250
+
251
+ );
252
+
253
+
254
+
255
+
256
+
257
+ // (★1)ZIPファイルのパス指定
258
+
259
+ $zip_path = $multifile;
260
+
261
+ $zip = new ZipArchive();
262
+
263
+ // ZIPファイルをオープン
264
+
265
+ $res = $zip->open($zip_path);
266
+
267
+ // zipファイルのオープンに成功した場合
268
+
269
+ if ($res === true) {
270
+
271
+ // 圧縮ファイル内の全てのファイルを指定した解凍先に展開する
272
+
273
+ $zip->extractTo('uploads/');
274
+
275
+ // ZIPファイルをクローズ
276
+
277
+ $zip->close();
278
+
279
+ }
280
+
281
+
282
+
283
+
284
+
285
+ //メディアライブラリへ添付ファイルを追加
286
+
287
+ // $filename はアップロード用ディレクトリにあるファイルのパス。
288
+
289
+ $filename = $multifile;
290
+
291
+ // ファイルの種類をチェックする。これを 'post_mime_type' に使う。
292
+
293
+ $filetype = wp_check_filetype( basename( $filename ), null );
294
+
295
+ // アップロード用ディレクトリのパスを取得。
296
+
297
+ $wp_upload_dir = wp_upload_dir();
298
+
299
+ // 添付ファイル用の投稿データの配列を準備。
300
+
301
+ $attachment = array(
302
+
303
+ 'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
304
+
305
+ 'post_mime_type' => $filetype['type'],//mime形式を指定「image/png」「image/jpeg」など
306
+
307
+ 'post_title' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),//ファイル名を指定
308
+
309
+ 'post_content' => '',//空の文字列を指定
310
+
311
+ 'post_status' => 'inherit'//投稿ステータスを指定
312
+
313
+ );
314
+
315
+
316
+
317
+ // 添付ファイルを追加。
318
+
319
+ $attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
320
+
321
+ // wp_generate_attachment_metadata() の実行に必要なので下記ファイルを含める。
322
+
323
+ require_once( ABSPATH . 'wp-admin/includes/image.php' );
324
+
325
+ // 添付ファイルのメタデータを生成し、データベースを更新。
326
+
327
+ $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
328
+
329
+ wp_update_attachment_metadata( $attach_id, $attach_data );
330
+
331
+
332
+
333
+
334
+
335
+ //下書き保存した記事のID取得
336
+
337
+ $post_id = wp_insert_post( $new_post );
338
+
339
+ //update_fieldに対応
340
+
341
+ $field_key = 'post-media';
342
+
343
+ $value = $multifile;
344
+
345
+ //カスタムフィールドに内容を入力
346
+
347
+ if($post_id) {
348
+
349
+ update_post_meta($post_id, 'post-name',$name);
350
+
351
+ update_post_meta($post_id, 'post-email',$email);
352
+
353
+ //update_post_meta($post_id, 'post-media',$filename); //(★2)画像のIDを取得してしまう
354
+
355
+ update_field($field_key, $value, $post_id); //(★3)なにも取得できない
356
+
357
+ }
358
+
359
+ }
360
+
361
+ }
362
+
363
+ add_action('wpcf7_mail_sent', 'gloc_wpcf7_insert_post', 10, 1);
364
+
365
+ ```

1

コード追記

2017/12/02 16:57

投稿

bpbjsu
bpbjsu

スコア24

test CHANGED
File without changes
test CHANGED
@@ -75,3 +75,121 @@
75
75
  add_action('wpcf7_mail_sent', 'gloc_wpcf7_insert_post', 10, 1);
76
76
 
77
77
  ```
78
+
79
+
80
+
81
+ ###追記
82
+
83
+ コメントのアドバイスに従い、以下のようにしてみました。
84
+
85
+ 間違えている部分を教えて頂けたら幸いです。
86
+
87
+
88
+
89
+ ```
90
+
91
+ //メール送信後に内容を投稿として保存
92
+
93
+ function gloc_wpcf7_insert_post(){
94
+
95
+ $submission = WPCF7_Submission::get_instance();
96
+
97
+ if ( $submission ) {
98
+
99
+ $formdata = $submission->get_posted_data();
100
+
101
+ $email = $formdata['rep-email'];
102
+
103
+ $name = $formdata['rep-name'];
104
+
105
+ $multifile = $formdata['multifile-819'];
106
+
107
+
108
+
109
+ $new_post = array(
110
+
111
+ 'post_type' => 'post',
112
+
113
+ 'post_title' => $formdata['rep-name'],
114
+
115
+ 'post_status' => 'draft',
116
+
117
+ 'post_content' => $formdata['rep-text']
118
+
119
+ );
120
+
121
+ //下書き保存した記事のID取得
122
+
123
+ $post_id = wp_insert_post( $new_post );
124
+
125
+
126
+
127
+
128
+
129
+ // $filename はアップロード用ディレクトリにあるファイルのパス。
130
+
131
+ $filename = $multifile;
132
+
133
+ // ファイルの種類をチェックする。これを 'post_mime_type' に使う。
134
+
135
+ $filetype = wp_check_filetype( basename( $filename ), null );
136
+
137
+ // アップロード用ディレクトリのパスを取得。
138
+
139
+ $wp_upload_dir = wp_upload_dir();
140
+
141
+ // 添付ファイル用の投稿データの配列を準備。
142
+
143
+ $attachment = array(
144
+
145
+ //'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
146
+
147
+ 'post_mime_type' => $filetype['type'],
148
+
149
+ 'post_title' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),
150
+
151
+ 'post_content' => '',
152
+
153
+ 'post_status' => 'inherit'
154
+
155
+ );
156
+
157
+ // 添付ファイルを追加。
158
+
159
+ $attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
160
+
161
+ // wp_generate_attachment_metadata() の実行に必要なので下記ファイルを含める。
162
+
163
+ require_once( ABSPATH . 'wp-admin/includes/image.php' );
164
+
165
+ // 添付ファイルのメタデータを生成し、データベースを更新。
166
+
167
+ $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
168
+
169
+ wp_update_attachment_metadata( $attach_id, $attach_data );
170
+
171
+
172
+
173
+
174
+
175
+ if($post_id) {
176
+
177
+ update_post_meta($post_id, 'post-name',$name);
178
+
179
+ update_post_meta($post_id, 'post-email',$email);
180
+
181
+ //update_post_meta($post_id, 'post-media',$multifile);
182
+
183
+ update_field('post-media', $multifile, $post_id);
184
+
185
+ }
186
+
187
+
188
+
189
+ }
190
+
191
+ }
192
+
193
+ add_action('wpcf7_mail_sent', 'gloc_wpcf7_insert_post', 10, 1);
194
+
195
+ ```