Intereting Posts
Авто-предложить отображать метаданные, но не включать их при нажатии Петля в функции для добавления правила перезаписи Как я могу заставить свой пользовательский запрос работать с результатами поиска после первой страницы? Как сделать мета-запрос следующего? пожалуйста помоги Выпадающая фильтрация чрезвычайно медленная Фильтр option_active_plugins не работает Некоторые сообщения в блоге, содержащие исходный код, не позволяют сохранить проект или опубликовать Одно меню для главной страницы (один пейджер) и другое меню для сообщений Обнаружить ошибку 404 страницы, чтобы узнать проблему Как объявить переменную JS в вызове AJAX Проблема с классом, фильтрами и обратными вызовами Удалить плагин дополнительных пользовательских полей для клиента? Как выполнять код только на должностях старше 2 недель Нестандартные метаданные типа сообщения не сохраняются Редактор загрузчика WordPress показывает сломанное изображение

переименовывать вложения на основе parent-post-title при загрузке

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

Лучший способ, по-видимому, добавить фильтр в wp_handle_upload_prefilter, как это делает kaiser в этом примере . К сожалению, файл получает только родительский пост-заголовок, если сообщение уже сохранено в базе данных.


Другой подход заключается в добавлении функции add_attachment, например Ijaas . Затем файл получает родительский пост-заголовок как имя, но миниатюры не создаются. И моя попытка использования wp_generate_attachment_metadata (); для создания недостающих размеров изображения, закончился бесконечный цикл (возможно, я использую его неправильно, но теперь я немного боюсь этой функции).


Было бы здорово, если бы был способ передать заголовок wp_handle_upload_prefilter, даже если сообщение еще не сохранено.

О, кстати, это моя бесконечная функция, может быть, кто-нибудь может сказать мне, что с ней не так. НЕ ИСПОЛЬЗУЙТЕ ЭТУ ФУНКЦИЮ !!!

add_action('add_attachment', 'fkp_rename_attacment'); function fkp_rename_attacment($post_ID){ $post = get_post($post_ID); $file = get_attached_file($post_ID); $path = pathinfo($file); $parent = get_post($post->post_parent); $p_author = get_the_author_meta( 'display_name', $parent->post_author ); $p_author_san = sanitize_title($p_author); $newfilename = $parent->post_name . '-' . $p_author_san . '-' . $post_ID; $newfile = $path['dirname']."/".$newfilename.".".$path['extension']; rename($file, $newfile); $wp_filetype = wp_check_filetype(basename($newfile), null ); $wp_upload_dir = wp_upload_dir(); $attachment = array( 'guid' => $wp_upload_dir['url'] . '/' . basename( $newfile ), 'post_mime_type' => $wp_filetype['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', basename($newfile)), 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $newfile, $parent->ID ); require_once(ABSPATH . 'wp-admin/includes/image.php'); $attach_data = wp_generate_attachment_metadata( $attach_id, $newfile ); wp_update_attachment_metadata( $attach_id, $attach_data ); } 

НЕ ИСПОЛЬЗУЙТЕ ЭТУ ФУНКЦИЮ !!!

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

 function modify_uploaded_file_names( $image ) { // Use part of the post or user object to rename the image get_currentuserinfo(); global $post, $current_user; // only do this if we got the post id, // otherwise they're probably in the media section // rather than uploading an image from a post if ( isset( $_REQUEST['post_id'] ) ) { // get the ID $post_id = absint( $_REQUEST['post_id'] ); // get the post OBJECT $post_obj = get_post( $post_id ); // get the post slug $post_slug = sanitize_title($post_obj->post_title); // get the author $author = sanitize_title( get_the_author_meta( 'display_name', $post_obj->post_author ) ); switch( $image['type'] ) { case 'image/jpeg' : $suffix = 'jpg'; break; case 'image/png' : $suffix = 'png'; break; case 'image/gif' : $suffix = 'gif'; break; } // if we found a slug if ( $post_slug ) $image['name'] = "{$author}-{$post_slug}-{$random_number}.{$suffix}"; } else { $image_name = str_place( ' ', '-', strtolower( $current_user->data->user_nicename ) ); $image['name'] = $image_name . '-' . $file['name']; } return $image; } // Only one arg, so 4th attr not needed - Priority set to later 20 add_filter( 'wp_handle_upload_prefilter', 'my_modify_uploaded_file_names', 20 ); 

Есть только небольшие изменения

  1. заменил $post_obj->post_name с помощью sanitize_title($post_obj->post_title) поскольку post_name присутствовало только в моих тестах, когда сообщение уже было сохранено.
  2. удаленные случайные числа, потому что wp_handle_upload использует wp_unique_filename () в любом случае.
  3. Добавлено имя автора для имени файла, но это только то, что мне нужно.