如何使用wp_insert_attachment以编程方式创建已调整大小的图像版本

时间:2013-04-21 01:44:34

标签: wordpress thumbnails attachment image-resizing

我正在以编程方式将图片上传到我的Wordpress媒体库并将其设置为我的帖子的精选图片,效果非常好。

我想生成这些特色图像的缩略图,就像Wordpress通过“插入媒体”窗格添加图像时处理创建已调整大小的缩略图一样,在该窗格中创建多个文件,每个文件都指定了新的尺寸。文件名。

不幸的是,我在找到解释如何正确完成的任何事情时遇到了很多麻烦。

以下是相关代码。它成功创建帖子并将特色图像设置为媒体文件,但不会生成缩略图以便随之使用。

非常感谢任何帮助!

// If the post was created
if($post_id) {

    // Add meta/custom field data
    add_post_meta($post_id, 'gif_random_id', $randomId);

    // Add uploaded file to the actual Wordpress image library
    global $uploadURL;
    $filename = $uploadURL . $randomId . '.' . $fileExtension;
    $wp_filetype = wp_check_filetype(basename($filename), null);
    $wp_upload_dir = wp_upload_dir();

    $attachment = array(
        'guid' => $wp_upload_dir['url'] . '/' . basename($filename), 
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
        'post_content' => '',
        'post_status' => 'publish'
    );

    $attach_id = wp_insert_attachment($attachment, $filename, $post_id);

    $attach_data = wp_generate_attachment_metadata($attach_id, $filename);
    wp_update_attachment_metadata($attach_id, $attach_data);

    // Now set the attachement as the featured image
    update_post_meta($post_id, '_thumbnail_id', $attach_id);

}

2 个答案:

答案 0 :(得分:3)

你应该使用另一个 - 相当未知和误解的功能 - media_sideload_image()

 $attach_id = media_sideload_image($filename, $post_id);

此功能将处理"upload"进程,并将遵循将图像上传到wordpress的正常工作流程,其中包括custom image sizes

中定义的拇指生成

答案 1 :(得分:-3)

Kaput,您的代码非常好,但似乎您的初始图片不在uploads文件夹中。看看documentation说的是什么:

  

文件在服务器上的位置。使用绝对路径而不是URI   的文件。 文件必须位于上传目录。请参阅wp_upload_dir()。

请确保先将图片上传到uploads目录。