Я потратил много времени на чтение других потоков по этому вопросу, но я просто не могу заставить свой код функционировать должным образом.
Я создаю плагин, и я настроил форму загрузки на моей странице администрирования, и я использую Media Uploader для обработки загрузки. Для упрощенного кода см. Ниже:
class myPlugin() { function __construct(){ add_filter('wp_handle_upload_prefilter', array( $this, 'handle_upload_prefilter') ); add_filter('wp_handle_upload', array( $this, 'handle_upload') ); } function handle_upload_prefilter( $file ) { add_filter('upload_dir', array( $this, 'custom_upload_dir' ) ); return $file; } function handle_upload( $fileinfo ) { remove_filter('upload_dir', array( $this, 'custom_upload_dir' ) ); return $fileinfo; } function custom_upload_dir($args) { $args['path'] = $args['basedir'] . "/mypath" . $args['subdir']; $args['url'] = $args['baseurl'] . "/mypath" . $args['subdir']; return $args; } }
Приведенный выше код работает, и он меняет каталог загрузки на указанный мной путь. Тем не менее, он меняет каталог загрузки для ВСЕХ загрузок. Я хочу, чтобы мой код запускался только при загрузке с моей пользовательской страницы администратора.
Это то, что я пробовал до сих пор (и не работал для меня):
$pagenow
и get_current_screen
в моей функции custom_upload_dir
, но это, кажется, терпит неудачу каждый раз и использует пути загрузки по умолчанию. __construct
но мне возвращена ошибка (я думаю, что это слишком рано в жизненном цикле WP). handle_upload_prefilter
также безрезультатно. Должно быть что-то идентифицируемое относительно ваших данных формы, таких как ваши имена ввода. Проверьте один или несколько из них и обработайте их соответствующим образом.
function custom_upload_dir($args) { if (isset($_POST['something'])) { $args['path'] = $args['basedir'] . "/mypath" . $args['subdir']; $args['url'] = $args['baseurl'] . "/mypath" . $args['subdir']; } return $args; }
После некоторого расследования, единственное, что я вижу, может помочь …
POST
для обратного вызова. Однако я не знаю, что это будет настроено на вашей пользовательской странице плагина. $_SERVER['HTTP_REFERER']
отображается правильно. Вы можете проанализировать это, чтобы определить, является ли ваша страница плагина исходной страницей. Если бы у меня был полный источник плагина, я мог бы провести некоторое тестирование.