【发布时间】:2016-02-17 11:05:45
【问题描述】:
我正在将图像保存到上传文件夹,但我使用的是 file_put_contents 而不是 wp_handle_upload - 因为我在 base64 中获得了图像,而不是作为 $_FILES 中的文件。
图像和某些帖子数据被保存/更新,因为它们应该使用此功能:
- wp_insert_attachment
- wp_update_attachment_metadata
问题是当我想删除旧图像时(保存新图像时)。
wp_delete_attachment 不会删除图像(尽管它似乎确实删除了 db 中的东西..)。我认为问题在于不使用 wp_handle_upload。 (当我通过上传 btn 上传图像并使用 $_FILES 接收它然后使用 wp_handle_upload 上传时 - 删除作品)
有没有人知道在我的情况下删除图像的正确方法是什么? 也许我可以使用 wp_handle_upload 正确保存它,即使我有 base64 中的图像?
感谢您提供任何信息。
编辑:我还尝试使用 wp_upload_bits 保存图像,但 wp_delete_attachment 仍然无效。
我检查的另一件事:位于 wp-admin/includes/file.php 的 wp_handle_upload 函数的 the code:我没有看到一种简单的方法来修改或复制现有函数并添加一个自定义函数,该函数将接受 base64 图像而不是文件作为在 $_FILES 中。也许有人有“base64 to $_FILES”的解决方法?
【问题讨论】:
-
第一件事 - 检查数据库。如果您使用 wp_handle_upload 上传普通文件,Wordpress 会在您的数据库中创建一些记录?也许 WP 无法删除此图像,因为您在数据库中没有任何记录。其他方式 - 因为您手动保存图像(使用 file_put_contents),您可以手动删除它(在 PHP 中取消链接)。
-
我在考虑使用 unlink,但这不是一个很好的解决方案,因为您必须调用多个 unlinks(所有拇指等)。不知何故需要获取为每个上传的 img 创建的所有缩略图 ..
-
嗯。并且这些缩略图可能在名称/文件夹中有一些模式,或者 Wordpress 将有关缩略图的这些信息保存在数据库中。也许您可以编写自己的函数来上传。有wp_handle_upload,你可以创建wp_handle_base64_upload,它可以是wp_handle_upload的副本,你可以在你自己的函数中做同样的事情。检查 wp_handle_upload 在哪里。
-
也想一想:问题是 wp_handle_upload 接受 $file,其中(我引用)“$file 对 $_FILES 的单个元素的引用。为每个上传的文件调用一次函数。”
-
嗯...也许你可以在上传之前执行一些函数并覆盖$_FILES。我不确定,但我知道你可以替换 $_POST,所以也可能替换为 $_FILES。您可以过滤每个文件并将其放入 $_FILES。