Descărcarea unui fișier extern în biblioteca media WordPress

Descărcarea unui fișier extern în biblioteca media WordPress

Am avut de câteva ori nevoie să descarc un fișier extern și să-l adaug în biblioteca media din WordPress. Eventual să-l și atașez unui post.

Prin urmare am scris clasa de mai jos – pe care o mai ajustez pe ici pe colo când este nevoie.

Se folosește așa:

$fetcher = new Media_Fetcher($post->ID);
$fetcher->fetch('http://....url');
class Media_Fetcher
{
    private $postID;

    public function __construct($postID = null)
    {
        $this->postID = $postID;
    }

    public function fetch($url, $filename = null)
    {
        $this->maybeRequireWpMediFiles();

        $fetchedFile = download_url($url);

        if (is_wp_error($fetchedFile)) {
            throw new \Exception($fetchedFile->get_error_message() . ": {$url}");
        }

        if (is_null($filename)) {
            $filename = uniqid(time() . true);
        }

        $extension = explode('.', $url);

        if (\count($extension) > 1) {
            $filename .= '.' . end($extension);
        }

        return $this->insertFileToMediaLibrary([
            'name' => $filename,
            'tmp_name' => $fetchedFile,
            'size' => filesize($fetchedFile),
        ]);
    }

    protected function maybeRequireWpMediFiles()
    {
        if (\function_exists('media_handle_upload')) {
            return;
        }

        require_once ABSPATH . 'wp-admin' . '/includes/image.php';
        require_once ABSPATH . 'wp-admin' . '/includes/file.php';
        require_once ABSPATH . 'wp-admin' . '/includes/media.php';
    }

    protected function insertFileToMediaLibrary($file)
    {
        $this->maybeRequireWpMediFiles();

        $uploadFile = media_handle_sideload($file, $this->postID);

        if (is_wp_error($uploadFile)) {
            throw new \Exception($uploadFile->get_error_message() . ": {$file}");
        }

        $path = wp_upload_dir();

        $file['id'] = $uploadFile;
        $file['path'] = $path['path'] . \DIRECTORY_SEPARATOR . "{$file['name']}";

        update_attached_file($file['id'], $file['path']);
        wp_generate_attachment_metadata($file['id'], $file['path']);

        return [
            'file' => $file,
            'fileID' => $uploadFile,
            'mime' => get_post_mime_type($uploadFile),
        ];
    }
}

Adaugă un comentariurăspuns pentru

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter