
通常在使用WordPress撰写帖子时,会同时附加图片。然而,当帖子被删除时,图片往往仍然存在。今天,我们将深入探讨“自动删除帖子图片”的主题。
帖子被删除但图片不被删除的原因
帖子被删除后,图片仍然存在的原因是,图片和帖子在数据库中被不同地处理。当删除帖子时,WordPress会删除该帖子的元信息和内容,但与之关联的图片则被视为单独管理的附件。因此,图片通常会保留。
这里就出现了问题,如果与帖子相关的图片持续存在,将会浪费存储空间,并可能导致网站速度下降等问题。
每次在媒体库中删除不必要的图片既麻烦又困难,尤其是当帖子增多时,管理起来会变得更加复杂。
自动删除帖子图片的函数介绍
以下是用于在删除帖子时删除所有关联图片的函数代码。
function delete_images_with_post( $post_id ) {
// 忽略修订版
if ( wp_is_post_revision( $post_id ) ) {
return;
}
// 删除特色图片
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( $thumbnail_id ) {
wp_delete_attachment( $thumbnail_id, true );
}
// 删除正文中附加的所有图片
$attachments = get_attached_media( 'image', $post_id );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
}
}
add_action( 'before_delete_post', 'delete_images_with_post' );
函数的工作方式
上述函数通过 `add_action( ‘before_delete_post‘, ‘delete_images_with_post’ );` 语句连接到 `before_delete_post` 动作钩子。这个钩子在帖子被删除之前执行,此时会执行 `delete_image_with_post` 函数,该函数负责查找并删除与帖子关联的图片。
1. **忽略修订版**: 函数首先检查被删除的帖子是否为修订版。修订版是每次修改帖子时自动生成的先前版本,因此通过这种业务逻辑跳过不必要的修订版。
2. **删除特色图片**: 使用 `get_post_thumbnail_id` 函数查找与帖子关联的特色图片。如果存在特色图片,则通过 `wp_delete_attachment` 函数删除该图片。
3. **删除正文中的所有图片**: 使用 `get_attached_media` 函数查找正文中附加的所有图片。在这里指定’image’类型以提取所有图片格式,然后执行删除每张图片的循环。
使用的动作钩子及相关钩子介绍
`before_delete_post` 动作钩子在帖子被删除之前执行,当这个钩子工作时,可以定义要执行的功能并以函数的形式调用,从而在WordPress中添加所需的功能。许多推动WordPress功能增强的插件也使用这种 `钩子 (Hook)` 来实现功能。
类似的动作钩子
1. **after_delete_post**: 这个钩子在帖子被删除后执行。在此时,如果需要进行追踪或日志记录等后处理,则非常有用。
2. **delete_attachment**: 这个钩子在附件被删除时触发。可以用于删除图片的功能。
3. **before_delete_attachment**: 在附件被删除之前执行,可以根据特定条件阻止删除或进行额外操作。
如何使用?
只需将上述代码添加到主题文件夹中的 functions.php 文件中即可。有关修改 functions.php 的详细信息,请参考以下文章。
在将上述代码添加到 functions.php 后,删除帖子时,帖子中包含的图片也会一并删除。(在数据库记录中也会被移除,服务器上存储的图片文件也会被删除。)
注意事项
- 在将帖子“删除”到“垃圾箱”时不会触发此功能。只有在“永久删除”时才会触发。
- 如果同一图片在其他帖子中也被使用,则其他帖子中的图片将不再显示。在多个帖子中使用同一图片时,建议不要使用。
总结
自动删除与帖子关联的图片的方法非常有益,有助于博客管理。通过编写代码,可以最大化数据库的效率,并提升网站的整体性能。
帖子删除时留下的图片问题虽然令人烦恼,但通过上述方法可以轻松解决。在实际应用时,只需将上述代码添加到 functions.php 文件中即可轻松使用!
[wp_is_post_revision] : 检查帖子是否为修订版的功能,如果是修订版,则跳过特定操作。
[get_post_thumbnail_id] : 获取特定帖子特色图片ID的函数。
[wp_delete_attachment] : 删除特定附件的函数,第二个参数用于设置是否强制删除。
[get_attached_media] : 获取特定帖子附加媒体列表的函数。