WordPress PHP自定义函数导致500内部服务器错误连接超时

时间:2020-06-11 作者:marcnyc

我编写了一个自定义脚本,在WordPress中插入一篇帖子,并将3幅图像上传到WP uploads目录。

要写帖子,我使用WP函数wp_insert_post( $wp_post_array, true );.在不同阶段的脚本中,我也使用wp_get_attachment_image_src($image_id, $size)[0];, wp_get_attachment_metadata($image_id);wp_get_attachment_image( $image_id, \'large\', false, $image_attr ); 但是为了上传图片并创建它们的元数据,我在下面编写了这个自定义函数。。。

我一定是把事情搞砸了,因为我在运行这段代码时遇到了500个连接超时错误(即使只有3个图像的大小都小于1Mb)。

有人能发现我做错了什么吗?谢谢你的眼光和经验。

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>\';
}
}
我已经尝试在cPanel(200600)和via中增加服务器执行时间。htaceess(300)但没有任何效果。。。

1 个回复
SO网友:Tom J Nowell

此函数完全没有必要,可以用名为media_sideload_image:

media\\u sideload\\u image(字符串$file,int$post\\u id,字符串$desc=null,字符串$return=\'html\')

例如:

$new_image_id = media_sideload_image(
    "https://example.com/image.png",
    $post_id,
    "Toms great picture",
    \'ID\'
);

https://developer.wordpress.org/reference/functions/media_sideload_image/

不要忘记检查结果,如果失败,将返回WP_Error 对象和您must 处理好它。error对象包含一条消息,告诉您哪里出错了,这就是原始代码神秘失败的原因(它从未检查错误,因此如果发生错误,它不会说任何话)。

如果要在WP Admin外部使用此文件,则需要在使用它之前包含一个或两个文件。阅读官方文档了解如何做到这一点

相关推荐

如何自动加载帖子中的图像,因为它存在于Uploads文件夹中

我想在所有帖子中自动加载三个图片(通过single.php),总是在同一个div(.acf_imgs-centro1)中。其想法是将图像上传到uploads文件夹中,与帖子同名,然后它们将显示在帖子中。我可以用下面的代码来做,但有一个问题。。。我在images div上方有一个静态标题(.imgs\\u h2),我只想加载它(标题),因为加载了任何图像。例如,我可以拥有帖子,但文件夹中还没有图像,因此标题将不可见。没有图像,没有标题。现在,我使用的方法似乎与我想要实现的目标不兼容。非常感谢您的帮助。<