Intereting Posts
PHP Неустранимая ошибка: вызов неопределенной функции plugin_basename Программная вставка разрывов страниц Добавление полей в менеджер категорий. Существует ли способ получить ссылку на экран редактирования категории? Сортировка по метазначению, но включает сообщения, в которых нет Роль wp_insert_user не работает Разработка плагинов – конструктор классов без стрельбы wp_enqueue_style action hook Удалить метабокс из определенного шаблона страницы в admin Как я могу выводить содержимое страницы с помощью этого кода? Разрешение пользовательского доступа к роли пользовательского типа в конце Поддержка старых версий WordPress в плагине / Theme? Статическое изображение для встроенного видео YouTube вместо пустого игрока? get_posts () и WP_query ограничивает условия «И» максимум до 6 для запросов метаданных в WordPress Можно ли перечислить вложения в конце конечной точки под URL с помощью специального шаблона? Получите детские условия текущего срока текущей должности Как исключить категории из последних сообщений, последних комментариев и категорий виджетов?

Сохранение носителя – какой крюк уволен?

Howdi,

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

Я нашел фильтр, который срабатывает непосредственно перед созданием метаданных, но ничего не сохраняется, когда файл сохраняется?

Благодаря,

Solutions Collecting From Web of "Сохранение носителя – какой крюк уволен?"

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

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

 add_action('admin_init', 'redirect_after_media_save'); function redirect_after_media_save() { global $pagenow; // when visiting the upload screen, we save the number of attachments if ( $pagenow == 'media-new.php' ) { $attachments_before = array_sum((array)wp_count_attachments()); update_option('count_attach_before', $attachments_before); } if ( $pagenow == 'upload.php' ) { // we are on media library page // get attachments count before and after upload $attachments_before = get_option('count_attach_before'); $attachments_after = array_sum((array)wp_count_attachments()); if ( // there are new files uploaded ( wp_get_referer() == admin_url('media-new.php') && $attachments_after > $attachments_before ) || // or we have just edited media file isset($_GET['posted']) ) { // redirect to desired location wp_redirect(admin_url()); exit; } } } 

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

Похоже, нет никаких действий при сохранении носителей, но есть фильтр. К сожалению, это означает, что вы можете сделать что-то, вы просто не можете что-то сказать, иначе вы сломаете фильтр.

 add_filter('attachment_fields_to_save', 'attachment_stuff'); function attachment_stuff($stuff){ //Do stuff here, but don't echo anything or you'll break the filter. return $stuff; } 

$ stuff – это массив массивов полей, используемых страницей элементов мультимедиа. Вы можете попробовать другие вещи, например, подключиться к более общей панели администратора и проверить значение $ _GET ['action'] 'editattachment'.

Возможно, немного поздний ответ, но у меня был похожий сценарий и я хотел поделиться решением.

В functions.php темы (создание плагина также будет работать), я использовал крюк 'add_attachment' для создания нового сообщения (пользовательский тип сообщения «talk») на основе каждого нового загруженного файла. Конечно, пример мог бы сделать с небольшим количеством сияния, но это сработало для анализа каждого загруженного вложения мультимедиа.

 <?php function cpt_from_attachment($attachment_ID) { global $current_user; get_currentuserinfo(); $attachment_post = get_post( $attachment_ID ); $type = get_post_mime_type($attachment_ID); if(strpos($type, 'audio') === 0) { // Create new custom post object only for audio files $my_post = array( 'post_title' => $attachment_post->post_title, 'post_content' => $attachment_post->post_content, 'post_type' => 'talk', 'post_author' => $current_user->ID ); // Insert the custom post into the database $post_id = wp_insert_post( $my_post ); wp_update_post( array( 'ID' => $attachment_ID , 'post_parent' => $post_id ) ); wp_set_post_terms( $post_id, get_post_meta($attachment_ID, "artist", true), 'speaker' ); } } add_action("add_attachment", 'cpt_from_attachment');