Cambiando el directorio de carga solo para cargas de complementos

4

He pasado mucho tiempo leyendo los otros subprocesos de esta pregunta, pero simplemente no puedo hacer que mi código funcione correctamente.

Estoy creando un complemento, y configuré un formulario de carga en mi página de administración personalizada, y estoy usando el Cargador de medios para procesar la carga. Consulte a continuación el 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;
  }
}

El código anterior funciona y cambia el directorio de carga a la ruta que especifique. Sin embargo, está cambiando el directorio de carga para TODAS las cargas. Me gustaría que mi código se ejecute solo al subir desde mi página de administrador personalizada.

Esto es lo que he intentado hasta ahora (y no me ha funcionado):

  1. He intentado usar condicionales para probar $pagenow y get_current_screen en mi función custom_upload_dir , pero parece que falla cada vez y usa las rutas de carga predeterminadas.
  2. He intentado realizar pruebas condicionales en mi __construct pero recibí un error (supongo que es demasiado temprano en el ciclo de vida de WP).
  3. Intenté ejecutar el condicional en mi función handle_upload_prefilter también en vano.
pregunta ahnkee 28.05.2013 - 20:30

1 respuesta

3

Debe haber algo identificable en los datos de su formulario, como sus nombres de entrada. Verifique uno o más de ellos y procese según corresponda.

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

Después de algunas investigaciones, las únicas cosas que veo que pueden ayudar son ...

  1. La ID de la publicación se pasa a través de los datos POST a la devolución de llamada. Sin embargo, no sé si se configurará en su página de complementos personalizados.
  2. $_SERVER['HTTP_REFERER'] parece estar configurado correctamente. Tú podrías analice eso para determinar si su página de complementos es la originadora página.

Si tuviera la fuente del complemento completo podría hacer algunas pruebas.

    
respondido por el s_ha_dum 28.05.2013 - 20:48

Lea otras preguntas en las etiquetas