Alterando o diretório de upload somente para uploads de plug-in

4

Passei muito tempo lendo os outros tópicos sobre essa questão, mas simplesmente não consigo que meu código funcione corretamente.

Estou criando um plug-in e configurei um formulário de upload na minha página de administração personalizada, e estou usando o Media Uploader para processar o upload. Por favor, veja abaixo o código simplificado:

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;
  }
}

O código acima funciona e altera o diretório de upload para o caminho que eu especifico. No entanto, está mudando o diretório de upload para TODOS os uploads. Gostaria que meu código fosse executado somente ao fazer o upload da minha página de administração personalizada.

Isso é o que eu tentei até agora (e não funcionou para mim):

  1. Eu tentei usar condicionais para testar $pagenow e get_current_screen na minha função custom_upload_dir , mas isso parece falhar toda vez e usa os caminhos de upload padrão.
  2. Eu tentei testar condicional no meu __construct , mas recebo um erro (acho que é muito cedo no ciclo de vida do WP).
  3. Tentei executar a condicional na minha função handle_upload_prefilter também sem sucesso.
por ahnkee 28.05.2013 / 20:30

1 resposta

3

Deve haver algo identificável nos dados do seu formulário, como seus nomes de entrada. Verifique um ou mais deles e processe de acordo.

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;
}

Após algumas investigações, as únicas coisas que vejo que podem ajudar são ...

  1. O ID do post é passado pelos dados POST para o retorno de chamada. No entanto, eu não sei se isso seria definido em sua página de plug-in personalizada.
  2. $_SERVER['HTTP_REFERER'] parece estar definido corretamente. Você poderia analisar que para determinar se a sua página de plug-in é a origem página.

Se eu tivesse o plug-in completo, poderia fazer alguns testes.

    
por s_ha_dum 28.05.2013 / 20:48