So ändern Sie das Upload-Verzeichnis in wp_handle_upload

9

Ich versuche herauszufinden, wie die Funktion wp_handle_upload für ein benutzerdefiniertes Plugin verwendet wird, damit ich mein eigenes Upload-Verzeichnis angeben kann. Der bisherige Code nimmt eine Datei von meiner Plugin-Einstellungsseite und lädt sie mit Jahr und Monat in den Ordner hoch.

Ich bin auf diesen Link gestoßen, von dem ich dachte, dass er einige Hinweise hat - 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>";
}

Wie kann ich in ein Verzeichnis meiner Wahl hochladen?

Jede Hilfe sehr geschätzt Jungs.

Xis
quelle

Antworten:

5

Hier ist ein vollständiges Beispiel dafür, wie wir es in Easy Digital Downloads machen:

/**
 * 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 );
Pippin
quelle
Beachten Sie, dass wir das Upload-Verzeichnis nur ändern, wenn Sie Dateien von unserer Seite "Benutzerdefinierter Beitragstyp" herunterladen. Sie müssen es für die Einstellungsseite Ihres Plugins anpassen.
Pippin
Es fehlt "]" mit$upload['url'
Mario Radomanana
1

Ich erinnere mich nicht, dass ich dies in der Praxis genau getan habe, aber die meisten (alle?) Upload-Pfadbehandlungen werden durchgeführt wp_upload_dir(), bei denen upload_dirFilter auf zurückgegebene Informationen angewendet werden. Sie sollten versuchen, es für die Dauer der Ausführung Ihres Codes zu filtern und die Pfade an den gewünschten Speicherort anzupassen.

Selten
quelle
Diese Methode ist einfach zu implementieren. Ein Beispiel finden Sie unter diesem Link ( codex.wordpress.org/Plugin_API/Filter_Reference/… .
AlanP