通过wp_handle_upload删除未放入uploads文件夹的图像

tra*_*sis 11 php wordpress image

我正在将图像保存到uploads文件夹,但我使用的是file_put_contents而不是wp_handle_upload - 因为我在base64中获取了一个图像而不是$ _FILES中的文件.

保存/更新图像和某些发布数据,因为它们应该使用此功能:

  • wp_insert_attachment
  • wp_update_attachment_metadata

问题是当我想删除旧图像时(保存新图像时).

wp_delete_attachment不会删除图像(虽然它似乎删除了数据库中的东西..).我认为问题在于不使用wp_handle_upload.(当我通过上传btn上传图像并使用$ _FILES接收它然后使用wp_handle_upload上传它 - 删除工作)

有谁知道在我的情况下删除图像的正确方法是什么?也许我可以使用wp_handle_upload正确保存它,即使我在base64中有图像?

谢谢你的任何信息.

编辑:我也尝试用wp_upload_bits保存图像,wp_delete_attachment仍然无法正常工作.

我检查的另一件事:wp_handle_upload函数的代码位于wp-admin/includes/file.php:我没有看到一种简单的方法来修改或复制现有函数,并添加一个自定义的函数,它将接受base64图像而不是$ _FILES中的文件.有人可能有"base64到$ _FILES"的解决方法吗?

shy*_*.me 2

wp_posts正如 @KamilP 所说,WP 在和表中插入记录wp_postmeta

因此,首先您必须将 Base64 图像保存在临时目录中,然后通过使用它的相对路径和其他数据,您可以使用wp_insert_attachment,链接包含适当的示例在数据库中插入记录。此功能会将图像添加到媒体库。

要生成更多缩略图,您可以使用wp_generate_attachment_metadata函数。此函数还将更新 wp_postmeta 表以及图像和缩略图的所有详细信息。

之后,您wp_delete_attachment也可以使用函数从目录和数据库中删除图像。

另一个解决方案:

  • 使用此链接中的函数从 base64 字符串生成图像。
  • 然后获取图像的mime类型、大小和路径
  • 创建一个类似于 $_FILES 的数组。
  • 然后将其传递给wp_handle_upload

更新 :

$_FILES数组的结构是这样的

array(5) {
    'name'     => string(8) "file name.extension" // file name with extension
    'type'     => string(0) "" // mime type of file, i.e. image/png
    'tmp_name' => string(0) "" // absolute path of file on disk.
    'error'    => int(2) // 0 for no error
    'size'     => int(0) // size in bytes
  }
Run Code Online (Sandbox Code Playgroud)

您可以像上面一样创建包含所有详细信息的数组,使用各种文件处理 PHP 函数来获取大小和 mime 类型。名称是您想要放置的任何内容,tmp_name 是文件所在服务器上的文件路径,在您的情况下是从 Base64 字符串保存文件的文件夹位置。

请参阅上面更新的链接以获取函数,该函数将为您提供来自 base64 字符串的图像。