Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save jdau-n/e5545b5ac4dcc1084a0d718f953d79cf to your computer and use it in GitHub Desktop.

Select an option

Save jdau-n/e5545b5ac4dcc1084a0d718f953d79cf to your computer and use it in GitHub Desktop.
WP: Insert attachment from URL (wpcs compliant)
<?php
/**
* Insert an attachment from an URL address. From https://gist.github.com/m1r0/f22d5237ee93bcccb0d9
* Edited to match code standards.
*
* @param String $url URL to download from.
* @param Int $parent_post_id Parent post ID, optional.
* @return Int Attachment ID ID of newly created attachment.
*/
function insert_attachment_from_url( $url, $parent_post_id = null ) {
if ( ! class_exists( 'WP_Http' ) ) {
include ABSPATH . WPINC . '/class-http.php';
}
$http = new \WP_Http();
$response = $http->request( $url );
if ( is_wp_error( $response ) || 200 !== $response['response']['code'] ) {
return false;
}
$upload = wp_upload_bits( basename( $url ), null, $response['body'] );
if ( ! empty( $upload['error'] ) ) {
return false;
}
$file_path = $upload['file'];
$file_name = basename( $file_path );
$file_type = wp_check_filetype( $file_name, null );
$attachment_title = sanitize_file_name( pathinfo( $file_name, PATHINFO_FILENAME ) );
$wp_upload_dir = wp_upload_dir();
$post_info = array(
'guid' => $wp_upload_dir['url'] . '/' . $file_name,
'post_mime_type' => $file_type['type'],
'post_title' => $attachment_title,
'post_content' => '',
'post_status' => 'inherit',
);
// Create the attachment.
$attach_id = wp_insert_attachment( $post_info, $file_path, $parent_post_id );
// Include image.php.
require_once ABSPATH . 'wp-admin/includes/image.php';
// Define attachment metadata.
$attach_data = wp_generate_attachment_metadata( $attach_id, $file_path );
// Assign metadata to attachment.
wp_update_attachment_metadata( $attach_id, $attach_data );
return $attach_id;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment