rest api — WordPress — Formularz kontaktowy 7 — Problem z pobraniem przesłanego pliku
![rest api — WordPress — Formularz kontaktowy 7 — Problem z pobraniem przesłanego pliku](https://oen.pl/wp-content/uploads/2023/09/apple-touch-icon@2.png)
Zamierzam przesłać dane z formularza kontaktowego 7 w WordPress do interfejsu API (wszystkie pola są w porządku, ale dodanie załącznika do pliku przerywa moje przesyłanie – błąd 500), który zawiera załącznik. Mogę sprawić, że będzie działać z fikcyjnym plikiem w następujący sposób:
$attachedfile = get_template_directory() . '/test.pdf';
$file_contents = file_get_contents($attachedfile);
$base64_file = base64_encode($file_contents);
$file_name = basename($attachedfile);
$mime_type = mime_content_type($attachedfile);
$documents = [
[
'FileName' => $file_name,
'MimeType' => $mime_type,
'Base64' => $base64_file,
],
];
Spowoduje to wysłanie pliku na serwer i odebranie go w porządku. Ale muszę to zrobić dynamicznie poprzez formularz.
Skonstruowałem więc tę funkcję:
function my_custom_form_submission($contact_form) {
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data();
$email = isset($data['your-email']) ? sanitize_email($data['your-email']) : '';
$phone="Nincs megadva";
$lastname = isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '';
$firstname = isset($data['text-532']) ? sanitize_text_field($data['text-532']) : '';
$companyname = isset($data['text-479']) ? sanitize_textarea_field($data['text-479']) : '';
$created = current_time('Y-m-d\TH:i:s');
$branch = isset($data['menu-586']) ? sanitize_textarea_field($data['menu-586']) : '';
if ($branch == 'Divat / Design') {
$flow = 'DivatDesign';
} else {
$flow = 'Startup';
}
$uploaded_files = $submission->uploaded_files();
// if (!empty($uploaded_files)) {
// $uploaded_file = $uploaded_files['file-524'];
// // Read file contents
// $file_content = file_get_contents($uploaded_file);
// if ($file_content !== false) {
// // Encode file content in base64
// $base64_file = base64_encode($file_content);
// // Prepare data array for API
// $documents = array(
// 'FileName' => $uploaded_file['name'],
// 'MimeType' => $uploaded_file['type'],
// 'Base64' => 'data:' . $uploaded_file['type'] . ';base64,' . $base64_file
// );
// }
// }
//error_log('Uploaded File Path: ' . $attachedfile);
if (wf_checkEmail($email) == false) {
$userId = saveToWf($email, $lastname, $firstname);
//Log the userId for debugging
error_log('User ID: ' . $userId);
if ($userId) {
registerToWf($email, $lastname, $firstname, $flow, $userId, $companyname, $phone, $attachedfile, $branch, $documents);
}
}
}
}
add_action('wpcf7_before_send_mail', 'my_custom_form_submission');
Problem polega na tym, że jeśli prześlę formularz w ten sposób, działa on dla wszystkich pól, jednak jeśli skomentuję pola powiązane z $uploaded_files, spowoduje to przerwanie przesyłania i wyświetlenie błędu 500. Nie znalazłem sposobu, aby zobaczyć (wyjście/zrzut), co dokładnie zwraca $uploaded_files, ale zgaduję, że jest to coś innego niż mój fikcyjny plik.
Przesłano tylko 1 plik, więc nie potrzebuję foreach. Czy ktoś robił coś podobnego lub może wskazać mi właściwy kierunek? Nie udało mi się nic znaleźć na ten temat.
- Warto również zauważyć, że mam dostęp tylko do ich serwera FTP i wp_debug wydaje się być w jakiś sposób wyłączony. Żaden dziennik nie jest widoczny pomimo zdefiniowania („WP_DEBUG”, prawda); zdefiniuj(’WP_DEBUG_DISPLAY’, prawda); zdefiniuj(’WP_DEBUG_LOG’, prawda); w wp_config.