it-swarm.com.de

Erstellen Sie einen besseren Medien-Uploader für WordPress

Ich erstelle eine komplexe Galeriekomponente für einen Kunden in WordPress. Mein Hauptstolperpunkt ist das Erstellen eines Medien-Uploaders auf dem Admin-Bildschirm, mit dem sie Bilder in verschiedene Ordner hochladen können. Aufgrund der Anzahl der Bilder ist die Organisation nach Ordnern von entscheidender Bedeutung.

Ich muss im Wesentlichen die Funktionalität des aktuellen WordPress-Medien-Uploaders emulieren, aber die Möglichkeit haben, Ordner für die Bilder zu erstellen/auszuwählen.

Ich weiß nicht wirklich, wo ich anfangen soll. Gibt es eine Standardmethode zum Implementieren von Datei-Uploads in Websites, die sich für dieses Szenario eignen würden?

3
Yarin

Sie können den in WordPress integrierten Upload-Handler wp_handle_upload () verwenden. Sie können den upload_dir-Filter verwenden, um das benutzerdefinierte Verzeichnis festzulegen.

Hier sind einige Codeausschnitte aus einem meiner Plugins, die Sie verwenden/ändern können:

public function saveCustomFields()
{
    global $post;

    if($post->post_type == self::POST_TYPE && current_user_can( 'edit_post', $post->ID ) )
    {
        if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
            return;

        $fileReference = 'installPDF'; // This has to be in a variable because it gets passed by reference to wp_handle_upload()

        // save normal custom fields w/ update_post_meta() here

        if( empty($_FILES[$fileReference] ) )
        {
            // your custom logic if needed
        }
        else
        {
            $overrides = array(
                'test_form' => false,
                'unique_filename_callback' => self::PREFIX . 'setFilename'      // this lets you rename the file
            );

            $result = wp_handle_upload( $_FILES[$fileReference], $overrides );

            if( is_array($result) && array_key_exists('error', $result) && !empty( $result['error'] ) )
            {
                // failure logic
            }
            else
            {
                // success logic
            }
        }
    }
}
add_action( 'post_updated', array( $this, 'saveCustomFields') );

public function addFormEnctype()
{
    // this is needed to enable file uplodas on your form

    echo ' enctype="multipart/form-data"';
}   
add_action( 'post_edit_form_tag',   array( $this, 'addFormEnctype') );

public function setUploadDirectory($uploads)
{
    global $post;

    if( $post->post_type == self::POST_TYPE )
    {
        $uploads['path']    = $this->uploadDir . $this->uploadYear .'/';
        $uploads['url']     = $this->uploadURL . $this->uploadYear .'/';
        $uploads['subdir']  = '/'. $this->uploadYear;
        $uploads['basedir'] = $this->uploadDir;
        $uploads['baseurl'] = $this->uploadURL;
    }   

    return $uploads;
}
add_filter( 'upload_dir',           array( $this, 'setUploadDirectory') );
2
Ian Dunn