プログラムでURLで画像を取得し、アップロードフォルダーに保存する


14

別のCMSからWordPressへの大規模な移行に関与しています。データベースのコピーがあり、wpdbクラスのインスタンス化を使用してコンテンツを抽出し、そこからWordPressの投稿をプログラムで作成する方法を考え出しました。

しかし、数千の画像があり、それらを自動的に引き渡し、さまざまなサイズを生成し、投稿に添付して、約1週間の作業を節約したいと考えています!

URLでリモートサイトから画像を取得し、wp-uploadsフォルダーに保存する方法はありますか?私はこれを使用していると思いますwp_httpが、私はそれをよく知りません。

画像を取得して保存したらwp_generate_attachment_metadata、さまざまなサイズを作成wp_insert_attachmentして投稿に添付するために使用できるので大丈夫です。

ありがとう、サイモン

回答:


29

実際には、これら3つのことすべてを実行する素晴らしい機能があります。

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

最初の引数は、ダウンロードする画像のリモートURLです。2番目の引数は、画像を添付する投稿の投稿IDです。3番目の引数はオプションですが、含まれている場合は説明になります。

ロードごとに取り込む画像の数を制限したり、ダウンロード間でインポーターを自動更新するように設定したり、AJAXを使用してそれらを実行するなど、タイムアウトを維持しないようにダウンロードを調整する方法を見つけることをお勧めします一度に非同期で。


1
それは絶対に素晴らしいジョンです、どうもありがとう-それは完璧に動作します。各投稿のインポート後にキーを押すまで待機するように設定しているため、スロットルは問題ではありません。詳細を手動で確認し、問題のあるものをメモする機会を与えます。
サイモンブラックボーン

1
私は別のポストに接続するための添付ファイルのIDを必要なだけであるため、ここではそれを行うための良い方法がある
アクセル

3

ジョンの答えは正しいです:を使用してmedia_sideload_image、WP Adminのコンテキスト内でこれを行っていない場合は、これらのスクリプトを要求する必要があるかもしれないことに注意してください:

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

https://codex.wordpress.org/Function_Reference/media_sideload_image#Notesを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.