I wrote a custom script to insert a post into WordPress and upload 3 images to the WP uploads directory.
To write the post I use the WP function wp_insert_post( $wp_post_array, true );
.
Inside the script at various stages I also use wp_get_attachment_image_src($image_id, $size)[0];
, wp_get_attachment_metadata($image_id);
and wp_get_attachment_image( $image_id, 'large', false, $image_attr );
but to upload the images and create their metadata I wrote this custom function below...
I must have messed up somewhere because I get a 500 Connection Timeout error when I run this code (even though it is only 3 images that are less than 1Mb each in size).
Can somebody spot what I am doing wrong? Thank you for your eyes and experience.
function insert_WP_Images_Data( $post_id, $image_url ) {
global $writer_WP_id;
$upload_dir = wp_upload_dir();
if ( isset($image_url) && isset($post_id) ) {
$filename = basename($image_url);
if(wp_mkdir_p($upload_dir['path']))
$file = $upload_dir['path'] . '/' . $filename;
else
$file = $upload_dir['basedir'] . '/' . $filename;
$image_data = file_get_contents( $image_url );
file_put_contents($file, $image_data);
$wp_filetype = wp_check_filetype($filename, null);
$attachment = array(
'post_author' => $writer_WP_id,
'post_content' => '',
'post_title' => $_SESSION['artist'],
'post_status' => 'inherit',
'post_name' => pathinfo($image_url)['filename'],
'post_mime_type' => $wp_filetype['type'],
'post_parent' => $post_id,
'guid' => $upload_dir['url'].'/'.$filename
);
// 'post_title' => sanitize_file_name($filename),
$image_id = wp_insert_attachment( $attachment, $file, $post_id );
require_once( ABSPATH.'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $image_id, $file );
$res1 = wp_update_attachment_metadata( $image_id, $attach_data );
$res2 = set_post_thumbnail( $post_id, $image_id );
return $image_id;
} else {
echo '<span class="error">No post is selected or image is selected</span>';
}
}
I have already tried increasing my server execution time in cPanel (200, 600) and via .htaceess (300) but nothing works...
file_get_contents
, but you shouldn't need to as there's a dedicated API for downloading things and turning them into attachments. I also notice none of the function calls ever check for error values or failure. If creating the attachment failed with aWP_Error
or afalse
value, that error object gets passed to other functions as a post ID anyway, and there's no check to print out an error or warning if that happens