wp insert attachment from url, media phần 1 (ok)

https://wordpress.stackexchange.com/questions/256830/programmatically-adding-images-to-media-library

Ví dụ:

//===========
$image_url = 'https://cdn.pixabay.com/photo/2021/02/21/14/37/little-bird-6036530_960_720.jpg';
$upload_dir = wp_upload_dir();
$image_data = file_get_contents( $image_url );
$filename = basename( $image_url );
if ( wp_mkdir_p( $upload_dir['path'] ) ) {
  $file = $upload_dir['path'] . '/' . $filename;
} else {
  $file = $upload_dir['basedir'] . '/' . $filename;
}
file_put_contents( $file, $image_data );
$wp_filetype = wp_check_filetype( $filename, null );
$attachment = array(
  'post_mime_type' => $wp_filetype['type'],
  'post_title' => sanitize_file_name( $filename ),
  'post_content' => '',
  'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $file );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
wp_update_attachment_metadata( $attach_id, $attach_data );
//========

Chú ý:

Tương tự chúng ta có thể sử dụng hàm viết gon như sau

wp-content/themes/twentytwentyone/single.php

Kết quả cũng tương tự :)

Full code và kết quả

Đọc thêm 1

I am trying to programmatically add multiple images to media library, I uploaded the images to wp-content/uploads, now I try to use wp_insert_attachement.

Here's the code, however it's not working as expected, I think metadata is not properly generated, I can see the files in media library, but without a thumbnail, also if I edit the image I get an error saying to re-upload the image.

imagesarrow-up-rightattachmentsarrow-up-rightmedia-libraryarrow-up-rightSharearrow-up-rightImprove this questionarrow-up-rightFollowasked Feb 17 '17 at 11:56arrow-up-rightAdrianarrow-up-right18311 gold badge11 silver badge55 bronze badgesAdd a commentarrow-up-right

3 Answers

Activearrow-up-rightOldestarrow-up-rightVotesarrow-up-right21

Sharearrow-up-rightImprove this answerarrow-up-rightFollowedited Oct 22 '18 at 21:54arrow-up-rightarrow-up-rightphilippe_barrow-up-right11511 gold badge11 silver badge77 bronze badgesanswered Feb 17 '17 at 12:27arrow-up-rightTrubinEarrow-up-right80777 silver badges1212 bronze badges

Show 3 more commentsarrow-up-right4

I had issues with @TrubinE's solution where image files were not getting loaded.

Here is a complete example that worked for me: https://gist.github.com/m1r0/f22d5237ee93bcccb0d9arrow-up-right

This is a similar idea but use the WP HTTP library to fetch the content versus file_get_contents(). Here is the content of the github gist solution from m1r0:

Sharearrow-up-rightImprove this answerarrow-up-rightFollowanswered Dec 4 '18 at 16:57arrow-up-rightLance Clevelandarrow-up-right34522 silver badges77 bronze badgesAdd a commentarrow-up-right3

If you use WordPress' sideload feature, you can do this more easily (and have WordPress handle all of the sanitization for you).

Sharearrow-up-rightImprove this answerarrow-up-rightFollow

Đọc thêm 2

Last updated