近来发现有个项目当中有一些重复文章,可是,删除重复文章之后发现媒体库当中还有很多无关联文章的图片素材需要删除。
如果此时使用媒体库当中的筛选功能筛选出这些无关联文章的图片素材,才批量删除的话,太慢太慢了。
如果经过几次折腾弄了一个自动批量删除无关联图片的脚本加入到网站当前主题函数当中,只要运行网站的任何页面,脚本都会在后台自动运行。
文章目录
方法一:
代码如下:
function delete_unattached_media() {
// 获取所有未附加到任何内容的媒体文件
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
'post_parent' => 0,
'fields' => 'ids',
);
$unattached_media = new WP_Query($args);
if ($unattached_media->have_posts()) {
foreach ($unattached_media->posts as $media_id) {
// 检查媒体文件是否被引用
$is_referenced = false;
$attachment_url = wp_get_attachment_url($media_id);
if ($attachment_url) {
// 搜索内容中是否有引用该URL
$args = array(
's' => $attachment_url,
'post_type' => 'any',
'post_status' => 'any',
'posts_per_page' => 1,
);
$referenced_posts = new WP_Query($args);
if ($referenced_posts->have_posts()) {
$is_referenced = true;
}
}
// 如果没有被引用,删除该媒体文件
if (!$is_referenced) {
wp_delete_attachment($media_id, true);
echo "Deleted media ID: $media_id\n";
}
}
} else {
echo "No unattached media found.\n";
}
}
// 运行函数一次性删除未附加的媒体文件
delete_unattached_media();
使用方法:
1. **添加代码**:将上述代码添加到主题的 `functions.php` 文件或创建一个自定义插件。
2. **运行代码**:访问你的WordPress网站,代码会自动运行并删除未附加的媒体文件。
注意事项:
1. **备份网站**:在执行任何批量删除操作之前,务必备份你的WordPress网站,包括数据库和文件。
2. **测试环境**:建议在测试环境中先运行代码,确保其效果符合预期。
方法二:
创建自定义插件:
如果你希望通过插件形式运行该代码,可以按照以下步骤创建一个自定义插件:
1. 在 `wp-content/plugins/` 目录下创建一个新目录,例如 `delete-unattached-media`。
2. 在该目录下创建一个文件 `delete-unattached-media.php`,并将上述代码粘贴到该文件中。
3. 在文件顶部添加插件头信息:
<?php /* Plugin Name: Delete Unattached Media Description: 批量永久删除媒体库中无关联的图片 Version: 1.0 Author: Your Name */ function delete_unattached_media() { // 获取所有未附加到任何内容的媒体文件 $args = array( 'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
'post_parent' => 0,
'fields' => 'ids',
);
$unattached_media = new WP_Query($args);
if ($unattached_media->have_posts()) {
foreach ($unattached_media->posts as $media_id) {
// 检查媒体文件是否被引用
$is_referenced = false;
$attachment_url = wp_get_attachment_url($media_id);
if ($attachment_url) {
// 搜索内容中是否有引用该URL
$args = array(
's' => $attachment_url,
'post_type' => 'any',
'post_status' => 'any',
'posts_per_page' => 1,
);
$referenced_posts = new WP_Query($args);
if ($referenced_posts->have_posts()) {
$is_referenced = true;
}
}
// 如果没有被引用,删除该媒体文件
if (!$is_referenced) {
wp_delete_attachment($media_id, true);
echo "Deleted media ID: $media_id\n";
}
}
} else {
echo "No unattached media found.\n";
}
}
// 运行函数一次性删除未附加的媒体文件
delete_unattached_media();
4. **激活插件**:登录到WordPress后台,导航到“插件”页面,找到“Delete Unattached Media”插件并激活它。
注意:
**性能问题**:如果你的媒体库非常大,执行该操作可能会花费较长时间,建议在非高峰期运行。
**确认删除**:删除操作是不可逆的,确保你已经备份了所有数据。
评论