Intereting Posts
Можно ли встретить ужасные ошибки, если я помещаю основной цикл, который использует `query_posts` прямо над основным циклом bbPress? Как правильно распечатать ошибку 404 без перенаправления? (т.е. сохранение текущего URL-адреса) Как удалить или скрыть страницу архива? отображать изображение в RSS-канале Как перевести контент в category.php или index.php с помощью qtranslate? Возврат или использование данных формы с помощью крючка? Добавление кнопки отправки или обновления в пользовательский метабокс? Можно ли подключить данные или блоки настроек? Как удалить параметры с помощью register_uninstall_hook? WordPress Iris Color Picker добавляет события касания iOS Архивирование пользовательских сообщений? Отключение страницы авторизации только для подписчиков Постоянная ссылка показывает мусорный характер Как настроить расписание моего мероприятия еженедельно с помощью wp_schedule_event () Ошибка при загрузке Gravatar Hovercards (Jetpack) jQuery

wp_generate_attachment_metadata дает мне пустой массив

У меня есть пользовательский тип сообщения и метабокс с вводом файла.

Я могу вставить вложение, но я не могу обновить метаданные вложений, и я не знаю, как это исправить, потому что я не получаю никаких ошибок.

Вот мой код:

$attach_id = wp_insert_attachment( $attachment, $filename, $post_id ); $attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); wp_update_attachment_metadata( $attach_id, $attach_data ); echo $attach_id; echo '<pre>'; print_r($filename); echo '</pre>'; echo '<pre>'; print_r($attach_data); echo '</pre>'; 

и вот результат:

 96 Array ( [name] => one.png [type] => image/png [tmp_name] => /tmp/phphQ0e2v [error] => 0 [size] => 144555 ) Array ( ) 

Как вы можете видеть, $ attach_data пуст 🙁

Из комментария:

Пусть WordPress генерирует путь к файлу и использует его для следующих шагов:

 $upload = wp_handle_upload($filename, array('test_form' => false)); $attach_id = wp_insert_attachment( $attachment, $upload['file'], $post_id ); wp_update_attachment_metadata( $attach_id, $attach_data ); 

Это то, что окончательно исправило это для меня:

 apply_filters('wp_handle_upload', array( 'file' => $file_path, 'url' => $file_url, 'type' => $file_type), 'upload'); 

Объяснение: Я не совсем уверен, почему это исправило ошибку для меня, но я предполагаю, что это либо имеет какое-то отношение к плагинам с помощью wp_handle_upload-крюка, либо что фильтры добавляют метаданные к вложению, которое иначе было бы отсутствовать в функция wp_generate_attachment_metadata.

Полная функция:

 function add_to_media_lib($file_url, $file_path, $parent_post_id) { require_once(ABSPATH . 'wp-admin/includes/image.php'); require_once(ABSPATH . 'wp-admin/includes/file.php'); // Check the type of tile. We'll use this as the 'post_mime_type'. $file_type = wp_check_filetype(basename($file_url), null); // Get the path to the upload directory. $wp_upload_dir = wp_upload_dir(); // Prepare an array of post data for the attachment. $attachment = array( 'guid' => $wp_upload_dir['url'] . '/' . basename($file_url), 'post_mime_type' => $file_type['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', basename($file_url)), 'post_content' => '', 'post_status' => 'inherit', 'post_parent' => $parent_post_id ); // Insert the attachment. $attach_id = wp_insert_attachment($attachment, $file_url, $parent_post_id); // apply filters (important in some environments) apply_filters('wp_handle_upload', array('file' => $file_path, 'url' => $file_url, 'type' => $file_type), 'upload'); // Generate the metadata for the attachment, and update the database record. if ($attach_data = wp_generate_attachment_metadata($attach_id, $file_path)) { wp_update_attachment_metadata($attach_id, $attach_data); } else { echo '<div id="message" class="error"><h1>Failed to create PDF-thumbnail Meta-Data</h1><pre>' . print_r($attach_data) . '</pre></div>'; } return $attach_id; }