web-dev-qa-db-de.com

Programmgesteuert Bilder per URL abrufen und im Upload-Ordner speichern

Ich bin an einer großen Migration von einem anderen CMS zu WordPress beteiligt. Wir haben eine Kopie der Datenbank und haben herausgefunden, wie der Inhalt extrahiert und programmgesteuert WordPress-Beiträge daraus erstellt werden können, indem eine Instanz der Klasse wpdb verwendet wird.

Es gibt jedoch ein paar tausend Bilder, die wir automatisch rüberziehen, die verschiedenen Größen generieren und dann an die Beiträge anhängen möchten, um etwa eine Woche Arbeit zu sparen!

Gibt es eine Möglichkeit, ein Bild von einer Remote-Site per URL abzurufen und in meinem Ordner "wp-uploads" zu speichern? Ich denke, dies verwendet wp_http, aber ich bin damit nicht vertraut.

Sobald ich das Bild habe und es gespeichert habe, bin ich in Ordnung, da ich dann wp_generate_attachment_metadata verwenden kann, um die verschiedenen Größen zu erstellen, und wp_insert_attachment, um es an einen Beitrag anzuhängen.

Danke Simon

13

Es gibt tatsächlich eine großartige Funktion, die all diese drei Dinge für Sie erledigt:

media_sideload_image( $url, $post_id, $description );

Das erste Argument ist die Remote-URL des Bildes, das Sie herunterladen möchten. Das zweite Argument ist die Beitrags-ID des Beitrags, an den Sie das Bild anhängen möchten. Das dritte Argument ist optional, wird aber eine Beschreibung sein, wenn es enthalten ist.

Ich würde vorschlagen, eine Möglichkeit zu finden, die Downloads zu drosseln, damit Sie nicht zu lange warten, z. B. die Anzahl der Bilder, die pro Laden abgerufen werden, zu begrenzen und den Importer so einzustellen, dass er sich zwischen den Downloads selbst aktualisiert, oder AJAX zu verwenden. um sie einzeln asynchron zu machen.

27
John P Bloch

Die Antwort von John ist bezüglich der Verwendung von media_sideload_image richtig. Beachten Sie jedoch, dass Sie diese Skripte möglicherweise vorher benötigen, wenn Sie dies nicht im Kontext von WP Admin tun:

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

Siehe https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

2
bryceadams