updateQueuePostMeta((int)$datas['post_id'], (int)$element_id); return $result; }, 10, 3 ); add_filter( 'wpmf_replace_physical_url', function ($result, $datas, $element_id) { $result = JUQueueHelper::replacePhysicalUrl($result, $datas, $element_id); return $result; }, 10, 3 ); /** * Add an input to allow changing file path */ add_filter( 'attachment_fields_to_edit', function ($form_fields, $post) { $url = wp_get_attachment_url($post->ID); $uploads = wp_upload_dir(); if (strpos($url, $uploads['baseurl'])!==0) { $html = __('This file is not in the allowed upload folder', 'wpmf'); } else { $path = str_replace($uploads['baseurl'], '', $url); $file_extension = pathinfo($path, PATHINFO_EXTENSION); $path = substr($path, 0, -(strlen($file_extension)+1)); $html = ' . '.$file_extension; } $form_fields['file_path'] = array( 'label' => esc_html__('File path', 'wpmf'), 'input' => 'html', 'html' => $html, 'helps' => esc_html__('File path and name related to upload folder', 'wpmf') . '/' . substr($uploads['basedir'], strlen(get_home_path())) ); return $form_fields; }, 10, 2 ); /** * Save modification made on media page */ add_filter( 'attachment_fields_to_save', function ($post, $attachment) { if (isset($attachment['file_path'])) { $datas = array( 'post_id' => $post['ID'], 'destination' => $attachment['file_path'], 'with_filename' => true, 'delete_folder' => false, 'update_database' => true, 'action' => 'wpmf_physical_folders' ); $wpmfQueue = JuMainQueue::getInstance('wpmf'); $result = $wpmfQueue->addToQueue($datas); if (is_wp_error($result)) { $post['errors']['file_path']['errors'][] = $result->get_error_message(); return $post; } } return $post; }, 10, 2 ); /** * Hook on the set attachment folder action */ add_action( 'wpmf_attachment_set_folder', function ($attachment_id, $folder, $extra) { $update_db = true; if (is_array($extra) && !empty($extra['trigger']) && $extra['trigger'] === 'upload') { $update_db = false; // do not use queue process when upload a new file return; } $folders = JUQueueHelper::getParentTerms($folder); $destination = implode(DIRECTORY_SEPARATOR, $folders); $destination = apply_filters('wpmf_update_actual_folder_name', $destination); $datas = array( 'post_id' => $attachment_id, 'destination' => $destination, 'with_filename' => false, 'delete_folder' => false, 'update_database' => $update_db, 'action' => 'wpmf_physical_folders' ); $wpmfQueue = JuMainQueue::getInstance('wpmf'); $wpmfQueue->addToQueue($datas); // Move files at the end of the script to avoid thumbnails generation issues add_action('shutdown', function () { $wpmfQueue = JuMainQueue::getInstance('wpmf'); $wpmfQueue->proceedQueueAsync(); }); }, 10, 3 ); /** * Delete file */ add_filter( 'wpmf_delete_attachment', function ($result, $datas, $element_id) { wp_delete_attachment($datas['post_id']); return true; }, 10, 3 ); /** * Move file to physical folder after upload file and generate meta data */ add_filter( 'wp_generate_attachment_metadata', function ($data, $attachment_id) { $folders = get_the_terms($attachment_id, WPMF_TAXO); if (!empty($folders)) { $folder = $folders[0]->term_id; $parents = JUQueueHelper::getParentTerms($folder); $destination = implode(DIRECTORY_SEPARATOR, $parents); $destination = apply_filters('wpmf_update_actual_folder_name', $destination); $datas = array( 'post_id' => $attachment_id, 'destination' => $destination, 'with_filename' => false, 'delete_folder' => false, 'update_database' => false, 'action' => 'wpmf_physical_folders' ); JUQueueHelper::moveFile($datas); } if (isset($data['file'])) { $dirname = _wp_get_attachment_relative_path($data['file']); if ($dirname) { $dirname = trailingslashit($dirname); } if ($dirname === '') { $data['file'] = $destination . '/' . $data['file']; } else { $data['file'] = str_replace($dirname, $destination . '/', $data['file']); } } return $data; }, 10, 2 ); /** * Hook on the add attachment action * * @todo : hook on wpmf_after_attachment_import to trigger the peoceedQueueAsync */ add_action( 'wpmf_add_attachment', function ($attachment_id, $folder_id) { $folders = JUQueueHelper::getParentTerms($folder_id); $destination = implode(DIRECTORY_SEPARATOR, $folders); $destination = apply_filters('wpmf_update_actual_folder_name', $destination); $datas = array( 'post_id' => $attachment_id, 'destination' => $destination, 'with_filename' => false, 'delete_folder' => false, 'update_database' => false, 'action' => 'wpmf_physical_folders' ); $wpmfQueue = JuMainQueue::getInstance('wpmf'); $wpmfQueue->addToQueue($datas); }, 10, 2 ); /** * Hook on the move folder action */ add_action( 'wpmf_move_folder', function ($folder_id, $destination_folder_id) { $term = get_term($destination_folder_id, WPMF_TAXO); JUQueueHelper::updateFolderName($folder_id, $term->name); }, 2, 2 ); /** * Hook on the update folder name action */ add_action( 'wpmf_update_folder_name', function ($folder_id, $folder_name) { JUQueueHelper::updateFolderName($folder_id, $folder_name); }, 2, 2 ); /** * Hook on the delete folder action */ add_action( 'wpmf_delete_folder', function ($folder_term) { JUQueueHelper::deleteFolder($folder_term); }, 2, 2 ); /** * Ajax syncchonize folders */ add_action('wp_ajax_wpmf_import_wpmf', function () { check_ajax_referer('wpmf_nonce', 'nonce'); JUQueueHelper::updateFolderName(0, ''); $wpmfQueue = JuMainQueue::getInstance('wpmf'); $wpmfQueue->proceedQueueAsync(); exit(0); }); add_filter( 'http_request_args', function ($r, $url) { if (is_array($r['body']) && !empty($r['body']['action']) && $r['body']['action'] === 'wp_async_wp_generate_attachment_metadata' && is_array($r['body']['metadata'])) { unset($r['body']['metadata']); } return $r; }, 10, 2 ); } }