web-dev-qa-db-de.com

download_url () wird als graue Symbole angezeigt

Ich versuche, Bilder von einer URL von einer anderen Website mit dem Befehl download_url($url, $timeout) herunterzuladen, um sie in die Medienbibliothek zu laden. Und danach mache ich eine 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 );

Die Datei wird korrekt heruntergeladen, erscheint jedoch als graues Symbol in der Bibliothek. Aber wenn ich die Datei mit dem Link öffne, ist das Bild in Ordnung.

grey icons

Ist es die richtige Methode, um Bilder herunterzuladen? Nachdem der Download in Ordnung ist, möchte ich das Medium als Miniaturansicht einem Beitrag zuordnen. Ich denke mit den Funktionen wp_insert_attachment() und set_post_thumbnail().

Vielen Dank

1
DSX

Wenn Sie die Funktion wp_handle_sideload verwenden, erstellt @xvilo, wie in einem Kommentar erwähnt, nicht die Metadaten, die WordPress benötigt, um das Bild in der Medienbibliothek anzuzeigen. Da ich nicht sehen kann, wo der wp_handle_sideload die Daten in die Datenbank schreibt, verstehe ich nicht, warum die Dateien in Ihrer Medienbibliothek angezeigt werden. Mit Ihrer Annäherung verpassen Sie also einen Anruf an wp_insert_attachment (wie Sie selbst sagten) und 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'] );

Oder Sie können einfach die Funktion media_handle_sideload verwenden, da diese Funktion dies bereits für Sie erledigt.

$attachment_id = media_handle_sideload( $file_array, 0 );

Danach können Sie verwenden

set_post_thumbnail( $post, $attachment_id );
2
DRogueRonin