-
-
Save hissy/7352933 to your computer and use it in GitHub Desktop.
<?php | |
$file = '/path/to/file.png'; | |
$filename = basename($file); | |
$upload_file = wp_upload_bits($filename, null, file_get_contents($file)); | |
if (!$upload_file['error']) { | |
$wp_filetype = wp_check_filetype($filename, null ); | |
$attachment = array( | |
'post_mime_type' => $wp_filetype['type'], | |
'post_parent' => $parent_post_id, | |
'post_title' => preg_replace('/\.[^.]+$/', '', $filename), | |
'post_content' => '', | |
'post_status' => 'inherit' | |
); | |
$attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $parent_post_id ); | |
if (!is_wp_error($attachment_id)) { | |
require_once(ABSPATH . "wp-admin" . '/includes/image.php'); | |
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] ); | |
wp_update_attachment_metadata( $attachment_id, $attachment_data ); | |
} | |
} |
Script is very good and its worked.
Thanks!!
Life Saver
Thanks a lot, your code is very good.
It's worked on WP 5.6!
Not working.
Fatal error: Call to undefined function wp_get_current_user() in /home/username/public_html/wp/wp-includes/capabilities.php on line 424
Run your code on init hook
If you receive the file via method POST like:
$file = (binary)
instead of absolute path like this:
$file = '/path/to/file.png';
You have to use $file['tmp_name']
when calling wp_upload_bits
wp_upload_bits($filename, null, file_get_contents($file['tmp_name']))
The rest of above code works great!
Thanks again.
wp_insert_attachment
has the option to return a WP Error instance on failure set to false by default, it will return a zero instead.
So the check for is_wp_error
will always return false unless you supply true
as a 4th argument.
wp_insert_attachment( $attachment, $upload_file['file'], $parent_post_id, true )
@fabriziofeitosa I found that by removing some unused media sizes, and by turning off image optimisation plugin wp smush I could run this n a much shorter timeframe. A few seconds compared to several minutes. Definitely not a solution, something asynchronous seems necessary to do this on a frequent basis.