-
Star
(141)
You must be signed in to star a gist -
Fork
(39)
You must be signed in to fork a gist
-
-
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 ); | |
| } | |
| } |
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 )
Life Saver