Programmgesteuert Bilder per URL abrufen und im Upload-Ordner speichern

14

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 Instanziierung der wpdbKlasse 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 schätze, das nutzt, wp_httpaber ich bin damit nicht vertraut.

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

Danke Simon

Simon Blackbourn
quelle

Antworten:

29

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 aussetzen, z. B. die Anzahl der Bilder, die pro Ladevorgang abgerufen werden, zu begrenzen und den Importer so einzustellen, dass er sich zwischen den Downloads selbst aktualisiert, oder AJAX zu verwenden, um diese zu erledigen zu einem Zeitpunkt asynchron.

John P Bloch
quelle
1
das ist absolut fantastisch john, vielen dank - es funktioniert perfekt. Die Drosselung ist kein Problem, da ich festgelegt habe, dass nach jedem Post-Import auf einen Tastendruck gewartet wird, damit wir die Details manuell überprüfen und problematische feststellen können.
Simon Blackbourn
1
Nur weil ich die ID des Anhangs brauchte, um mit einem anderen Beitrag verbunden zu werden, ist dies hier eine gute Möglichkeit
Axel
3

Johns Antwort ist bezüglich der Verwendung korrekt. media_sideload_imageBeachten Sie jedoch, dass Sie diese Skripte möglicherweise benötigen, bevor Sie dies im Kontext von WP Admin tun können:

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

Bryceadams
quelle