Comment changer le répertoire de téléchargement dans wp_handle_upload


9

J'essaie de savoir comment utiliser la fonction wp_handle_upload pour un plugin personnalisé afin que je puisse spécifier mon propre répertoire de téléchargement. Jusqu'à présent, le code prend un fichier de ma page de paramètres de plugin et les télécharge dans le dossier uploads avec l'année et le mois.

Je suis tombé sur ce lien qui, selon moi, pourrait avoir des indices - http://yoast.com/smarter-upload-handling-wp-plugins

if(strtolower($_SERVER['REQUEST_METHOD']) == "post"){

     $overrides = array('test_form' => false);
     $file = wp_handle_upload($_FILES['binaryFile'], $overrides);

     echo "<pre>" . print_r($file, true) . "</pre>";
}

Comment puis-je télécharger dans un répertoire de mon choix?

Toute aide beaucoup appréciée les gars.

Réponses:


5

Voici un exemple complet de la façon dont nous le faisons dans Easy Digital Downloads:

/**
 * Set Upload Directory
 *
 * Sets the upload dir to edd. This function is called from
 * edd_change_downloads_upload_dir()
 *
 * @since 1.0
 * @return array Upload directory information
*/
function edd_set_upload_dir( $upload ) {
    $upload['subdir'] = '/edd' . $upload['subdir'];
    $upload['path'] = $upload['basedir'] . $upload['subdir'];
    $upload['url']  = $upload['baseurl'] . $upload['subdir'];
    return $upload;
}


/**
 * Change Downloads Upload Directory
 *
 * Hooks the edd_set_upload_dir filter when appropriate. This function works by
 * hooking on the WordPress Media Uploader and moving the uploading files that
 * are used for EDD to an edd directory under wp-content/uploads/ therefore,
 * the new directory is wp-content/uploads/edd/{year}/{month}. This directory
 * provides protection to anything uploaded to it.
 *
 * @since 1.0
 * @global $pagenow
 * @return void
 */
function edd_change_downloads_upload_dir() {
    global $pagenow;

    if ( ! empty( $_REQUEST['post_id'] ) && ( 'async-upload.php' == $pagenow || 'media-upload.php' == $pagenow ) ) {
        if ( 'download' == get_post_type( $_REQUEST['post_id'] ) ) {
            add_filter( 'upload_dir', 'edd_set_upload_dir' );
        }
    }
}
add_action( 'admin_init', 'edd_change_downloads_upload_dir', 999 );

Remarque, nous ne modifions le répertoire de téléchargement que lors du téléchargement de fichiers à partir de notre page de type de publication personnalisée Téléchargements. Vous devrez l'ajuster pour la page des paramètres de votre plugin.
Pippin

Il manque "]" avec$upload['url'
Mario Radomanana

1

Je ne me souviens pas avoir fait exactement cela dans la pratique, mais la plupart (tous?) La gestion des chemins de téléchargement passe par l' wp_upload_dir()application d'un upload_dirfiltre aux informations renvoyées. Vous devriez essayer de le filtrer pendant la durée de l'exécution de votre code et d'ajuster les chemins d'accès à l'emplacement souhaité.


Cette méthode est facile à mettre en œuvre. Un exemple peut être trouvé sur ce lien, ( codex.wordpress.org/Plugin_API/Filter_Reference/… .
AlanP
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.