Изменение каталога загрузки только для загрузки плагинов

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

Я создаю плагин, и я настроил форму загрузки на моей странице администрирования, и я использую 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; } } 

Приведенный выше код работает, и он меняет каталог загрузки на указанный мной путь. Тем не менее, он меняет каталог загрузки для ВСЕХ загрузок. Я хочу, чтобы мой код запускался только при загрузке с моей пользовательской страницы администратора.

Это то, что я пробовал до сих пор (и не работал для меня):

  1. Я пробовал использовать условные условия для проверки $pagenow и get_current_screen в моей функции custom_upload_dir , но это, кажется, терпит неудачу каждый раз и использует пути загрузки по умолчанию.
  2. Я пробовал тестирование для условного в моем __construct но мне возвращена ошибка (я думаю, что это слишком рано в жизненном цикле WP).
  3. Пробовал выполнение условия в моей функции 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; } 

После некоторого расследования, единственное, что я вижу, может помочь …

  1. Идентификатор почты передается через данные POST для обратного вызова. Однако я не знаю, что это будет настроено на вашей пользовательской странице плагина.
  2. $_SERVER['HTTP_REFERER'] отображается правильно. Вы можете проанализировать это, чтобы определить, является ли ваша страница плагина исходной страницей.

Если бы у меня был полный источник плагина, я мог бы провести некоторое тестирование.