web-dev-qa-db-fra.com

wp_handle_upload () - Comment télécharger dans un sous-répertoire personnalisé dans les téléchargements

wp_handle_upload () fonctionne pour moi, mais télécharge les fichiers où il veut (upload/année/mois).

Question: Y a-t-il un moyen de lui dire d’envoyer des fichiers dans un répertoire personnalisé (uploads/mycustomdir)? Ou y a-t-il une autre fonction qui pourrait faire cela?

Ce que j'ai essayé:

  1. move_uploaded_file () de php (n'a pas été en mesure de comprendre le paramètre du répertoire cible - c'est pour un plugin et j'ai besoin qu'il fonctionne pour tout le monde quelle que soit leur structure de dir).

  2. https://yoast.com/smarter-upload-handling-wp-plugins

J'ai collé ce code dans le fichier core de mon plugin. Rien ne s'est passé. Mais je vois dans les commentaires que cela semble fonctionner pour les gens.

S'IL VOUS PLAÎT, si vous avez une réponse, donnez-en une complète. Je peux obtenir $ _FILES ['myfile']. Quelles étapes à partir de là pour que ce fichier aille dans uploads/mycustomfolder?

4
CodeVirtuoso

Vous pouvez travailler sur l'idée fournie par Joost et utiliser le filtre upload_dir pour définir temporairement le chemin de téléchargement ailleurs.

/**
 * Override the default upload path.
 * 
 * @param   array   $dir
 * @return  array
 */
function wpse_141088_upload_dir( $dir ) {
    return array(
        'path'   => $dir['basedir'] . '/mycustomdir',
        'url'    => $dir['baseurl'] . '/mycustomdir',
        'subdir' => '/mycustomdir',
    ) + $dir;
}

Et en pratique, c'est aussi simple que:

// Register our path override.
add_filter( 'upload_dir', 'wpse_141088_upload_dir' );

// Do our thing. WordPress will move the file to 'uploads/mycustomdir'.
$result = wp_handle_upload( $_FILE['myfile'] );

// Set everything back to normal.
remove_filter( 'upload_dir', 'wpse_141088_upload_dir' );
8
TheDeadMedic