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.

Xis
la source

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 );
Pomme reinette
la source
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é.

Rarst
la source
Cette méthode est facile à mettre en œuvre. Un exemple peut être trouvé sur ce lien, ( codex.wordpress.org/Plugin_API/Filter_Reference/… .
AlanP