问题描述
我刚从 MediaTemple 导出了一个很大的 WP 博客到 PHPFog 。
我使用标准的 WordPress 导出和导入插件。
由于一些未知的原因,我的所有媒体资产都被重复。我现在每个帖子的图像数量是两倍。
如果一个原始文件被称为”Lot-44-Warrens.jpg” 它现在有一个重复名为”Lot-44-Warrens1.jpg” 这两个文件都附加到同一个文章。
我现在有大约 250 多个帖子中有很多重复的图片。
所以我的问题是如何从媒体库和帖子中删除所述重复的内容?
我试图用”*1.jpg” 搜索媒体库,但它没有工作。
寻找一个整洁的解决方案,并不意味着手动删除每个 dupe 。
也许有一个 MySQL 查询我可以运行从 Library 和帖子中删除重复?
该网站是:http://igrealty.phpfogapp.com/。
最佳解决方法
结合这个页面上的两个答案,我发现这是有效的。
$args = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => -1
));
$loop = new WP_Query($args);
while($loop->have_posts()) {
the_post();
$args2 = array(
'order' => 'ASC',
'post_type' => 'attachment',
'post_parent' => $post->ID,
'post_mime_type' => 'image');
$attachments = get_posts($args2);
if($attachments) {
foreach ($attachments as $img_post) {
if( ((strpos($img_post->guid, '1.jpg')!== false) || (strpos($img_post->guid, '1.gif')!== false) || (strpos($img_post->guid, '1.png')!== false))){
$stuff = $img_post->guid;
wp_delete_attachment($img_post->ID);
}
}
}
} wp_reset_postdata();
次佳解决方法
使用 run-once 脚本进行清理。只是一个大纲,没有代码:
-
获取所有帖子参见
get_posts( array ( 'numberposts' => -1 ) )
-
为每个帖子获取所有附件。参见
get_children( array ( 'post_type' => 'attachment', 'numberposts' => -1 ) )
-
每个附件获取附件 URL 。参见
wp_get_attachment_url()
-
如果您在父帖子的内容 (
$post->post_content
) 中找到附件网址:-
如果有另一个具有相同文件名的附件 URL 加上
1
和 -
两者都是帖子内容的一部分
-
先删除第二张图片
-
使用
wp_delete_attachment()
删除物理文件。这将删除其他帖子中的所有元数据和所有关联。这是删除附件文件 (imho) 的最佳方法。
-
可能还要等一下。在您的网站的本地副本上测试。也许你应该以 50 个帖子 ('numberposts' => 50
) 的步骤运行该过程。
第三种解决方法
该脚本将抓取数据库中的所有附件,通过 md5 将文件彼此进行比较,如果它找到重复文件,并且在文件名末尾有一个,它将删除该图像:
require('wp-load.php');
global $wpdb;
$img_posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE post_type like 'attachment'");
$img_md5s = array();
foreach($img_posts as $img_post){
$single_img_md5 = md5_file($img_post->guid);
if(in_array($single_img_md5, $img_md5s) && ((strpos($img_post->guid, '1.jpg')!== false) || (strpos($img_post->guid, '1.gif')!== false) || (strpos($img_post->guid, '1.png')!== false))){
wp_delete_attachment($img_post->ID);
}else{
$img_md5s[] = $single_img_md5;
}
}
只需将其放在根目录中的文件中即可。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。