admin管理员组文章数量:1334133
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...
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...
Share Improve this question edited Jun 11, 2020 at 13:46 marcnyc asked Jun 11, 2020 at 13:40 marcnycmarcnyc 1214 bronze badges 2 |1 Answer
Reset to default 0This function is completely unnecessary, and can be replaced with the official WP function called media_sideload_image
:
media_sideload_image( string $file, int $post_id, string $desc = null, string $return = 'html' )
for example:
$new_image_id = media_sideload_image(
"https://example/image.png",
$post_id,
"Toms great picture",
'ID'
);
https://developer.wordpress/reference/functions/media_sideload_image/
Don't forget to check the result, if this fails it will return a WP_Error
object, and you must handle it. The error object contains the message telling you what went wrong, and it's why your original code failed mysteriously ( it never checked for errors so if one happened it didn't say anything ).
If you want to use this outside WP Admin, you'll need to include one or two files before using it. Read the official documentation for how to do that
本文标签: imagesWordPress PHP custom function is causing 500 Internal Server Error Connection Timeout
版权声明:本文标题:images - WordPress PHP custom function is causing 500 Internal Server Error Connection Timeout 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742357113a2459636.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
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 – Tom J Nowell ♦ Commented Jun 11, 2020 at 15:54