web-dev-qa-db-ja.com

download_url()は灰色のアイコンで表示されます

私はそれをメディアライブラリに入れるためにコマンドdownload_url($url, $timeout)を使って異なるウェブサイトからurlから写真をダウンロードしようとします。そしてその後、私はwp_handle_sideload($file, $overrides)を作ります。

$temp_file = download_url( $url, 5 );
$file = array(
     'name'     => basename($url),
     'type'     => 'image/jpg',
     'tmp_name' => $temp_file,
     'error'    => 0,
     'size'     => filesize($temp_file),
);
$overrides = array(
     'test_form' => false,
     'test_size' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );

ファイルは正しくダウンロードされますが、ライブラリに灰色のアイコンとして表示されます。しかし、リンクを付けてファイルを開くと、写真は問題ありません。

grey icons

写真をダウンロードするのは正しい方法ですか。ダウンロードがうまくいった後、私はメディアをサムネイルとして投稿に関連付けたいです。私はwp_insert_attachment()set_post_thumbnail()関数で考えます。

ありがとう

1
DSX

wp_handle_sideload関数を使用するとき、@ xviloがコメントで指摘したように、wordpressがメディアライブラリに画像を表示するのに必要なメタデータを作成しません。 wp_handle_sideload関数がデータをdbに書き込んでいる場所がわからないので、ファイルがメディアライブラリに表示されている理由がわかりません。だからあなたのアプローチであなたはwp_insert_attachment(あなたが言ったように)とwp_generate_attachment_metadataへの呼び出しを逃しています。

$temp_file = download_url( $url, 5 );
$file = array(
     'name'     => basename($url),
     'type'     => 'image/jpg',
     'tmp_name' => $temp_file,
     'error'    => 0,
     'size'     => filesize($temp_file),
);
$overrides = array(
     'test_form' => false,
     'test_size' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );

// Write attachment to db
$attachment = [
    'post_title' => basename($results['file']),
    'post_content' => '',
    'post_status' => 'inherit',
    'post_mime_type' => $results['type'],
];
$attachment_id = wp_insert_attachment( $attachment, $results['file'] )

// Generate the attachment's meta data
wp_generate_attachment_metadata( $attachment_id, $results['file'] );

または、 media_handle_sideload 関数を使用することもできます。これは、この関数が既に実行しているためです。

$attachment_id = media_handle_sideload( $file_array, 0 );

あとは使えます

set_post_thumbnail( $post, $attachment_id );
2
DRogueRonin