J'ai passé beaucoup de temps à lire les autres discussions sur cette question, mais je ne parviens tout simplement pas à faire fonctionner mon code correctement.
Je construis un plugin, et j'ai configuré un formulaire de téléchargement sur ma page d'administration personnalisée et j'utilise Media Uploader pour traiter le téléchargement. Veuillez voir ci-dessous pour le code simplifié:
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;
}
}
Le code ci-dessus fonctionne et modifie le répertoire de téléchargement pour le chemin que je spécifie. Cependant, il change le répertoire de téléchargement pour TOUS les téléchargements. J'aimerais que mon code ne s'exécute que lors du téléchargement à partir de ma page d'administration personnalisée.
C'est ce que j'ai essayé jusqu'à présent (et n'a pas fonctionné pour moi):
$pagenow
et get_current_screen
dans ma fonction custom_upload_dir
, mais cela semble échouer à chaque fois et utilise les chemins de téléchargement par défaut.__construct
mais une erreur m'a été renvoyée (je suppose que c'est trop tôt dans le cycle de vie WP).handle_upload_prefilter
également en vain.Vos données de formulaire doivent comporter un élément identifiable, tel que les noms que vous avez saisis. Vérifiez-en un ou plusieurs et procédez en conséquence.
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;
}
Après une enquête, les seules choses que je vois qui pourraient aider sont ...
POST
. Cependant, je ne sais pas si cela serait réglé dans votre page de plugin personnalisée.$_SERVER['HTTP_REFERER']
semble être configuré correctement. Vous pouvez analyser cela pour déterminer si votre page de plug-in est la page d'origine.Si j'avais la source complète du plugin, je pourrais faire des tests.